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

📄 writeflash1.c

📁 motorola jw32 usb 源码
💻 C
字号:


// #define   _debug
#ifdef _debug
		#define FBUS 10                  //总线速度4M
#else
 #define FBUS 32                 //总线速度32M
#endif
#define ERARNGE() {__asm jsr $FE13;} //跳到0x2806执行//gw32 0xFe13
#define PGRRNGE() {__asm jsr $FE10;} //跳到0x2809执行  gw32 0xFE10
#define LDRNGE()  {__asm jsr $FA31;} //跳到0x2809执行  gw32 0xFA31

//RAM buffer define areac

const word   Ram_Blcok = (word)Ram_Key;
#define  Bus_Speed      		Ram_Key[0]
#define  RamDataSize    		Ram_Key[1]
#define  ADD_RH      				Ram_Key[2]
#define  ADD_RL         		Ram_Key[3]
void ErasePage(byte const *Address,byte *ebuffer) //FLASH擦除函数
{
word eaddress;
byte highaddr;
	ebuffer[0] = FBUS;
 eaddress =(word)Address;
 highaddr =     eaddress>>8;
 ebuffer[2] =highaddr;
ebuffer[3] =(byte) eaddress;
//FLCR = 0x0a;  //control erase.open
 __asm ldhx ebuffer;      //将要擦除的地址装入H,X寄存器
 ERARNGE();                //调用擦除函数
// FLCR = 0x00;  //control erase.close

}
//---------------------------------------------------------------------
void WriteFlash(byte const *address,byte  number,byte *inbuffer)        //FLASH编程函数
{
word romaddress;
BYTE bhigh;
DisableInterrupts;
FLBPR = 0x7A;
//-----------------------
romaddress = (word)address;
ErasePage(address,inbuffer);//first errase flash
delayms(1);
//wrietflag:
//----------------------------
inbuffer[1] = number;
inbuffer[0] = FBUS;
bhigh = romaddress>>8;
inbuffer[2] = bhigh;
inbuffer[3] = (byte)romaddress;
//FLCR = 0x09;  //control erase.open
__asm ldhx inbuffer;         //将要编程的地址装入H,X寄存器
PGRRNGE();                 //调用编程函数
//FLCR = 0x00;
FLBPR = 0x00;
 EnableInterrupts;
}
//load rom data to outbuffer
void ReadFlash(byte const *address,byte length,byte *outbuffer)
{
	word romaddress;
	byte bhigh;
	outbuffer[0] = FBUS;
	outbuffer[1]  =  length;
	romaddress = (word)address;
	bhigh = romaddress>>8;
	outbuffer[2] = bhigh;
	outbuffer[3] = (byte)romaddress;
//	__asm ldhx Ram_Blcok;         //将要编程的地址装入H,X寄存器
__asm ldhx outbuffer;
	LDRNGE();               //调用编程函
}

typedef struct  _keyMapIndex{
BYTE keyNumber; //表示键号
BYTE const *address;//保存键在FLASH中数据部分的地址,不包括长度
BYTE length;//保存键映射数据的长度
}keyMapIndex;

#define MAXKEYNUMBER       10

keyMapIndex  KeyMap1[MAXKEYNUMBER];


BYTE Modify_KeyMapIndex(BYTE const * flashAddress,BYTE flashDataLength, keyMapIndex * keyMap,BYTE KeyMapLength)
{
    unsigned char i,flashDataL,length_check=0;
    flashDataL=*flashAddress;           //Key1…Keyn映射数据的总长度
    if(flashDataLength<flashDataL)
        return FALSE;

    flashAddress+=2;                    //指向Key1映射数据的数据长度
    for(i=0;i<KeyMapLength;i++)
    {
        keyMap[i].keyNumber=i;

        keyMap[i].length=*flashAddress;
        flashAddress++;                 //指向数据首地址
        keyMap[i].address=flashAddress;
        flashAddress+=keyMap[i].length; //数据长度
        flashAddress++;                 //结束符
        length_check=2+keyMap[i].length+length_check;
        if(length_check>=flashDataL)
            return TRUE;
    }

    return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -