[ZLG-ARM] 建议:启动代码中应该加入这样几句

[复制链接]
 楼主| bqt 发表于 2007-1-23 20:54 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;在初始化向量中断控制器的时候,应该要注意把向量控制寄存器VICVectCntl0~15清零,即:<br />&nbsp;&nbsp;&nbsp;/*&nbsp;向量控制寄存器0~15清零&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;volatile&nbsp;unsigned&nbsp;long&nbsp;*&nbsp;VIC_CNT;<br />&nbsp;&nbsp;&nbsp;&nbsp;VIC_CNT&nbsp;=&nbsp;(volatile&nbsp;unsigned&nbsp;long&nbsp;*)&nbsp;0xFFFFF200;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt16;i++)&nbsp;*VIC_CNT++&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;如果不清零会怎么样?呵呵,假如原来FLASH中烧了一段程序,这段程序在初始化的时候将UART0的中断配置如下:<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr0&nbsp;=&nbsp;(uint32)IRQ_UART0;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl0&nbsp;=&nbsp;(0x20&nbsp;|&nbsp;0x06);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;6;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;现在要进行仿真了,先给开发板上电,于是FLASH中的程序得以运行过一次。假设要进行仿真的程序也用到了UART0的中断,可是配置如下:<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr1&nbsp;=&nbsp;(uint32)IRQ_UART0;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl1&nbsp;=&nbsp;(0x20&nbsp;|&nbsp;0x06);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;6;<br />&nbsp;&nbsp;&nbsp;&nbsp;那么当UART0的中断到来的时候,程序会怎么样?<br />&nbsp;&nbsp;&nbsp;&nbsp;程序会跑到原来FLASH程序初始化时设置的VICVectAddr0地址去运行,后果一般是数据终止或预取指终止或其它不可预料的情况。所以最好还是加上这几句吧,特别是在用BOOTLOADER加载程序的和仿真的时候,呵呵&nbsp;
db10 发表于 2007-1-23 21:56 | 显示全部楼层

bqt

&nbsp;感觉不会这样吧.我每次flash里有程序,仿真时从来没有碰到这个问题.<br />&nbsp;就是跑应该也不会吧,一连仿真,其他的程序会自动停的.
hotpower 发表于 2007-1-23 22:34 | 显示全部楼层

本应该如此~~~

  
zlgARM 发表于 2007-1-24 11:26 | 显示全部楼层

RE

其实是不同设置发生冲突的问题,所以需要统一设置。所以各配置寄存器在上电复位时是会初始化的。但上电复位后FLASH内部的程序可能会执行生效,那么就可能会影响到JTAG仿真执行的那部分程序。<br />这时,光清除VIC的寄存器是不够的了。<br />所以,最好在进行JTAG仿真前将FLASH内部的程序擦除。增大保险系数。<br /><br />谢谢您的建议!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

bqt

3

主题

82

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
bqt

3

主题

82

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部