⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash.bak

📁 ADI公司的关于光通讯模块的监控程序,在KEIL FOR ARM 的编译环境编译.程序大小约12K,芯片是ADu7020.
💻 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 + -