在调试程序过程中遇到了以下问题:<br />程序中设置了3个中断,EINT0为快速中断,Timer0和UART1为IRQ中断,程序如下:当屏蔽掉EINT0快速中断[// FIQEnable();]时,UART1中断正常;屏蔽掉IRQ中断[// IRQEnable();]时快速中断EINT0也正常;但是中断都打开时,即按照如下的程序全速运行时,程序会停止在Startup.s中的<br />;取指令中止<br />PrefetchAbort<br /> B PrefetchAbort<br />单步运行程序到main函数的<br /> VICIntEnable=(1<<4)|<br /> (1<<7)|<br /> (1<<EINT0);<br />处就走不下去了,按停止运行,同样停在Startup.s中的<br />;取指令中止<br />PrefetchAbort<br /> B PrefetchAbort<br /><br />不知道是何原因,一般出现取指令中止的原因有那些呢,我个人怀疑是中断没用好,挺大家指教,谢谢!<br /><br />int main(void)<br />{<br /> /*定时器寄存器设置*/ <br /> T0PR=99; //设置分频系数<br /> T0CCR=(0<<0)|<br /> (0<<1)|<br /> (0<<2)|<br /> (1<<3)| //设置CAP0.1为上升沿捕获<br /> (1<<5)| //允许产生中断<br /> (1<<6)| //设置CAP0.2为上升沿捕获<br /> (1<<8); //允许产生中断<br /> T0CTCR=(0x03<<0)| //计数器在CAP的上升和下降沿递增<br /> (0x00<<2); //选择CAP0.0<br /> T0TC=0;<br /> T0TCR=0x01; //启动定时器<br /> <br /> /*串口寄存器设置*/<br /> UART1_Init(115200, set); // 串口初始化<br /> U1FCR = 0x01; // 使能FIFO,并设置触发点为8字节<br /> U1IER = 0x01; <br /><br />PINSEL0=(PINSEL0&0xFFFFFFC3)|(0x02<<4)|(0x03<<2);//P0.2接捕获0.0,<br /> //P0.1为EINT0 <br />PINSEL1=(PINSEL1&0xFC3FFCFF)|(0x0A<<22); <br /> <br /> EXTMODE=0x01; //设置EINT0为边沿激活<br /> EXTPOLAR=0x01; //上升沿有效<br /> <br /> FIQEnable();<br /> <br /> IRQEnable();<br /> <br /> /*设置Timer0EINT1中断*/<br /> VICIntSelect=0x00004000; //设置除EINT0外的通道为IRQ中断<br /> <br /> VICVectCntl0=0x20|0x04; //Timer0分配到IRQslot0<br /> VICVectAddr0=(uint32)IRQ_Timer0; //设置Timer0向量地址<br /> <br /> VICVectCntl1 = 0x20 | 0x07;// UART1分配到IRQ slot1<br /> VICVectAddr1 = (uint32)IRQ_UART1;// 设置UART1向量地址<br /><br /> T0IR=0x01; //使能Timer0中断<br /> EXTINT=0x01; //清除EINT0中断标志<br /> VICIntEnable=(1<<4)|<br /> (1<<7)|<br /> (1<<EINT0);<br /> while(1)<br /> { <br /> if (rcv_new == 1)<br /> { <br /> rcv_new =0;<br /> UART1_SendBuf();<br /> } <br /> }<br /> return(0):<br />} |
|