1.使用看门狗的程序 示例
2.可反复进入ISP的程序 示例
3.利用剩余的Falsh空间存储数据 示例
关键提示:CODE的绝对定位,方法在code_at.c中
-------------------------------------------------------------
// 使用看门狗的程序 示例
-------------------------------------------------------------
void WDTC_DOG(void)//在8958A/5964上,看门狗都能正常工作。
{
WDTKEY = 0x1e;
WDTKEY = 0xe1;//set
, WDTC = 0xa7;//dog_data; //喂狗
// SCONF =
0x01; //关ALEI
WDTKEY = 0xe1;
WDTKEY = 0x1e;//only read
}
void CLOSE_DOG(void)//关狗
{
WDTKEY = 0x1e;
WDTKEY = 0xe1;//set
WDTC = 0x00;//dog_data; //喂狗
WDTKEY = 0xe1;
WDTKEY = 0x1e;//only read
}
-------------------------------------------------------------
// 可反复进入ISP的程序 示例
-------------------------------------------------------------
//条件判断,是否进入ISP
if(!P1_6 && !P1_7)//条件由自己任意发挥...
{
ISP_ok = 1;//进入ISP 条件成立
}
if(ISP_ok != 0)//test
ISP
{
ISP_ok = 0;
CLOSE_DOG();//关狗
BEEP = 0;//TEST
DelayMs(100);
BEEP = 1;//TEST
GoToIsp();
}
-------------------------------------------------------------
//利用剩余的Falsh空间存储数据 示例
-------------------------------------------------------------
//Flash页擦除
ISPFAH = (uchar)(((uint)Nkey_a)>>8);
ISPFAL = (uchar)Nkey_a;
ISPFD = 0x55;
ISPFD = 0xaa;
ISPFD = 0x55;
ISPC = 0x82;//start to Page
erase (512 byte)
//写Flash
ISPFAH = (uchar)(((uint)Nkey_a)>>8);
ISPFAL = (uchar)Nkey_a;
for(i=0;i<6;i++)//连续写6字节
{
ISPFD = data_buf[i];
ISPC = 0x80;//start to
program
ISPFAL ++;
}
DelayMs(200);//此延时是必须的!
-------------------------------------------------------------
//CODE的绝对定位 方法
-------------------------------------------------------------
//不能这样定义:unsigned char code Nkey_a[6] _at_ 0x0E000;
//而是在BL51 Locate 下的 Code Range 栏填入:
?CO?CODE_AT(0E000h)
//菜单路径: Project / Options fo Target 'Target1' /