skaler 发表于 2007-11-7 13:55

大问题:串口0接受中断

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