我是新手,想问一个问题,我编写了一个简单的串口程序,是使用中断方式,使用的是ARM LPC2210 程序如下: int main(void) { uint32 ADValue; run=0; InitPWM(); Init_UART0(); Init_int(); Init_ADC(); while(1) { if(recv_flag==1) {
recv_flag=0; ChangePWM(speed); Send_UART0(speed); if(speed>0&&speed<5) {
run=1; // DelayNS(10); } else if(speed==0) { run=0; } } if(run==1) { ADValue=ADC_Value();
if(ADValue<=15) { ChangePWM(0); run=0;
} } DelayNS(10); }
return(0); }
void Init_UART0(void) { uint16 Fdiv; PINSEL0 |= 0x00000005; // 设置I/O连接到UART0 U0LCR=0x83; Fdiv=(Fpclk/16)/UART_BPS; U0DLM=Fdiv/256; U0DLL=Fdiv%256; U0LCR=0x03; U0IER=0x01; }
void Send_UART0(uint8 send_data) { U0THR=send_data; while((U0LSR&0x40)==0); }
void Init_int() { IRQEnable(); VICIntSelect=0x00000000; VICVectCntl0=0x20|6; VICVectAddr0=(uint32)IRQ_UART0; VICIntEnable=1<<6; recv_flag=0; }
void __irq IRQ_UART0(void) { if((U0IIR&0x0f)==0x04) //判断是否有中断表示,并且清楚中断表示 { recv_flag=1; speed=U0RBR; //读取数据 }
VICVectAddr=0; }
如果在中断服务程序中使用if((U0IIR&0x0f)==0x04),好像程序就不会从中断服务程序中跳出,有时候也会跑飞,如果使用if((U0IIR&0x04)==0x04)好像就没有什么问题,想请问各位老师,这是什么问题?谢谢! |