ST / Mbed 2 deprecated DISCO-F429ZI_SDRAM_demo

Dependencies:   BSP_DISCO_F429ZI SDRAM_DISCO_F429ZI mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }