标题:
LPC21XX的BootLoader的实现(2)
[打印本页]
作者:
yuyang911220
时间:
2014-10-26 12:06
标题:
LPC21XX的BootLoader的实现(2)
/*********************************************************************************************************
** Function name:
blankChk
** Descriptions:
扇区查空,命令代码
53
** input parameters:
ucSec1:
起始扇区
**
ucSec2:
终止扇区
92
** output parameters:
GulParamout[0]:
IAP
操作状态码
,IAP
返回值
** Returned value:
GulParamout[0]:
IAP
操作状态码
,IAP
返回值
*********************************************************************************************************/
unsigned long
blankChk (unsigned char
ucSec1, unsigned char
ucSec2)
{
GulParamin[0] = IAP_BLANKCHK; /*
设置命令字
*/
GulParamin[1] = ucSec1; /*
设置参数
*/
GulParamin[2] = ucSec2;
(*IAP_Entry)(GulParamin, GulParamout); /*
调用
IAP
服务程序
*/
return (GulParamout[0]); /*
返回状态码
*/
}
/*********************************************************************************************************
** Function name:
parIdRead
** Descriptions:
读器件标识号,命令代码
54
** input parameters:
无
** output parameters:
GulParamout[0]:
IAP
操作状态码
,IAP
返回值
** Returned value:
GulParamout[0]:
IAP
操作状态码
,IAP
返回值
*********************************************************************************************************/
unsigned long
parIdRead (void)
{
GulParamin[0] = IAP_READPARTID; /*
设置命令字
*/
(*IAP_Entry)(GulParamin, GulParamout); /*
调用
IAP
服务程序
*/
return (GulParamout[0]); /*
返回状态码
*/
}
/*********************************************************************************************************
** Function name:
codeIdBoot
** Descriptions:
读
Boot
代码版本号,命令代码
55
** input parameters:
无
** output parameters:
GulParamout[0]:
IAP
操作状态码
,IAP
返回值
** Returned value:
GulParamout[0]:
IAP
操作状态码
,IAP
返回值
*********************************************************************************************************/
unsigned long
codeIdBoot (void)
{
GulParamin[0] = IAP_BOOTCODEID; /*
设置命令字
*/
(*IAP_Entry)(GulParamin, GulParamout); /*
调用
IAP
服务程序
*/
return (GulParamout[0]); /*
返回状态码
*/
}
/*********************************************************************************************************
** Function name:
dataCompare
** Descriptions:
校验数据,命令代码
56
** input parameters:
ulDst:
目标地址,即
RAM/FLASH
起始地址。地址必须字对齐
**
ulSrc:
源地址,即
FLASH/RAM
地址。地址必须字对齐
**
ulNo:
待比较的字节数。计数值应当为
4
的倍数字
** output parameters:
GulParamout[0]:
IAP
操作状态码
,IAP
返回值
** Returned value:
GulParamout[0]:
IAP
操作状态码
,IAP
返回值
*********************************************************************************************************/
unsigned long
dataCompare (unsigned long
ulDst, unsigned long
ulSrc, unsigned long
ulNo)
{
GulParamin[0] = IAP_COMPARE; /*
设置命令字
*/
GulParamin[1] = ulDst; /*
设置参数
*/
GulParamin[2] = ulSrc;
GulParamin[3] = ulNo;
(*IAP_Entry)(GulParamin, GulParamout); /*
调用
IAP
服务程序
*/
return (GulParamout[0]); /*
返回状态码
*/
}
以下为用户区代码:
写扇区,
mode
一共四种,而且只能使用这四种写入方式:
256
、
512
、
1024
或者
4096
字节
uint8 eepromWrite(uint32 WriteAddr, uint8*pBuffer, IAPWRITEMODE mode)
{
uint8 ucErr = 0;
__disable_irq();
if (WriteAddr >
64 * 1024)
{
__enable_irq();
return PARA_BANK_ERROR;
}
if ((((unsigned long)pBuffer) % 4) != 0 )
{
__enable_irq();
return PARA_SRCADDR_ERROR;
}
ucErr= sectorPrepare(EEPROM_STARTSEC, EEPROM_ENDSEC);
ucErr= ramCopy(WriteAddr, (unsigned long)pBuffer, mode);
ucErr= dataCompare(WriteAddr, (unsigned long)pBuffer, mode);
if(ucErr != CMD_SUCCESS)
{
/*
IAP
函数调用出错
*/
__enable_irq();
returnIAP_ERROR;
}
__enable_irq();
return EE_SUUCEESS;
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0