📄 flash.bak
字号:
// flash.c
/********************************************************************/
/* */
/* Flash/EE Rountine */
/* */
/********************************************************************/
#include <ADuC7020.h>
#include "common.h"
/********************************************************************/
/* */
/* Flash/EE Data initialize routine */
/* (source-to-flash) */
/********************************************************************/
void InitFlash(void){
int i;
if(flash_read(0xF208)){ // check A2h[130]
sff8472_table(); // load defalt data table
A2h[130]=0; // clear flash init. enable bit
// Load A2h data to Flash, start address 0x0008F000
flash_erase(0xF000); // erase page, F000 thru F1FF
flash_erase(0xF200); // erase page, F200 thru F3FF
for(i=0; i<256; i++){
flash_write(0xF000+(i*4), A2h[i]);
}
// Load A0h data to Flash, start address 0x0008F400
flash_erase(0xF400); // erase page, F400 thru F5FF
flash_erase(0xF600); // erase page, F600 thru F7FF
for(i=0; i<256; i++){
flash_write(0xF400+(i*4), A0h[i]);
}
}
}
/********************************************************************/
/* */
/* Initialize SFF8472 table in SRAM */
/* (flash-to-sram) */
/********************************************************************/
void InitSFF8472(void){
int i;
// Map A2h data to SRAM
for(i=0; i<256; i++){
A2h[i] = (flash_read(0xF000+(i*4)));
}
// Load A0h data to Flash, start address 0x0008F400
for(i=0; i<256; i++){
A0h[i] = (flash_read(0xF400+(i*4)));
}
}
/********************************************************************/
/* */
/* Flash/EE Update routine */
/* */
/********************************************************************/
void FlashUpdate(BYTE i2c_addr){
int i;
//FIQCLR = 0x00000200; // clear I2C0SIRQ
if(i2c_addr == 0xA0){
// Load A0h data to Flash, start address 0x0008F400
flash_erase(0xF400); // erase page, F400 thru F5FF
flash_erase(0xF600); // erase page, F600 thru F7FF
for(i=0; i<256; i++){
flash_write(0xF400+(i*4), A0h[i]);
}
}
if(i2c_addr == 0xA2){
// Load A2h data to Flash, start address 0x0008F000
flash_erase(0xF000); // erase page, F000 thru F1FF
flash_erase(0xF200); // erase page, F200 thru F2FF
for(i=0; i<256; i++){
flash_write(0xF000+(i*4), A2h[i]);
}
}
//FIQEN = 0x00000200; // enable I2C0SIRQ
}
/********************************************************************/
/* */
/* Flash/EE read routine */
/* */
/********************************************************************/
unsigned char flash_read(unsigned short int addr){
WORD cnt = 3000;
FEEADR = addr; // set address
FEECON = 0x01; // single read command
//while(!(FEESTA & 0x01)){} // wait for command completion
while((cnt>0) && (!(FEESTA & 0x01))) {cnt--;}
return (FEEDAT & 0xFF); // return one byte data
}
/********************************************************************/
/* */
/* Flash/EE write routine */
/* */
/********************************************************************/
void flash_write(unsigned short int addr, unsigned char data){
WORD cnt = 3000;
FEEADR = addr; // set address
FEEDAT = data; // set data value
FEECON = 0x02; // write command
//while(!(FEESTA & 0x01)){} // wait for command completion
while((cnt>0) && (!(FEESTA & 0x01))) {cnt--;}
}
/********************************************************************/
/* */
/* Flash/EE erase routine */
/* */
/********************************************************************/
void flash_erase(unsigned short int addr){
WORD cnt = 3000;
FEEADR = addr; // set address
FEECON = 0x05; // page erase command
//while(!(FEESTA & 0x01)){} // wait for command completion
while((cnt>0) && (!(FEESTA & 0x01))) {cnt--;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -