打印
[ZLG-ARM]

建议:启动代码中应该加入这样几句

[复制链接]
1701|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bqt|  楼主 | 2007-1-23 20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   在初始化向量中断控制器的时候,应该要注意把向量控制寄存器VICVectCntl0~15清零,即:
   /* 向量控制寄存器0~15清零 */
    volatile unsigned long * VIC_CNT;
    VIC_CNT = (volatile unsigned long *) 0xFFFFF200;
    for(i=0;i<16;i++) *VIC_CNT++ = 0;

    如果不清零会怎么样?呵呵,假如原来FLASH中烧了一段程序,这段程序在初始化的时候将UART0的中断配置如下:
    VICVectAddr0 = (uint32)IRQ_UART0;
    VICVectCntl0 = (0x20 | 0x06);
    VICIntEnable = 1 << 6;

    现在要进行仿真了,先给开发板上电,于是FLASH中的程序得以运行过一次。假设要进行仿真的程序也用到了UART0的中断,可是配置如下:
    VICVectAddr1 = (uint32)IRQ_UART0;
    VICVectCntl1 = (0x20 | 0x06);
    VICIntEnable = 1 << 6;
    那么当UART0的中断到来的时候,程序会怎么样?
    程序会跑到原来FLASH程序初始化时设置的VICVectAddr0地址去运行,后果一般是数据终止或预取指终止或其它不可预料的情况。所以最好还是加上这几句吧,特别是在用BOOTLOADER加载程序的和仿真的时候,呵呵 

相关帖子

沙发
db10| | 2007-1-23 21:56 | 只看该作者

bqt

 感觉不会这样吧.我每次flash里有程序,仿真时从来没有碰到这个问题.
 就是跑应该也不会吧,一连仿真,其他的程序会自动停的.

使用特权

评论回复
板凳
hotpower| | 2007-1-23 22:34 | 只看该作者

本应该如此~~~

使用特权

评论回复
地板
zlgARM| | 2007-1-24 11:26 | 只看该作者

RE

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

谢谢您的建议!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

bqt

3

主题

82

帖子

1

粉丝