各位TI的大神好,我用的是5438A。
1. 我在 5C00 – FFFF 的flash 空间内存在 两段程序(修改了.xcl 文件)。
2. 其中 程序一(应用程序) 占有 5C00 – DF7F ,占有虚拟中断为 DF80 – DFFF(重定义中断向量表)
3. 再次 程序二(引导程序) 占有 E000 – FF7F , 占有真实中断 FF80 – FFFF,在程序二中虚拟中断向量表(DF80 – DFFF)表给程序一。
4. 两端程序 均使用了 串口中断。程序执行顺序是 : 上电先执行程序二,一段时间后跳入程序一。
5. 程序二中 重定义的中断向量(下面为串口中断)
#pragma vector=114
__interrupt void intec_57(void) // USCI_A0_ISR
{ if(满足跳转条件){ asm ("br &0xDFF2;"); }
…….
…….// 程序二串口中断程序
}
6 程序一 串口中断
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{ …….
………// 程序一串口中断程序
}
现在只知道程序二的串口中断没有问题,但是在进入程序一后,发现串口中断未响应。
1 为什么进入到程序一后,中断没有实现跳转,想知道到底 是哪里的 逻辑 出了问题。
2. 对于串口升级 重定义 向量表 这一块儿 网上说的都很模糊,一笔带过,问题是应用程序根本没进去中断!
user3785308:
奇了怪了~~~ 各位 TI 大神, 能给个回应不??
Shi JianHua:
回复 user3785308:
坛子里头ti的FAE、这个真的没弄过
user3785308:
回复 Shi JianHua:
看来 还是 去找英文的吧。。。。。。。哎~~~ 努力奋斗~~缩小与国外差距~~
you kevin:
回复 user3785308:
这个问题真是棘手,请问仁兄你现在解决了吗?可以传授一下经验不?谢谢。
user3785308:
回复 you kevin:
串口升级算是解决了(boot 里不用中断,串口接收用判断寄存器的方法)~~不过 在 boot 程序里加入中断,如何处理 冲突这个问题 依然没解决~~感觉上依然没有理解到 深邃~~
你要是没解决就把 底下的文档好好看看吧~~
注意: 连续升级需要擦除以前的程序,定义好 .xcl 文件~~~ 要是用这个附件发表文章的话别忘 了人家哈~~
TUN LE:
回复 user3785308:
你好!。看你分享的那个文章我做了 但现在有个问题
第一次用引导程序烧写应用程序没问题,能运行
但到了第二次烧写应用程序不能运行了(烧写前已经擦除)
我看映射的中断向量地址还是保留着第一次烧写的那个程序,而且也不能擦除
现在不知道怎么解决 你做的如何了 能不能与我分享一下 谢谢了!
user3785308:
回复 TUN LE:
你好~
1. 需要把 boot 和 应用程序在flash上完全分开~~
2. 上面文档里的 flash 擦除为段擦出,一次 512 字节~~ 记着要把 应用程序擦干净
3. 再次更新,为了避免串口故障,最好重启一下(我是碰到了,我这边mcu的上位机 是一个芯片,它通过串口给我发完更新包后串口就挂掉了,导致不掉电再次更细程序就出错了)
其它的问题咱们再交流~~主要还是多试验吧~~
YU YU3:
回复 user3785308:
rayray在不?
你的问题我也遇到了。。。唉
bing ye:
回复 user3785308:
请问您还在这吗,我也遇到了这个问题,那篇文档我也看了,在中断向量表重置那里,将引导程序的中断跳到用户app的中断位置,你的升级放到主程序里面通过寄存器判断实现,可是串口发送数据的时候仍旧会进入串口中断啊,就是您中断向量重置的那个vector=18的那个,那不是变成了每次发送升级数据都会跳转的了吗
chao Fang1:
回复 user3785308:
哪有英文啊?有指导文件啊?
TI中文支持网



