大问题:串口0接受中断
#include "config.h"<br />#define ledcon 0xf0000000<br />#define uart_bps 115200<br /><br /><br />uint8 rcv_data; //UART0接受数据缓冲区<br />volatile uint8 rcv_new; //接受新数据标志<br />/******************************<br />delay()<br />*******************************/<br />void delayns(uint32 dly)<br />{<br />// uint32 i;<br /> for(;dly>0;dly--)<br /> ;<br />}<br /><br />/*<br />uart0_int()<br />*/<br />void uart0_init(void)<br />{<br /> uint16 fdiv;<br /> U0LCR=0x83; //8bit enable 除数<br /> fdiv=(Fpclk/16)/uart_bps;<br /> U0DLM=fdiv/256;<br /> U0DLL=fdiv%256;<br /> U0LCR=0x03; //8bit disable 除数<br /> }<br /> <br /><br /><br />#if 1<br />void __irq IRQ_UART0(void) //uart0接受中断<br />{<br />uint8 i;<br />if((U0IIR&0x0f)==0x04) //判断UART0接受数据可用标志<br /> {<br /> rcv_new=1;<br /> for(i=0;i<8;i++)<br /> rcv_data=U0RBR;<br /> }<br /> <br />VICVectAddr=0;<br />}<br />#endif<br /><br />#if 0<br />void uart0_rcvbyte(void)<br />{<br />uint8 i;<br />while((U0LSR&0x01)==0);<br /> rcv_new=1;<br /> for(i=0;i<8;i++)<br /> rcv_data=U0RBR;<br />}<br />#endif<br /><br />int main (void)<br />{// add user source code <br /> uint8 i;<br /> char disp_buf;<br /> volatile uint32 aAA;<br /> <br /> <br />PINSEL0=0x00000005; //设置IO连接到UART0 ,p014为io<br />PINSEL2=PINSEL2&0xfffffff7; //P1管脚选择设置 ,p16:25为IO<br />//选中电子开关<br />IO0DIR=0x4000; //p014 output<br />IO1DIR=0x00e00000; //p121:23 output<br />IO0CLR=0x4000; //p014 output L<br />IO1CLR=0x00e00000; //p121:23 output L选中电子开关X3Y3,及J4<br /><br /> uart0_init();<br />#if 1<br />U0FCR = 0x81; // 使能FIFO,并设置触发点为8字节<br />U0IER = 0x01; // 允许RBR中断,即接收中断<br /><br />VICIntSelect=0x00000000; //VIC_uart0中断初始化<br />VICVectCntl0=0x20|6;<br />VICVectAddr0 = (int)IRQ_UART0;<br />VICIntEnable=1<<6; <br />#endif <br />//uart0_rcvbyte(); <br /> IO2DIR=ledcon;<br /> T0PR=0;<br /> while(1)<br /> {<br /> if(rcv_new==1) //接受中断等待<br /> {<br /> for(i=0;i<8;i++)<br /> disp_buf=rcv_data;<br /> }<br /> }<br /> return 0;<br />}<br /><br />问题:<br /> 我用的模板是周立功的ARM EXecutable image for lpac2200,并把修改设置系统模式堆栈处的代码为“MSRCPSR_c, #0x5f”也改了,即使能IRQ 中断。<br /> 1)这个程序在接受数据时进不了中断,不知道问题出在哪里?<br /> (在LPC2214的RXT0脚上用示波器能检测到我发送的数据(数据>=8位),但是就是芯片里中断不处理。)<br /> 2)我用查询方式时不管发送什么数据,都能收到两次,但是这个数据与我发的数据不一样。<br /> (比如说发送12345678,第一次接受为1F#D22#3,第二次接受34567888,“#”表示乱码)<br /><br />
页:
[1]