LPC43xx系列使用IAP的注意事项
2016-04-28 23:29
405 查看
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结构
上面是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命令总览
相关文章推荐
- 文章标题
- 【Android】Android的Activity生命周期
- centos 6 下编译打包 ceph 10.2.0
- Solaris 10环境下安装oracle Client
- vtk实战(二十三)——写入vtktable数据
- vtk实战(二十二)——写入PLY数据
- if语句与switch的使用
- 面向对象编程中的设计模式
- 团队绩效评比
- 实验三 交换机的基本配置与管理
- 下载字体库的地址
- STL中vector查找算法find()和find_if()深入比较
- Ubuntu下使用Eclipse和PyDev搭建完美Python开发环境
- 2016/4/28所学大致总结
- linux3.4.2移植
- 系统移植-文件系统移植
- 驱动开发-模块
- Docker Hub 的伟大在那里?
- java web Filter过滤器解决乱码
- Android进阶UI之百分比布局库(percent-support-lib) 解析与扩展