📄 flashu.c.bak
字号:
#include<stdio.h>
/*global change para */
#define FLASH_BASE_ADDR 0x90000000 /*Flash address is start */
#define FLASH_ORDER 2 /*1:address at 8-Bit mode;2:address at 16-Bit mode; 4: address at 32-Bit mode*/
#ifdef FLASH_8
#define FLASH_CMD_ADDRESS_1 0xaaa
#define FLASH_CMD_ADDRESS_2 0x555
#endif
#ifdef FLASH_16
#define FLASH_CMD_ADDRESS_1 0x555
#define FLASH_CMD_ADDRESS_2 0x2aa
#endif
#define FLASH_CMD_1 *(volatile unsigned char *)(FLASH_BASE_ADDR+FLASH_CMD_ADDRESS_1*FLASH_ORDER)
#define FLASH_CMD_2 *(volatile unsigned char *)(FLASH_BASE_ADDR+FLASH_CMD_ADDRESS_2*FLASH_ORDER)
unsigned char ReadID(void);
void EraseChip(void);
void WriteIsOver(void);
main()
{
unsigned char i;
int done;
i= ReadID();
printf("Flash chip ID is %d\n",i);
printf("what are you doing?\n1:Erase\n2:program only\n3:erase and reprogram\n");
scanf("%d",&done);
switch( done )
{
case 1:
puts("Erase is OK\n");
break;
case 2:
puts("Program is OK\n");
break;
case 3:
puts("Erase and reprogram is OK\n");
break;
}
}
unsigned char ReadID(void)
{
unsigned char flash_state;
FLASH_CMD_1=0xaa;
FLASH_CMD_2=0x55;
FLASH_CMD_1=0x90;
flash_state =*(volatile unsigned char *)FLASH_BASE_ADDR;
return flash_state;
}
void EraseChip(void)
{
FLASH_CMD_1 = 0xaa;
FLASH_CMD_2 = 0x55;
FLASH_CMD_1 = 0x80;
FLASH_CMD_1 = 0xaa;
FLASH_CMD_2 = 0x55;
FLASH_CMD_1 = 0x10;
WriteIsOver();
}
void WriteIsOver(void)
{
unsigned int i;
unsigned char LastToggleBit,CurrentToggleBit;
LastToggleBit = (*(volatile unsigned char*)FlashMap1BaseAddr) & 0x40;
CurrentToggleBit = (*(volatile unsigned char*)FlashMap1BaseAddr) & 0x40;
for(i = 0; ; i++)
{
LastToggleBit = CurrentToggleBit;
CurrentToggleBit = (*(volatile unsigned char*)FlashMap1BaseAddr) & 0x40;
if(LastToggleBit == CurrentToggleBit) break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -