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