#include "main.h"
#define TIMEBASE 0xFFFFFFFF
#define ST st = Get_TimerCounter(TIMER_0)
#define ET et = Get_TimerCounter(TIMER_0)
unsigned char wbuf[1024];
unsigned char rbuf[1024];
unsigned randx(unsigned val)
{
return Get_TimerCounter(TIMER_0) * 0x1961957 + val;
}
void display(const char * header, unsigned int et, unsigned int st)
{
double tx;
if(st > et) tx = TIMEBASE - st + et;
else tx = et - st;
printf("%s Test, Elapsed time: %10.3f ms\n", header, tx / 100000.0);
}
int main(void)
{
unsigned st, et;
int address = 0, i, er;
Set_PLL(16, 4);
Set_Port();
Set_Uart0(115200);
Set_TimerCounter(TIMER_0);
Set_TimerEnable(TIMER_0, true);
Set_SPI(SPI_MEM_2);
while(1)
{
printf("Press any key to start the test\n");
GetChar_Uart0();
for(i = 0; i < 1024; i++)
wbuf[i] = randx(i);
ST;
er = FLSH_EraseBlock(address);
ET; display("Erase", et, st);
if(er == FLSH_NO_ERR)
{
ST;
er = FLSH_WriteData(address * 1024, 1024, wbuf);
ET; display("Writing", et, st);
if(er == FLSH_NO_ERR)
{
ST;
er = FLSH_ReadData(address * 1024, 1024, rbuf);
ET; display("Reading", et, st);
if(er == FLSH_NO_ERR)
{
for(i = 0; i < 1024; i++)
if(wbuf[i] != rbuf[i])
{
printf("Compare error at %d, read %d instead of %d\n", i, rbuf[i], wbuf[i]);
break;
}
if(i == 1024)
printf("Test OK\n");
}
else printf("READ Error = %d\n", er);
}
else printf("WRITE Error = %d\n", er);
}
else printf("ERASE Error = %d\n", er);
address++;
}
return 0;
}