SDRAM basic example for DISCO-F769NI

Dependencies:   BSP_DISCO_F769NI

Committer:
jeromecoutant
Date:
Tue Apr 11 15:31:14 2017 +0000
Revision:
0:c18d9a07a0d8
Child:
2:0cfdd4157b1e
SDRAM basic example for DISCO-F769NI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jeromecoutant 0:c18d9a07a0d8 1 #include "mbed.h"
jeromecoutant 0:c18d9a07a0d8 2 #include "stm32f769i_discovery.h"
jeromecoutant 0:c18d9a07a0d8 3 #include "stm32f769i_discovery_lcd.h"
jeromecoutant 0:c18d9a07a0d8 4 #include "stm32f769i_discovery_sdram.h"
jeromecoutant 0:c18d9a07a0d8 5
jeromecoutant 0:c18d9a07a0d8 6 static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset);
jeromecoutant 0:c18d9a07a0d8 7 static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength);
jeromecoutant 0:c18d9a07a0d8 8
jeromecoutant 0:c18d9a07a0d8 9 #define BUFFER_SIZE ((uint32_t)0x0100)
jeromecoutant 0:c18d9a07a0d8 10 #define WRITE_READ_ADDR ((uint32_t)0x0800)
jeromecoutant 0:c18d9a07a0d8 11 #define SDRAM_WRITE_READ_ADDR ((uint32_t)0xC0177000)
jeromecoutant 0:c18d9a07a0d8 12
jeromecoutant 0:c18d9a07a0d8 13 uint32_t sdram_aTxBuffer[BUFFER_SIZE];
jeromecoutant 0:c18d9a07a0d8 14 uint32_t sdram_aRxBuffer[BUFFER_SIZE];
jeromecoutant 0:c18d9a07a0d8 15
jeromecoutant 0:c18d9a07a0d8 16 int main()
jeromecoutant 0:c18d9a07a0d8 17 {
jeromecoutant 0:c18d9a07a0d8 18 printf("\n\n SDRAM EXAMPLE FOR DISCO-F769NI START:\n");
jeromecoutant 0:c18d9a07a0d8 19
jeromecoutant 0:c18d9a07a0d8 20 /* Init LCD and display example information */
jeromecoutant 0:c18d9a07a0d8 21 BSP_LCD_Init();
jeromecoutant 0:c18d9a07a0d8 22 BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS);
jeromecoutant 0:c18d9a07a0d8 23 BSP_LCD_Clear(LCD_COLOR_WHITE);
jeromecoutant 0:c18d9a07a0d8 24 BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
jeromecoutant 0:c18d9a07a0d8 25 BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 40);
jeromecoutant 0:c18d9a07a0d8 26 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
jeromecoutant 0:c18d9a07a0d8 27 BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
jeromecoutant 0:c18d9a07a0d8 28 BSP_LCD_SetFont(&Font24);
jeromecoutant 0:c18d9a07a0d8 29 BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"SDRAM basic example", CENTER_MODE);
jeromecoutant 0:c18d9a07a0d8 30
jeromecoutant 0:c18d9a07a0d8 31 /* SDRAM device configuration */
jeromecoutant 0:c18d9a07a0d8 32 if(BSP_SDRAM_Init() != SDRAM_OK) {
jeromecoutant 0:c18d9a07a0d8 33 BSP_LCD_DisplayStringAt(20, 100, (uint8_t *)"SDRAM Initialization : FAILED", LEFT_MODE);
jeromecoutant 0:c18d9a07a0d8 34 } else {
jeromecoutant 0:c18d9a07a0d8 35 BSP_LCD_DisplayStringAt(20, 100, (uint8_t *)"SDRAM Initialization : OK", LEFT_MODE);
jeromecoutant 0:c18d9a07a0d8 36 }
jeromecoutant 0:c18d9a07a0d8 37 /* Fill the buffer to write */
jeromecoutant 0:c18d9a07a0d8 38 Fill_Buffer(sdram_aTxBuffer, BUFFER_SIZE, 0xA244250F);
jeromecoutant 0:c18d9a07a0d8 39
jeromecoutant 0:c18d9a07a0d8 40 /* Write data to the SDRAM memory */
jeromecoutant 0:c18d9a07a0d8 41 if(BSP_SDRAM_WriteData(SDRAM_WRITE_READ_ADDR + WRITE_READ_ADDR, sdram_aTxBuffer, BUFFER_SIZE) != SDRAM_OK) {
jeromecoutant 0:c18d9a07a0d8 42 BSP_LCD_DisplayStringAt(20, 130, (uint8_t *)"SDRAM WRITE : FAILED", LEFT_MODE);
jeromecoutant 0:c18d9a07a0d8 43 } else {
jeromecoutant 0:c18d9a07a0d8 44 BSP_LCD_DisplayStringAt(20, 130, (uint8_t *)"SDRAM WRITE : OK", LEFT_MODE);
jeromecoutant 0:c18d9a07a0d8 45 }
jeromecoutant 0:c18d9a07a0d8 46
jeromecoutant 0:c18d9a07a0d8 47 /* Read back data from the SDRAM memory */
jeromecoutant 0:c18d9a07a0d8 48 if(BSP_SDRAM_ReadData(SDRAM_WRITE_READ_ADDR + WRITE_READ_ADDR, sdram_aRxBuffer, BUFFER_SIZE) != SDRAM_OK) {
jeromecoutant 0:c18d9a07a0d8 49 BSP_LCD_DisplayStringAt(20, 160, (uint8_t *)"SDRAM READ : FAILED", LEFT_MODE);
jeromecoutant 0:c18d9a07a0d8 50 } else {
jeromecoutant 0:c18d9a07a0d8 51 BSP_LCD_DisplayStringAt(20, 160, (uint8_t *)"SDRAM READ : OK", LEFT_MODE);
jeromecoutant 0:c18d9a07a0d8 52 }
jeromecoutant 0:c18d9a07a0d8 53
jeromecoutant 0:c18d9a07a0d8 54 if(Buffercmp(sdram_aTxBuffer, sdram_aRxBuffer, BUFFER_SIZE) > 0) {
jeromecoutant 0:c18d9a07a0d8 55 BSP_LCD_DisplayStringAt(20, 190, (uint8_t *)"SDRAM COMPARE : FAILED", LEFT_MODE);
jeromecoutant 0:c18d9a07a0d8 56 } else {
jeromecoutant 0:c18d9a07a0d8 57 BSP_LCD_DisplayStringAt(20, 190, (uint8_t *)"SDRAM Test : OK", LEFT_MODE);
jeromecoutant 0:c18d9a07a0d8 58 }
jeromecoutant 0:c18d9a07a0d8 59
jeromecoutant 0:c18d9a07a0d8 60 while (1) {
jeromecoutant 0:c18d9a07a0d8 61
jeromecoutant 0:c18d9a07a0d8 62 }
jeromecoutant 0:c18d9a07a0d8 63 }
jeromecoutant 0:c18d9a07a0d8 64
jeromecoutant 0:c18d9a07a0d8 65
jeromecoutant 0:c18d9a07a0d8 66 /**
jeromecoutant 0:c18d9a07a0d8 67 * @brief Fills buffer with user predefined data.
jeromecoutant 0:c18d9a07a0d8 68 * @param pBuffer: pointer on the buffer to fill
jeromecoutant 0:c18d9a07a0d8 69 * @param uwBufferLenght: size of the buffer to fill
jeromecoutant 0:c18d9a07a0d8 70 * @param uwOffset: first value to fill on the buffer
jeromecoutant 0:c18d9a07a0d8 71 * @retval None
jeromecoutant 0:c18d9a07a0d8 72 */
jeromecoutant 0:c18d9a07a0d8 73 static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset)
jeromecoutant 0:c18d9a07a0d8 74 {
jeromecoutant 0:c18d9a07a0d8 75 uint32_t tmpIndex = 0;
jeromecoutant 0:c18d9a07a0d8 76
jeromecoutant 0:c18d9a07a0d8 77 /* Put in global buffer different values */
jeromecoutant 0:c18d9a07a0d8 78 for (tmpIndex = 0; tmpIndex < uwBufferLenght; tmpIndex++ ) {
jeromecoutant 0:c18d9a07a0d8 79 pBuffer[tmpIndex] = tmpIndex + uwOffset;
jeromecoutant 0:c18d9a07a0d8 80 }
jeromecoutant 0:c18d9a07a0d8 81 }
jeromecoutant 0:c18d9a07a0d8 82
jeromecoutant 0:c18d9a07a0d8 83 /**
jeromecoutant 0:c18d9a07a0d8 84 * @brief Compares two buffers.
jeromecoutant 0:c18d9a07a0d8 85 * @param pBuffer1, pBuffer2: buffers to be compared.
jeromecoutant 0:c18d9a07a0d8 86 * @param BufferLength: buffer's length
jeromecoutant 0:c18d9a07a0d8 87 * @retval 1: pBuffer identical to pBuffer1
jeromecoutant 0:c18d9a07a0d8 88 * 0: pBuffer differs from pBuffer1
jeromecoutant 0:c18d9a07a0d8 89 */
jeromecoutant 0:c18d9a07a0d8 90 static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength)
jeromecoutant 0:c18d9a07a0d8 91 {
jeromecoutant 0:c18d9a07a0d8 92 while (BufferLength--) {
jeromecoutant 0:c18d9a07a0d8 93 if (*pBuffer1 != *pBuffer2) {
jeromecoutant 0:c18d9a07a0d8 94 return 1;
jeromecoutant 0:c18d9a07a0d8 95 }
jeromecoutant 0:c18d9a07a0d8 96
jeromecoutant 0:c18d9a07a0d8 97 pBuffer1++;
jeromecoutant 0:c18d9a07a0d8 98 pBuffer2++;
jeromecoutant 0:c18d9a07a0d8 99 }
jeromecoutant 0:c18d9a07a0d8 100
jeromecoutant 0:c18d9a07a0d8 101 return 0;
jeromecoutant 0:c18d9a07a0d8 102 }