📄 flash.c
字号:
/**********************************************************************************
*FLASH.c
*Author:Andy
*Start Date:2006.3.13
*End Date: 2006.3.15
******************************************************************************/
#include "FLASH.h"
static UINT16 iProgAddr = 0;
static UINT8 cProgData = 0;
//extern flashunion FlashUnion;
UINT8 FLASHBUFFER[20];
/**************************************************************
* Write: MCU Flash write handler
* Parameters: none
* Return: none
* Actions: Enable the MCU Flash write
* 写入MCU Flash
**************************************************************/
void Flash1Byte(UINT16 FAddr_Buff,UINT8 FCont_Buff) //用于写入Flash
{
DisableInterrupts;
TPM1SC_TOIE = 0;
iProgAddr = FAddr_Buff;
cProgData = FCont_Buff;
FCDIV = 0x27;
asm
{
ldhx iProgAddr ;//要编写的rom地址
lda cProgData ;//欲写入flash的子机编号
}
(void)FlashProg1();
EnableInterrupts;
TPM1SC_TOIE = 1;
}
/**************************************************************
* Write: MCU Flash write handler
* Parameters: none
* Return: none
* Actions: Enable the MCU Flash write
* 写入MCU Flash
**************************************************************/
void FlashArray(UINT8 *PFCont,UINT16 Length,UINT16 FAddr_Start) //用于写入Flash
{
UINT16 i;
DisableInterrupts;
TPM1SC_TOIE = 0;
for(i=0;i<Length;i++)
{
Flash1Byte(FAddr_Start,*PFCont);
PFCont++;
FAddr_Start++;
SRS = 0;
}
EnableInterrupts;
//TPM1SC_TOF = 0;
TPM1SC_TOIE = 1;
}
/**************************************************************
* Erase: Erase the MCU Flash handler
* Parameters: i,取1~4,表示要删除的是第几页flash
* Return: none
* Actions: Enable the MCU Flash Erasion
* 擦除MCU Flash
**************************************************************/
void EraseFlash(UINT8 i) //用于擦除Flash
{
DisableInterrupts;
TPM1SC_TOIE = 0;
FCDIV = 0x27;
SRS = 0;
/*向汇编的删除子程序传递参数*/
switch(i)
{
case 1:
asm
{
ldhx #$1080
}
(void)FlashErase1();//将第一页flash擦除到0xFF
//p1_rom = (char*)0x1080; //复原指针
break;
case 2:
asm
{
ldhx #$1200
}
(void)FlashErase1();//将第二页flash擦除到0xFF
//p2_rom = (char*)0x1200; //复原指针
break;
case 3:
asm
{
ldhx #$1400
}
(void)FlashErase1();//将第三页flash擦除到0xFF
//p3_rom = (char*)0x1400; //复原指针
break;
case 4:
asm
{
ldhx #$1600
}
(void)FlashErase1();//将第四页flash擦除到0xFF
//p4_rom = (char*)0x1600; //复原指针
break;
default:
break;
}
SRS = 0;
EnableInterrupts;
//TPM1SC_TOF = 0;
TPM1SC_TOIE = 1;
}
/**************************************************************
* Erase: Erase the MCU Flash handler
* Parameters: none
* Return: none
* Actions: Enable the MCU Flash Erasion
* 擦除MCUFlash
**************************************************************/
void EraseNum() //用于擦除Flash
{
DisableInterrupts;
TPM1SC_TOIE = 0;
FCDIV = 0x27;
/*向汇编的删除子程序传递参数*/
asm
{
ldhx #$1280
}
(void)FlashErase1();//将一页flash擦除到0xFF
//p2_rom = (char*)0x1280; //复原指针
EnableInterrupts;
//TPM1SC_TOF = 0;
TPM1SC_TOIE = 1;
}
/**************************************************************
* FUNCTION: READFLASH
* Parameters: 读什么内容
* Return: none
* Actions:当Zigbee发送报警信息到单片机的时候,单片机读flash然后打电话发短信
*
**************************************************************/
void ReadFlash(UINT8 FlashPosit)
{
//读flash操作
UINT8 i;
UINT16 p_temp;
UINT8 *temp;
p_temp = 0x1400;
switch(FlashPosit)
{
case SMS_CENTRE:
temp = (UINT8 *)p_temp;
for(i=0;i<11;i++)
{
FLASHBUFFER[i] = *temp++;
}
break;
case TELE_NUMBER1:
temp = (UINT8*)(p_temp + 0x0010);
for(i=0;i<11;i++)
{
FLASHBUFFER[i] = *temp++;
}
break;
case TELE_NUMBER2:
temp = (UINT8*)(p_temp + 0x0020);
for(i=0;i<11;i++)
{
FLASHBUFFER[i] = *temp++;
}
break;
case TELE_NUMBER3:
temp = (UINT8*)(p_temp + 0x0030);
for(i=0;i<11;i++)
{
FLASHBUFFER[i] = *temp++;
}
break;
case ALARM_INFO1:
temp = (UINT8*)(p_temp + 0x0040);
for(i=0;i<24;i++)
{
FLASHBUFFER[i] = *temp++;
}
break;
case ALARM_INFO2:
temp = (UINT8*)(p_temp + 0x00A0);
for(i=0;i<24;i++)
{
FLASHBUFFER[i] = *temp++;
}
break;
case ALARM_INFO3:
temp = (UINT8*)(p_temp + 0x0100);
for(i=0;i<24;i++)
{
FLASHBUFFER[i] = *temp++;
}
break;
case SLAVE_ID:
temp = (UINT8*)(p_temp + 0x0160);
for(i=0;i<15;i++)
{
FLASHBUFFER[i] = *temp++;
}
break;
////其他需要保存在FLASH中的数据可以在此读取
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -