SDRAM for DISCO_F746NG basic example
Dependencies: BSP_DISCO_F746NG
main.cpp
00001 #include "mbed.h" 00002 #include "stm32746g_discovery_sdram.h" 00003 00004 #define BUFFER_SIZE ((uint32_t)0x0100) 00005 #define WRITE_READ_ADDR ((uint32_t)0x0800) 00006 00007 void FillBuffer(uint32_t *pBuffer, uint32_t BufferLength, uint32_t Offset); 00008 uint8_t CompareBuffer(uint32_t *pBuffer1, uint32_t *pBuffer2, uint16_t BufferLength); 00009 00010 int main() 00011 { 00012 uint32_t WriteBuffer[BUFFER_SIZE]; 00013 uint32_t ReadBuffer[BUFFER_SIZE]; 00014 FMC_SDRAM_CommandTypeDef SDRAMCommandStructure; 00015 00016 printf("\n\nSDRAM demo started\n"); 00017 00018 BSP_SDRAM_Init(); 00019 00020 // Fill the write buffer 00021 FillBuffer(WriteBuffer, BUFFER_SIZE, 0xA244250F); 00022 00023 // Write buffer 00024 BSP_SDRAM_WriteData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR, WriteBuffer, BUFFER_SIZE); 00025 printf("Write data DONE\n"); 00026 00027 // Issue self-refresh command to SDRAM device 00028 SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_SELFREFRESH_MODE; 00029 SDRAMCommandStructure.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; 00030 SDRAMCommandStructure.AutoRefreshNumber = 1; 00031 SDRAMCommandStructure.ModeRegisterDefinition = 0; 00032 if (BSP_SDRAM_Sendcmd(&SDRAMCommandStructure) != HAL_OK) { 00033 error("BSP_SDRAM_Sendcmd FAILED\n"); 00034 } 00035 00036 // SDRAM memory read back access 00037 SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_NORMAL_MODE; 00038 if (BSP_SDRAM_Sendcmd(&SDRAMCommandStructure) != HAL_OK) { 00039 error("BSP_SDRAM_Sendcmd FAILED\n"); 00040 } 00041 00042 // Read back data from the SDRAM memory 00043 BSP_SDRAM_ReadData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR, ReadBuffer, BUFFER_SIZE); 00044 printf("Read data DONE\n"); 00045 00046 // Checking data integrity 00047 if (CompareBuffer(WriteBuffer, ReadBuffer, BUFFER_SIZE) != 0) { 00048 printf("Write/Read buffers are different\n"); 00049 } else { 00050 printf("Write/Read buffers are identical\n"); 00051 } 00052 } 00053 00054 /** 00055 * @brief Fills buffer with user predefined data. 00056 * @param pBuffer: pointer on the buffer to fill 00057 * @param BufferLength: size of the buffer to fill 00058 * @param Value: first value to fill on the buffer 00059 * @retval None 00060 */ 00061 void FillBuffer(uint32_t *pBuffer, uint32_t BufferLength, uint32_t Value) 00062 { 00063 uint32_t tmpIndex = 0; 00064 00065 /* Put in global buffer different values */ 00066 for (tmpIndex = 0; tmpIndex < BufferLength; tmpIndex++) { 00067 pBuffer[tmpIndex] = tmpIndex + Value; 00068 } 00069 } 00070 00071 /** 00072 * @brief Compares two buffers. 00073 * @param pBuffer1, pBuffer2: buffers to be compared. 00074 * @param BufferLength: buffer's length 00075 * @retval 0: pBuffer2 identical to pBuffer1 00076 * 1: pBuffer2 differs from pBuffer1 00077 */ 00078 uint8_t CompareBuffer(uint32_t *pBuffer1, uint32_t *pBuffer2, uint16_t BufferLength) 00079 { 00080 while (BufferLength--) { 00081 if (*pBuffer1 != *pBuffer2) { 00082 return 1; 00083 } 00084 00085 pBuffer1++; 00086 pBuffer2++; 00087 } 00088 00089 return 0; 00090 }
Generated on Wed Jul 13 2022 03:13:14 by 1.7.2