相信用过cm3的朋友们有深刻的体会,可以设置中断向量表到RAM或者FLASH中去,搞搞IAP很方便啊。之前在msp430有个项目要485升级,研究了一下。没搞定,后面还是用传统的方法实现的,就是那些br啊,中断向量重置这种。
这里和大家分享一下如何把中断向量表放置在RAM中,我想应该是可以实现IAP的,可能是我的方式不正确,有兴趣的可以继续研究下。
直接贴出代码吧,主要是思路,看一下代码吧,注意那个寄存器 SYSCTL |= SYSRIVECT;
最后一点点相关的东西:
- /*
- ISR_CODE在XCL文件中的描述
- 片段一:
- // segment Usage
- // ------- ---------------------------------------------
- // INFO Information memory
- // INFOA Information memory, bank A
- // INFOB Information memory, bank B
- // INFOC Information memory, bank C
- // INFOD Information memory, bank D
- // CSTART Program startup code
- // CODE Program code
- // ISR_CODE Program code for interrupt service routines
- // DIFUNCT Dynamic initialization vector used by C++
- // CHECKSUM Checksum byte(s) generated by the -J option
- // INTVEC Interrupt vectors
- // RESET The reset vector
- // TLS16_ID Thread-local initializers for main thread
- // (require custom runtime library)
- //
- // Notes:
- //
- // * The segments CSTART, ISR_CODE, and DIFUNCT, as well as the segments in
- // the DATA16 and TLS16 segment groups must be placed in in the range
- // 0000-FFFD.
- //
- // * The INFOx and INFO segments overlap, this allows data either to be
- // placed in a specific bank or anywhere in the info memory.
- //
- // * The INTVEC and RESET segments overlap. This allows an application to
- // either use the reset vector provided by the runtime library, or
- // provide a reset function by defining an interrupt function associated
- // with the reset vector.
- 片段二:
- // ---------------------------
- // Code
- //
- -Z(CODE)CSTART,ISR_CODE=5C00-FF7F
- XBOOT说明:
- v2.10 --- 中断向量表放置到RAM中
- 1)为了简化BOOT的操作流程,将BOOT的中断向量表放置在RAM中,APP程序中断向量表采用通用的方式
- 2)具体划分如下:
- --------|---------------|------>0x5C00
- 5K | BOOT |
- --------|---------------|------>0x6FFF
- --------|---------------|------>0x7000
- | |
- | APP |
- | |
- --------|---------------|------>0xFF7F
- --------|---------------|------>0xFF80
- | APP_VECTOR |
- --------|---------------|------>0xFFFF
-
-
-
- --------|---------------|------>0x1C00
- | |
- | RAM |
- | |
- --------|---------------|------>0x5B7F
- --------|---------------|------>0x5B80
- | BT_VECTOR |
- --------|---------------|------>0x5BFF
- 3)注意XCL文件中修改RAM区域为0x1C00-0x5B7F,注意应用程序和BOOT程序的复位地址问题
- 4)目前只能实现BOOT程序将中断向量表放置在RAM中,还不能实现APP程序通过升级执行
- */
复制代码
本文来自论坛,点击查看完整帖子内容。