上面这个函数,是对DATAFLASH EEPROM进行读写,有主函数给出地址和数据,由该函数进行处理
- void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data)
- {
- UINT8 looptmp=0,u8_addrl_r;
- unsigned char code *cd_longaddr;
- unsigned char xdata *xd_tmp;
-
- //Check page start address
- u8_addrl_r = u16_addr;
- if (u8_addrl_r<0x80)
- {
- u8_addrl_r = 0;
- }
- else
- {
- u8_addrl_r = 0x80;
- }
- //Save APROM data to XRAM
- xd_tmp = 0x80;
- cd_longaddr = (u16_addr&0xff00)+u8_addrl_r;
- while (xd_tmp !=0x100)
- {
- *xd_tmp = *cd_longaddr;
- looptmp++;
- xd_tmp++;
- cd_longaddr++;
- }
- // Modify customer data in XRAM
- u8_addrl_r = u16_addr;
- if (u8_addrl_r<0x80)
- {
- xd_tmp = u8_addrl_r+0x80;
- }
- else
- {
- xd_tmp = u8_addrl_r+0;
- }
- *xd_tmp = u8_data;
- //Erase APROM DATAFLASH page
- IAPAL = u16_addr;
- IAPAH = u16_addr>>8;
- IAPFD = 0xFF;
- set_IAPEN;
- set_APUEN;
- IAPCN = 0x22;
- set_IAPGO;
- //Save changed RAM data to APROM DATAFLASH
- u8_addrl_r = u16_addr;
- if (u8_addrl_r<0x80)
- {
- u8_addrl_r =0;
- }
- else
- {
- u8_addrl_r = 0x80;
- }
- xd_tmp = 0x80;
- IAPAL = u8_addrl_r;
- IAPAH = u16_addr>>8;
- set_IAPEN;
- set_APUEN;
- IAPCN = 0x21;
- while (xd_tmp !=0xFF)
- {
- IAPFD = *xd_tmp;
- set_IAPGO;
- IAPAL++;
- xd_tmp++;
- }
- clr_APUEN;
- clr_IAPEN;
- }
|