Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BSP_DISCO_F429ZI SDRAM_DISCO_F429ZI mbed
main.cpp
00001 #include "mbed.h" 00002 #include "SDRAM_DISCO_F429ZI.h" 00003 00004 SDRAM_DISCO_F429ZI sdram; 00005 00006 DigitalOut led_green(LED1); 00007 DigitalOut led_red(LED2); 00008 00009 Serial pc(USBTX, USBRX); 00010 00011 #define BUFFER_SIZE ((uint32_t)0x0100) 00012 #define WRITE_READ_ADDR ((uint32_t)0x0800) 00013 00014 void FillBuffer(uint32_t *pBuffer, uint32_t BufferLength, uint32_t Offset); 00015 uint8_t CompareBuffer(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength); 00016 00017 int main() 00018 { 00019 uint32_t WriteBuffer[BUFFER_SIZE]; 00020 uint32_t ReadBuffer[BUFFER_SIZE]; 00021 FMC_SDRAM_CommandTypeDef SDRAMCommandStructure; 00022 00023 pc.printf("\n\nSDRAM demo started\n"); 00024 led_red = 0; 00025 00026 // Fill the write buffer 00027 FillBuffer(WriteBuffer, BUFFER_SIZE, 0xA244250F); 00028 00029 // Write buffer 00030 sdram.WriteData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR, WriteBuffer, BUFFER_SIZE); 00031 pc.printf("Write data DONE\n"); 00032 00033 // Issue self-refresh command to SDRAM device 00034 SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_SELFREFRESH_MODE; 00035 SDRAMCommandStructure.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2; 00036 SDRAMCommandStructure.AutoRefreshNumber = 1; 00037 SDRAMCommandStructure.ModeRegisterDefinition = 0; 00038 if (sdram.Sendcmd(&SDRAMCommandStructure) != HAL_OK) 00039 { 00040 led_red = 1; 00041 error("BSP_SDRAM_Sendcmd FAILED\n"); 00042 } 00043 00044 // SDRAM memory read back access 00045 SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_NORMAL_MODE; 00046 if (sdram.Sendcmd(&SDRAMCommandStructure) != HAL_OK) 00047 { 00048 led_red = 1; 00049 error("BSP_SDRAM_Sendcmd FAILED\n"); 00050 } 00051 00052 while(1) { 00053 00054 // Read back data from the SDRAM memory 00055 sdram.ReadData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR, ReadBuffer, BUFFER_SIZE); 00056 pc.printf("\nRead data DONE\n"); 00057 00058 // Checking data integrity 00059 if (CompareBuffer(WriteBuffer, ReadBuffer, BUFFER_SIZE) != 0) 00060 { 00061 led_red = !led_red; 00062 pc.printf("Write/Read buffers are different\n"); 00063 } 00064 else 00065 { 00066 led_green = !led_green; 00067 pc.printf("Write/Read buffers are identical\n"); 00068 } 00069 00070 wait(1); 00071 } 00072 } 00073 00074 /** 00075 * @brief Fills buffer with user predefined data. 00076 * @param pBuffer: pointer on the buffer to fill 00077 * @param BufferLength: size of the buffer to fill 00078 * @param Value: first value to fill on the buffer 00079 * @retval None 00080 */ 00081 void FillBuffer(uint32_t *pBuffer, uint32_t BufferLength, uint32_t Value) 00082 { 00083 uint32_t tmpIndex = 0; 00084 00085 /* Put in global buffer different values */ 00086 for (tmpIndex = 0; tmpIndex < BufferLength; tmpIndex++ ) 00087 { 00088 pBuffer[tmpIndex] = tmpIndex + Value; 00089 } 00090 } 00091 00092 /** 00093 * @brief Compares two buffers. 00094 * @param pBuffer1, pBuffer2: buffers to be compared. 00095 * @param BufferLength: buffer's length 00096 * @retval 0: pBuffer2 identical to pBuffer1 00097 * 1: pBuffer2 differs from pBuffer1 00098 */ 00099 uint8_t CompareBuffer(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength) 00100 { 00101 while (BufferLength--) 00102 { 00103 if (*pBuffer1 != *pBuffer2) 00104 { 00105 return 1; 00106 } 00107 00108 pBuffer1++; 00109 pBuffer2++; 00110 } 00111 00112 return 0; 00113 }
Generated on Fri Jul 15 2022 21:20:26 by
1.7.2