标题:
LPC21XX的BootLoader的实现(3)
[打印本页]
作者:
yuyang911220
时间:
2014-10-26 12:09
标题:
LPC21XX的BootLoader的实现(3)
擦除扇区,一次至少擦除一个扇区,在写之前必须擦除。
uint8 eepromErase(IAPCHANNEL StartSec,IAPCHANNEL EndSec)
{
uint8 ucErr = 0;
__disable_irq();
ucErr= sectorPrepare(StartSec, EndSec);
ucErr= sectorErase(StartSec, EndSec);
ucErr= blankChk(StartSec, EndSec);
if(ucErr!= CMD_SUCCESS)
{
/*
IAP
函数调用出错
*/
__enable_irq();
returnIAP_ERROR;
}
__enable_irq();
return EE_SUUCEESS;
}
读扇区,读取相应地址处的数据
void eepromRead(uint32 ReadAddr, uint8*pBuffer, uint16 NumToRead)
{
uint16 i;
for (i = 0; i < NumToRead; i++)
{
pBuffer
= *(uint8 * )ReadAddr;
ReadAddr += 1;
}
}
在成功实现
IAP
功能后,就是
BootLoader
的编写了,
BootLoader
实现比较简单,里面完成
APP
的写入即可,
APP
的写入大家可以按需要实现,用串口等方式进行数据的传输。在
APP
写完后将
PC
指针跳转到指定位置即可。
PC
指针的跳转相信大家都不陌生,使用以下方法实现:
//
定义一个函数类型的参数
typedef
void (*iapfun)(void);
iapfun jump2app;
jump2app = (iapfun)0x4000;//APP
的
ROM
地址
(*jump2app)();
BootLoader
的编写需要注意
RAM
的设置。
由于
IAP
使用到
RAM
顶部的
32
个字节,因此
KEIL
中设置
RAM
大小时要用总大小减去
0X20
。我使用的单片机
RAM
总大小为
16K
,因此
SIZE
设置为
0X3FE0
。如图:
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0