LPC43xx系列使用IAP的注意事项

LPC43xx系列使用IAP的注意事项

Tags: LPC43xx IAP 单片机


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结构
587326-20160428231943314-118208178.jpg

上面是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操作是的注意事项

  1. 关全局中断
  2. 一定要先调用 Init 命令,再调用其他命令
  3. 擦除或写FLASH区块前,要先调用Prepare sectors for write operation命令

LPC43xx命令总览
587326-20160428231854720-254763275.jpg

转载于:https://www.cnblogs.com/electron/p/5444605.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值