#include "config.h"<br />#define ledcon 0xf0000000<br />#define uart_bps 115200<br /><br /><br /> uint8 rcv_data[8]; //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[30];<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,“#”表示乱码) |
|