1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
30
31
35
36
41
46
47
48
53
54
55
56
57
58
59
60
62
63
68
69
70
71
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
104
105
106
107
108
109
110
114
115
116
120
121
122
124
125
126
127
128
129
130
131
132
133
134
139
140
141
146
150
155
159
164
168
173
177
182
186
187
188
195
196
197
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
234
244
245
252
267
268
271
272
/* ... */
#include "main.h"
/* ... */
/* ... */
Includes
#define BUFFER_SIZE ((uint32_t)0x0100)
#define WRITE_READ_ADDR ((uint32_t)0x0800)
Private define
uint16_t nor_aTxBuffer[BUFFER_SIZE];
uint16_t nor_aRxBuffer[BUFFER_SIZE];
uint8_t ubIDStatus = 0, ubEraseStatus = 0, ubWriteStatus = 0, ubReadStatus = 0, ubInitStatus = 0;
Private variables
static void NOR_SetHint(void);
static void Fill_Buffer(uint16_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset);
static uint8_t Buffercmp(uint16_t* pBuffer1, uint16_t* pBuffer2, uint16_t BufferLength);
Private function prototypes
/* ... */
void NOR_demo(void)
{
static NOR_IDTypeDef pNOR_ID;
NOR_SetHint();
/* ... */
if (HAL_GetREVID() >= 0x2000) {}
else
{
BSP_LCD_DisplayOff();
}else { ... }
if(BSP_NOR_Init() != NOR_STATUS_OK)
{
ubInitStatus++;
}if (BSP_NOR_Init() != NOR_STATUS_OK) { ... }
pNOR_ID.Manufacturer_Code = (uint16_t)0x00;
pNOR_ID.Device_Code1 = (uint16_t)0x00;
pNOR_ID.Device_Code2 = (uint16_t)0x00;
pNOR_ID.Device_Code3 = (uint16_t)0x00;
BSP_NOR_Read_ID(&pNOR_ID);
if(pNOR_ID.Manufacturer_Code != (uint16_t)0x0020)
ubIDStatus++;
else if(pNOR_ID.Device_Code1 != (uint16_t)0x227E)
ubIDStatus++;
else if (pNOR_ID.Device_Code2 != (uint16_t)0x2221)
ubIDStatus++;
else if (pNOR_ID.Device_Code3 != (uint16_t)0x2200)
ubIDStatus++;
BSP_NOR_ReturnToReadMode();
if(BSP_NOR_Erase_Block(WRITE_READ_ADDR) != NOR_STATUS_OK)
{
ubEraseStatus++;
}if (BSP_NOR_Erase_Block(WRITE_READ_ADDR) != NOR_STATUS_OK) { ... }
Fill_Buffer(nor_aTxBuffer, BUFFER_SIZE, 0xC20F);
if(BSP_NOR_WriteData(WRITE_READ_ADDR, nor_aTxBuffer, BUFFER_SIZE) != NOR_STATUS_OK)
{
ubWriteStatus++;
}if (BSP_NOR_WriteData(WRITE_READ_ADDR, nor_aTxBuffer, BUFFER_SIZE) != NOR_STATUS_OK) { ... }
if(BSP_NOR_ReadData(WRITE_READ_ADDR, nor_aRxBuffer, BUFFER_SIZE) != NOR_STATUS_OK)
{
ubReadStatus++;
}if (BSP_NOR_ReadData(WRITE_READ_ADDR, nor_aRxBuffer, BUFFER_SIZE) != NOR_STATUS_OK) { ... }
/* ... */
if (HAL_GetREVID() >= 0x2000) {}
else
{
BSP_LCD_DisplayOn();
BSP_SDRAM_Init();
}else { ... }
if(ubIDStatus != 0)
{
BSP_LCD_DisplayStringAt(20, 100, (uint8_t *)"NOR Read ID : FAILED.", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 115, (uint8_t *)"NOR Test Aborted.", LEFT_MODE);
}if (ubIDStatus != 0) { ... }
else
{
if(ubInitStatus != 0)
{
BSP_LCD_DisplayStringAt(20, 100, (uint8_t *)"NOR Initialization : FAILED.", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 115, (uint8_t *)"NOR Test Aborted.", LEFT_MODE);
}if (ubInitStatus != 0) { ... }
else
{
BSP_LCD_DisplayStringAt(20, 100, (uint8_t *)"NOR Initialization : OK.", LEFT_MODE);
}else { ... }
if(ubEraseStatus != 0)
{
BSP_LCD_DisplayStringAt(20, 115, (uint8_t *)"NOR ERASE : FAILED.", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 130, (uint8_t *)"NOR Test Aborted.", LEFT_MODE);
}if (ubEraseStatus != 0) { ... }
else
{
BSP_LCD_DisplayStringAt(20, 115, (uint8_t *)"NOR ERASE : OK. ", LEFT_MODE);
}else { ... }
if(ubWriteStatus != 0)
{
BSP_LCD_DisplayStringAt(20, 130, (uint8_t *)"NOR WRITE : FAILED.", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 145, (uint8_t *)"NOR Test Aborted.", LEFT_MODE);
}if (ubWriteStatus != 0) { ... }
else
{
BSP_LCD_DisplayStringAt(20, 130, (uint8_t *)"NOR WRITE : OK. ", LEFT_MODE);
}else { ... }
if(ubReadStatus != 0)
{
BSP_LCD_DisplayStringAt(20, 145, (uint8_t *)"NOR READ : FAILED.", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 160, (uint8_t *)"NOR Test Aborted.", LEFT_MODE);
}if (ubReadStatus != 0) { ... }
else
{
BSP_LCD_DisplayStringAt(20, 145, (uint8_t *)"NOR READ : OK. ", LEFT_MODE);
}else { ... }
if(Buffercmp(nor_aRxBuffer, nor_aTxBuffer, BUFFER_SIZE) > 0)
{
BSP_LCD_DisplayStringAt(20, 160, (uint8_t *)"NOR COMPARE : FAILED.", LEFT_MODE);
BSP_LCD_DisplayStringAt(20, 175, (uint8_t *)"NOR Test Aborted.", LEFT_MODE);
}if (Buffercmp(nor_aRxBuffer, nor_aTxBuffer, BUFFER_SIZE) > 0) { ... }
else
{
BSP_LCD_DisplayStringAt(20, 160, (uint8_t *)"NOR Test : OK. ", LEFT_MODE);
}else { ... }
}else { ... }
while (1)
{
if(CheckForUserInput() > 0)
{
return;
}if (CheckForUserInput() > 0) { ... }
}while (1) { ... }
}{ ... }
/* ... */
static void NOR_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 *)"NOR", 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 NOR", 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(uint16_t *pBuffer, uint32_t uwBufferLenght, uint32_t uwOffset)
{
uint32_t tmpIndex = 0;
for (tmpIndex = 0; tmpIndex < uwBufferLenght; tmpIndex++ )
{
pBuffer[tmpIndex] = tmpIndex + uwOffset;
}for (tmpIndex = 0; tmpIndex < uwBufferLenght; tmpIndex++) { ... }
}{ ... }
/* ... */
static uint8_t Buffercmp(uint16_t* pBuffer1, uint16_t* pBuffer2, uint16_t BufferLength)
{
while (BufferLength--)
{
if (*pBuffer1 != *pBuffer2)
{
return 1;
}if (*pBuffer1 != *pBuffer2) { ... }
pBuffer1++;
pBuffer2++;
}while (BufferLength--) { ... }
return 0;
}{ ... }
/* ... */
/* ... */