📄 iap.c
字号:
#include <LPC23xx.H>
#include "iap.h"
unsigned int paramin[5]; // IAP 入口参数缓冲区
unsigned int paramout[2]; // IAP 出口参数缓冲区
/* 定义函数指针 */
/* 定义函数指针 */
void (*IAP_Entry)(unsigned int [],unsigned int []);
/******************************************************************************************
** 函数名称: SelSector
** 函数功能: IAP 操作缓冲区选择,代码为50。
** 入口参数: sec1 起始扇区
** sec2 终止扇区
** 出口参数: IAP 操作状态码
** IAP 返回值(paramout 缓冲区)
******************************************************************************************/
unsigned long SelSector(unsigned char sec1,unsigned char sec2)
{
IAP_Entry = (void(*)(unsigned int [],unsigned int []))IAP_ENTER_ADR;
paramin[0] = IAP_SELECTOR; // 设置命令字
paramin[1] = sec1; // 设置参数
paramin[2] = sec2;
(*IAP_Entry)(paramin,paramout); // 调用IAP 服务程序
return(paramout[0]); // 返回状态码
}
/******************************************************************************************
** 函数名称: EraseSector
** 函数功能: 擦除扇区,命令代码52。
** 入口参数: sec1 起始扇区
** sec2 终止扇区
** 出口参数: IAP 操作状态码
** IAP 返回值(paramout 缓冲区)
******************************************************************************************/
unsigned long EraseSector(unsigned char sec1,unsigned char sec2)
{
IAP_Entry = (void(*)(unsigned int [],unsigned int []))IAP_ENTER_ADR;
paramin[0] = IAP_ERASESECTOR; // 设置命令字
paramin[1] = sec1; // 设置参数
paramin[2] = sec2;
paramin[3] = IAP_FCCLK;
(*IAP_Entry)(paramin,paramout); // 调用IAP 服务程序
return(paramout[0]); // 返回状态码
}
/******************************************************************************************
** 函数名称: RamToFlash
** 函数功能: 复制RAM 的数据到FLASH,命令代码51。
** 入口参数: dst 目标地址,即FLASH 起始地址,以256 字节为分界
** src 源地址,即RAM 地址,地址必须字对其
** no 复制字节个数,为256/512/1024/4096
** 出口参数: IAP 操作状态码
** IAP 返回值(paramout 缓冲区)
******************************************************************************************/
unsigned long RamToFlash(unsigned long dst, unsigned long src, unsigned long no)
{
IAP_Entry = (void(*)(unsigned int [],unsigned int []))IAP_ENTER_ADR;
paramin[0] = IAP_RAMTOFLASH; //设置命令字
paramin[1] = dst; //设置参数
paramin[2] = src;
paramin[3] = no;
paramin[4] = IAP_FCCLK;
(*IAP_Entry)(paramin,paramout); // 调用IAP 服务程序
return(paramout[0]); //返回状态码
}
/******************************************************************************************
** 函数名称: Compare
** 函数功能: 校验数据,命令代码56。
** 入口参数: dst 目标地址,即RAM/FLASH 起始地址,地址必须字对齐
** src 源地址,即RAM/RAM 地址,地址必须字对齐
** no 比较字节个数,必须能被4 整除
** 出口参数: IAP 操作状态码
** IAP 返回值(paramout 缓冲区)
******************************************************************************************/
unsigned long Compare(unsigned long dst, unsigned long src, unsigned long no)
{
IAP_Entry = (void(*)(unsigned int [],unsigned int []))IAP_ENTER_ADR;
paramin[0] = IAP_COMPARE; // 设置命令字
paramin[1] = dst; // 设置参数
paramin[2] = src;
paramin[3] = no;
(*IAP_Entry)(paramin,paramout); // 调用IAP 服务程序
return(paramout[0]); // 返回状态码
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -