📄 flash.c
字号:
// 参数: addr 为地址 , 范围 0x1000~0xFFFF
////////////////////////////////////////////////////
//Byte 0 : Channel 0xff00
//Byte 1-2 : Build Serial Number 0xff01-0xff02
//Byte 3 : Source Level Address 0xff03
//Byte 4 : Dst Level Address 0xff04
//Byte 5-7 : Up Router Table 0xff05-0xff07
//Byte 8-10 : Down Router Table 0xff08-0xff0A
////////////////////////////////////////////////////
unsigned char ReadFlash(unsigned int addr)
{
return (*(unsigned char *)addr);
}
void WriteFlash(unsigned int addr,unsigned char d)
{
unsigned char reg1,reg2;
reg1=_BIC_SR(GIE);
reg2=IE1;IE1=0; // 保护原来中断标志,并关闭有关中断。
// 写一个字节数据到指定flash地址
while (FCTL3&BUSY); // 等待以前FLASH操作完成
FCTL3 = FWKEY;
FCTL1 = FWKEY+WRT; // 发送写flash命令
*(unsigned char *)addr=d; // 写数据到指定的flash地址
while(FCTL3&BUSY); // 等待写操作完成
FCTL1 = FWKEY;
FCTL3 = FWKEY+LOCK; // 对FLASH内容进行加锁保护
if(reg1&GIE) _BIS_SR(GIE); // 恢复中断标志
IE1=reg2;
return;
}
void EraseSectorFlash(unsigned int wAddr)
{
unsigned char reg1,reg2;
reg1=_BIC_SR(GIE);
reg2=IE1; // 保护有关中断标志
IE1=0; // 关闭IE1中断
while(FCTL3&BUSY); // 等待FLASH编程结束
FCTL3 = FWKEY; // 为了准备编程而初始化FLASH控制寄存器3
FCTL1 = FWKEY+ERASE; // 发送FLASH擦除命令
*(unsigned char *)wAddr=0; // 启动擦除操作
while(FCTL3&BUSY); // 等待擦除操作完成
FCTL1 = FWKEY; // 撤销任何对FLASH的操作命令
FCTL3 = FWKEY+LOCK; // 对FLASH内容进行加锁保护
if(reg1&GIE) _BIS_SR(GIE); // 恢复中断标志
IE1=reg2;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -