📄 main.c
字号:
/* Example Code for Flash Write (One Sector) */
#define TIMEOUT 0x1000000
unsigned short *Flash555 ;
unsigned short *Flash2AA ;
int FlashErase( unsigned short *page )
{
int i;
/* Flash Sector(page) Erase Sequence */
*Flash555 = 0x0F0;
*Flash555 = 0x0AA;
*Flash2AA = 0x055;
*Flash555 = 0x080;
*Flash555 = 0x0AA;
*Flash2AA = 0x055;
*page = 0x30;
for (i=0;i<TIMEOUT;i++) if ( *page & 0x080 ) break;
if (i<TIMEOUT) return 1;
return 0;
}
int FlashWrite(unsigned short *src, unsigned short *dst )
{
int i;
/* Half Word Write Sequence */
*Flash555 = 0xAA;
*Flash2AA = 0x55;
*Flash555 = 0xA0;
*dst = *src ;
while ((*dst ^ *src) & 0x80);
for (i=0;i<TIMEOUT;i++) if ( !((*dst ^ *src) & 0x80) ) break;
if (i<TIMEOUT) return 1;
return 0;
}
void main( void )
{
int i,page,*tmp;
unsigned short *FlashBase,*MemoryBase;
Flash555 = ( unsigned short * )( 0x90000aaa ) ;
Flash2AA = ( unsigned short * )( 0x90000554 ) ;
tmp = (int *) 0x1800004;
*tmp = 0xFFFFFF13 ; /* CE1: 16bit Space */
/* Select Flash Sector(page) where you want to write on */
page = 4 ; /* 0 <= page <= 14 */
FlashBase = (unsigned short *) (0x90000000 | (page<<16));
/* Set Memory Address whrer you want to read from */
MemoryBase = (unsigned short *) 0x00000000;
if(!FlashErase(FlashBase))
while(1) /* Flash Erase Error */;
for (i=0;i<0x08000;i++) {
if (*MemoryBase == 0x0ffff) continue;
if (!FlashWrite(MemoryBase++,FlashBase++)) break;
}
if (i<0x08000)
while(1); /* Flash Write Error */
else
while(1); /* Flash Write Complete */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -