1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
30
31
34
35
43
49
50
51
56
57
58
59
60
61
62
67
71
72
73
74
75
76
77
82
86
87
88
90
91
92
93
94
99
103
104
105
107
108
109
110
115
119
120
127
128
129
135
140
141
146
147
152
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
189
199
200
207
222
225
226
/* ... */
#include "main.h"
/* ... */
/* ... */
Includes
#define SDRAM_DMA_BUFFER_SIZE ((uint32_t)256)
Private define
static uint32_t sdram_aTxBuffer[SDRAM_DMA_BUFFER_SIZE];
static uint32_t sdram_aRxBuffer[SDRAM_DMA_BUFFER_SIZE];
extern SDRAM_HandleTypeDef sdramHandle;
__IO uint32_t uwDMA_Transfer_Complete = 0;
Private variables
static void SDRAM_DMA_SetHint(void);
static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLength, uint32_t uwOffset);
static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength);
Private function prototypes
/* ... */
void SDRAM_DMA_demo (void)
{
SDRAM_DMA_SetHint();
if (BSP_SDRAM_Init() != SDRAM_OK)
{
BSP_LCD_DisplayStringAt(20, 115, (uint8_t *)"SDRAM Initialization : FAILED.", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 130, (uint8_t *)"SDRAM Test Aborted.", LEFT_MODE);
}if (BSP_SDRAM_Init() != SDRAM_OK) { ... }
else
{
BSP_LCD_DisplayStringAt(20, 100, (uint8_t *)"SDRAM Initialization : OK.", LEFT_MODE);
}else { ... }
Fill_Buffer(sdram_aTxBuffer, SDRAM_DMA_BUFFER_SIZE, 0xA244250F);
uwDMA_Transfer_Complete = 0;
if (BSP_SDRAM_WriteData_DMA((SDRAM_WRITE_READ_ADDR + SDRAM_WRITE_READ_ADDR_OFFSET), sdram_aTxBuffer, SDRAM_DMA_BUFFER_SIZE) != SDRAM_OK)
{
BSP_LCD_DisplayStringAt(20, 115, (uint8_t *)"SDRAM WRITE dma : FAILED.", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 130, (uint8_t *)"SDRAM Test Aborted.", LEFT_MODE);
}if (BSP_SDRAM_WriteData_DMA((SDRAM_WRITE_READ_ADDR + SDRAM_WRITE_READ_ADDR_OFFSET), sdram_aTxBuffer, SDRAM_DMA_BUFFER_SIZE) != SDRAM_OK) { ... }
else
{
BSP_LCD_DisplayStringAt(20, 115, (uint8_t *)"SDRAM WRITE DMA : REQUESTED", LEFT_MODE);
}else { ... }
while (!uwDMA_Transfer_Complete)
{}while (!uwDMA_Transfer_Complete) { ... }
BSP_LCD_DisplayStringAt(20, 130, (uint8_t *)"SDRAM WRITE DMA : COMPLETED", LEFT_MODE);
uwDMA_Transfer_Complete = 0;
if (BSP_SDRAM_ReadData_DMA((SDRAM_WRITE_READ_ADDR + SDRAM_WRITE_READ_ADDR_OFFSET), sdram_aRxBuffer, SDRAM_DMA_BUFFER_SIZE) != SDRAM_OK)
{
BSP_LCD_DisplayStringAt(20, 145, (uint8_t *)"SDRAM READ DMA : FAILED", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 160, (uint8_t *)"SDRAM Test Aborted", LEFT_MODE);
}if (BSP_SDRAM_ReadData_DMA((SDRAM_WRITE_READ_ADDR + SDRAM_WRITE_READ_ADDR_OFFSET), sdram_aRxBuffer, SDRAM_DMA_BUFFER_SIZE) != SDRAM_OK) { ... }
else
{
BSP_LCD_DisplayStringAt(20, 145, (uint8_t *)"SDRAM READ DMA : REQUESTED", LEFT_MODE);
}else { ... }
while (!uwDMA_Transfer_Complete)
{}while (!uwDMA_Transfer_Complete) { ... }
BSP_LCD_DisplayStringAt(20, 160, (uint8_t *)"SDRAM READ DMA : COMPLETED", LEFT_MODE);
if (Buffercmp(sdram_aTxBuffer, sdram_aRxBuffer, SDRAM_DMA_BUFFER_SIZE) > 0)
{
BSP_LCD_DisplayStringAt(20, 175, (uint8_t *)"SDRAM COMPARE : FAILED.", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 190, (uint8_t *)"SDRAM Test Aborted.", LEFT_MODE);
}if (Buffercmp(sdram_aTxBuffer, sdram_aRxBuffer, SDRAM_DMA_BUFFER_SIZE) > 0) { ... }
else
{
BSP_LCD_DisplayStringAt(20, 175, (uint8_t *)"SDRAM TEST : SUCCESSFUL", LEFT_MODE);
}else { ... }
while (1)
{
if (CheckForUserInput() > 0)
{
return;
}if (CheckForUserInput() > 0) { ... }
}while (1) { ... }
}{ ... }
/* ... */
void HAL_SDRAM_DMA_XferCpltCallback(DMA_HandleTypeDef *hdma)
{
uwDMA_Transfer_Complete = 1;
}{ ... }
/* ... */
void HAL_SDRAM_DMA_XferErrorCallback(DMA_HandleTypeDef *hdma)
{
BSP_LCD_SetTextColor(LCD_COLOR_RED);
BSP_LCD_DisplayStringAt(20, 215, (uint8_t *)"DMA ERROR", LEFT_MODE);
}{ ... }
/* ... */
static void SDRAM_DMA_SetHint(void)
{
BSP_LCD_Clear(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 80);
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
BSP_LCD_SetFont(&Font24);
BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"SDRAM DMA", CENTER_MODE);
BSP_LCD_SetFont(&Font12);
BSP_LCD_DisplayStringAt(0, 30, (uint8_t *)"This example shows how to write", CENTER_MODE);
BSP_LCD_DisplayStringAt(0, 45, (uint8_t *)"and read data on SDRAM", CENTER_MODE);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_DrawRect(10, 90, BSP_LCD_GetXSize() - 20, BSP_LCD_GetYSize() - 100);
BSP_LCD_DrawRect(11, 91, BSP_LCD_GetXSize() - 22, BSP_LCD_GetYSize() - 102);
BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
}{ ... }
/* ... */
static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLength, uint32_t uwOffset)
{
uint32_t tmpIndex = 0;
for (tmpIndex = 0; tmpIndex < uwBufferLength; tmpIndex++ )
{
pBuffer[tmpIndex] = tmpIndex + uwOffset;
}for (tmpIndex = 0; tmpIndex < uwBufferLength; tmpIndex++) { ... }
}{ ... }
/* ... */
static uint8_t Buffercmp(uint32_t* pBuffer1, uint32_t* pBuffer2, uint16_t BufferLength)
{
while (BufferLength--)
{
if (*pBuffer1 != *pBuffer2)
{
return 1;
}if (*pBuffer1 != *pBuffer2) { ... }
pBuffer1++;
pBuffer2++;
}while (BufferLength--) { ... }
return 0;
}{ ... }
/* ... */
/* ... */