当前位置:首页 > 单片机 > 单片机
[导读]LPC43xx IAP函数的调用一般MCU的IAP是,厂商固化一段代码在芯片的某个区域,然后告诉你这个代码的入口地址。我们一般可以这么做:typedef void (*IAP_ENTRY_T)(参数列表)#define IAP_ADDR (0xdeadbeef) // 假设的地

LPC43xx IAP函数的调用

一般MCU的IAP是,厂商固化一段代码在芯片的某个区域,然后告诉你这个代码的入口地址。
我们一般可以这么做:


typedef void (*IAP_ENTRY_T)(参数列表)

#define IAP_ADDR (0xdeadbeef) // 假设的地址

IAP_ENTRY_T const iap_entry = (IAP_ENTRY_T)IAP_ADDR;


这样我们便可以通过iap_entry来调用芯片里的固化代码了。

然而,LPC43xx系列内部的布局却不是这样。

LPC43xx ROM API结构

上面是LPC43xx内部固化代码的结构,可以看出:NXP把固化的函数的入口地址放到了一个数组里,然后告诉我们数组的起始地址,IAP函数排在第0位。
那么我们可以这样调用IAP函数:


/* 定义IAP入口函数的类型别名 */

typedef void (*IAP_ENTRY_T)(unsigned int[5], unsigned int[4]);


// ROM Driver Table的起始地址

#define LPC_ROM_API_BASE_LOC (0x10400100)


// 因为Cortex-M4是32位的,所以用uint32_t类型把IAP入口函数的地址提取出来

#define IAP_ENTRY_LOCATION (*((uint32_t *)LPC_ROM_API_BASE_LOC))


static inline void iap_entry(unsigned int cmd_param[5], unsigned int status_result[4])

{ // 强制转换为函数指针,然后调用

((IAP_ENTRY_T)IAP_ENTRY_LOCATION)(cmd_param, status_result);

}

内部FLASH操作是的注意事项

关全局中断

一定要先调用 Init 命令,再调用其他命令

擦除或写FLASH区块前,要先调用Prepare sectors for write operation命令

LPC43xx命令总览




本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭