Beruflich Dokumente
Kultur Dokumente
h"
/* Private define -----------------------------------------------------------*/ #define BUFFER_SIZE #define WRITE_READ_ADDR 20000-->38000 #define COMMAND_ADDR 0x100 0x10000 //changed from
0x000
/* Private macro ------------------------------------------------------------*/ #define Bank1_SRAM1_ADDR ((uint32_t)0x60000000) >60000000 this is availabe in stm32f407 uint32_t *LCD_LCDREG=0x60000000; uint32_t *LCD_LCDRAM=0x60020000; /* Private variables --------------------------------------------------------*/ uint8_t TxBuffer[BUFFER_SIZE]; //eddited 640000000-
/* Private function prototypes ----------------------------------------------*/ void Fill_Buffer(uint16_t *pBuffer, uint16_t BufferLenght, uint32_t Offset); //void STM_EVAL_LEDInit(void); //void STM_EVAL_LEDOn(Led_TypeDef Led); void SRAM_Init(void); void SRAM_ReadBuffer(uint8_t* pBuffer, uint32_t NumHalfwordToRead); void SRAM_WriteBuffer(uint8_t* pBuffer, uint32_t NumHalfwordToWrite);
void LCD_writeData( uint16_t value ) { value=value<<8; *LCD_LCDREG=value; } void LCD_writeCommand(uint16_t value) { value=value<<8; *LCD_LCDRAM=value; }
void SRAM_WriteBuffer(uint8_t* pBuffer, uint32_t NumHalfwordToWrite) { for (; NumHalfwordToWrite != 0; NumHalfwordToWrite--) /* while there is data to write */ { /* Transfer data to the memory */ *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; Delay(16);
/* Increment the address*/ //WriteAddr += 2; } } void FILLLCD(uint8_t* pBuffer) { int i,k; for(i=0;i<76800;i++) { *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; *pBuffer--; *pBuffer--; *pBuffer--; } } void CLEAR(uint8_t* pBuffer,int length) { int i,k; for(i=0;i<length;i++) { *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; *pBuffer--; *pBuffer--; *pBuffer--; //1581=51*31 //1581=51*31
} } void setcolor(uint8_t* pBuffer,int len) { for(;len!=0;len--) { *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; *(uint8_t *) (Bank1_SRAM1_ADDR+WRITE_READ_ADDR ) = *pBuffer++; } }
for (; NumHalfwordToRead != 0; NumHalfwordToRead--) /* while there is data to read */ { /* Read a half-word from the memory */ *pBuffer++ = *(__IO uint8_t*) (Bank1_SRAM1_ADDR +0x10000 );//ReadAddr);
/* Put in global buffer different values */ for (IndexTmp = 0; IndexTmp < BufferLenght; IndexTmp++ ) { pBuffer[IndexTmp] = IndexTmp +Offset; }
FSMC_NORSRAMTimingInitTypeDef
GPIO_InitTypeDef GPIO_InitStructure;
+-------------------+--------------------+------------------+-----------------+ | PD0 <-> FSMC_D2 FSMC_A10 | | PD1 <-> FSMC_D3 FSMC_A11 | | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <->
| PE1
| PD4 <-> FSMC_NOE | PE3 FSMC_A12 | | PD5 <-> FSMC_NWE | PE4 FSMC_A13 | | PD7 <-> FSMC_NE1 |
<-> FSMC_A19
| PF2
<-> FSMC_A20
| PF3
| PD8 <-> FSMC_D13 | PE7 FSMC_A14 | | PD9 <-> FSMC_D14 | PE8 FSMC_A15 | | PD10 <-> FSMC_D15 | PE9 FSMC_NE2 |
<-> FSMC_D4
| PF4
<-> FSMC_D5
| PF5
<-> FSMC_D6
| PD11 <-> FSMC_A16 | PE10 <-> FSMC_D7 ---+ | PD12 <-> FSMC_A17 | PE11 <-> FSMC_D8 | PD13 <-> FSMC_A18 | PE12 <-> FSMC_D9 | PD14 <-> FSMC_D0 | PD15 <-> FSMC_D1 | | PE13 <-> FSMC_D10 | PE14 <-> FSMC_D11 | PE15 <-> FSMC_D12
+-------------------+--------------------+ */
//NWE
// // //
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);//PD7-->NE1 GPIO_PinAFConfig(GPIOD, GPIO_PinSource11, GPIO_AF_FSMC);//PD11-->DC GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_11|GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd
= GPIO_PuPd_DOWN;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/////////////////////added block /* GPIOE configuration */ GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource10, GPIO_AF_FSMC);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 ; GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
/* GPIOE configuration */ // // // // // // GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC);
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | // // // // // // // GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
/*
GPIO_PinAFConfig(GPIOF, GPIO_PinSource0 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource1 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource2 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource3 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource4 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource5 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource12 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource13 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource14 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOF, GPIO_PinSource15 , GPIO_AF_FSMC);
| GPIO_Pin_1
| GPIO_Pin_2
| GPIO_Pin_5
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOG, GPIO_PinSource0 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource1 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource2 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource3 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource4 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource5 , GPIO_AF_FSMC); GPIO_PinAFConfig(GPIOG, GPIO_PinSource9 , GPIO_AF_FSMC);
| GPIO_Pin_1
| GPIO_Pin_2
| GPIO_Pin_5
|GPIO_Pin_9;
GPIO_Init(GPIOG, &GPIO_InitStructure);
/*-- FSMC Configuration -----------------------------------------------------*/ p.FSMC_AddressSetupTime =0; p.FSMC_AddressHoldTime =0; p.FSMC_DataSetupTime =0; p.FSMC_BusTurnAroundDuration =0; p.FSMC_CLKDivision =1; p.FSMC_DataLatency =0; p.FSMC_AccessMode = FSMC_AccessMode_A;
//Changed
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; //changed from psram to sram FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; //eddited from disable to enable. FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
void SRAM_Test(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f4xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f4xx.c file */
*/
/* Write data to FSMC SRAM memory */ /* Fill the buffer to send */ Fill_Buffer(TxBuffer, BUFFER_SIZE, 0x320F); SRAM_WriteBuffer(TxBuffer, BUFFER_SIZE);
/* Read back SRAM memory and check content correctness */ /* for (Index = 0x00; (Index < BUFFER_SIZE) && (WriteReadStatus == 0); Index++) {