[ZLG-ARM] 为什么串口无法接收数据

[复制链接]
2897|4
 楼主| gwsino 发表于 2008-3-25 16:24 | 显示全部楼层 |阅读模式
我是最近才开始学习ARM的,许多知识还不是很明白,今天简单测试一下ARM的UART端口的功能,结果是发送能正常发送,接收却不能正常接收,接收数据时根本就进不了中断处理程序,不知道为什么,这是我写的测试代码,有点乱,但还是希望各位兄弟能给个解决的方法,谢谢<br />#include&nbsp;&quot;config.h&quot;<br />#include&nbsp;&quot;stdlib.h&quot;<br />#include&nbsp;&quot;string.h&quot;<br /><br />unsigned&nbsp;char&nbsp;Size(void)<br />{<br />//&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sizeof(HEAPNODE);<br />return&nbsp;0;<br />}<br />unsigned&nbsp;char&nbsp;Free[1000];<br />extern&nbsp;void&nbsp;UartHandler(void);<br />//复位FIFO操作使用的宏<br />#define&nbsp;OSRxFIFOReset(X)&nbsp;&nbsp;if(X)U1FCR&nbsp;|=&nbsp;(1&lt&lt1);<br />&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;&nbsp;else<br />&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;&nbsp;U0FCR&nbsp;|=(1&lt&lt1);&nbsp;<br />#define&nbsp;OSTxFIFOReset(X)&nbsp;&nbsp;if(X)U1FCR&nbsp;|=&nbsp;(1&lt&lt2);<br />&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;&nbsp;else<br />&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;&nbsp;U0FCR&nbsp;|=(1&lt&lt2);&nbsp;<br />#define&nbsp;OSUartDisable(X)<br />#define&nbsp;OSUartEnable(X)&nbsp;<br />#define&nbsp;OSUartIOConfig(X)&nbsp;if(X)&nbsp;PINSEL0&nbsp;=&nbsp;(PINSEL0&0xFFF0FFFF)&0x00050000;<br />&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;&nbsp;else<br />&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;&nbsp;PINSEL0&nbsp;=&nbsp;(PINSEL0&0xFFFFFFF0)&0x00000005;<br /><br />char&nbsp;*Name=&quot;gwsino@landwind.com.cn
thank&nbsp;you&nbsp;for&nbsp;your&nbsp;going&nbsp;home!&quot;;<br />void&nbsp;UartSendNBytes(unsigned&nbsp;char&nbsp;*nBytes,unsigned&nbsp;char&nbsp;size);<br />unsigned&nbsp;char&nbsp;idx&nbsp;=&nbsp;0;<br />void&nbsp;RxComplete(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;Rec[8];<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;*read&nbsp;=&nbsp;Rec;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;IIR;<br />&nbsp;&nbsp;&nbsp;&nbsp;switch(U0IIR&nbsp;&&nbsp;0x0F)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x02:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(idx&nbsp;&gt&nbsp;strlen(Name))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0THR&nbsp;=&nbsp;Name[idx++];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//idx++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x04:<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x0c:<br />&nbsp;&nbsp;&nbsp;&nbsp;Rec[1]&nbsp;=&nbsp;U0RBR;<br />&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;<br />}<br />void&nbsp;UartSendByte(unsigned&nbsp;char&nbsp;nbyte)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;U0THR&nbsp;=&nbsp;nbyte;<br />&nbsp;&nbsp;&nbsp;&nbsp;while((U0LSR&nbsp;&&nbsp;0x40)==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />}<br />void&nbsp;UartSendNBytes(unsigned&nbsp;char&nbsp;*nBytes,unsigned&nbsp;char&nbsp;size)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(size--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0THR&nbsp;=&nbsp;*nBytes++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((U0LSR&nbsp;&&nbsp;0x40)&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />int&nbsp;main&nbsp;(void)<br />{//&nbsp;add&nbsp;user&nbsp;source&nbsp;code&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;volatile&nbsp;unsigned&nbsp;int&nbsp;size;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;value;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;short&nbsp;int&nbsp;fdiv;<br />&nbsp;&nbsp;&nbsp;&nbsp;//{21,23,43,53,54,65,76,67,78,34,34,34,34,54,45,32,31,0,0,0,0,5,23,34,0,0,0,0,0,0,0,255};<br />&nbsp;&nbsp;&nbsp;//&nbsp;strcpy((char*)Name,&quot;gwsino@landwind.com.cn
thank&nbsp;you&nbsp;for&nbsp;your&nbsp;going&nbsp;home!&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;fdiv&nbsp;=&nbsp;(Fpclk&nbsp;/&nbsp;16)/9600;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;0X83;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLM&nbsp;=(unsigned&nbsp;char)(&nbsp;fdiv&nbsp;/&nbsp;256);<br />&nbsp;&nbsp;&nbsp;&nbsp;U0DLL&nbsp;=&nbsp;(unsigned&nbsp;char)(fdiv&nbsp;%&nbsp;256);<br />&nbsp;&nbsp;&nbsp;&nbsp;U0LCR&nbsp;=&nbsp;0X03;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;=&nbsp;(PINSEL0&0xFFFFFFF0)|0x00000005;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0FCR&nbsp;=&nbsp;0X07;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0FCR&nbsp;|=&nbsp;0xC0;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect&nbsp;=&nbsp;0x0000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;|=&nbsp;(1&lt&lt6);<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectCntl0&nbsp;=&nbsp;0x26;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr0&nbsp;=&nbsp;(int)&nbsp;UartHandler;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0IER&nbsp;=&nbsp;0X07;<br />&nbsp;&nbsp;&nbsp;&nbsp;U0THR&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//UartSendNBytes((unsigned&nbsp;char*)Name,(unsigned&nbsp;char)strlen((char*)Name));<br />&nbsp;&nbsp;&nbsp;//&nbsp;OSRxFIFOReset(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;=&nbsp;Size();<br />&nbsp;&nbsp;&nbsp;&nbsp;if(size&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;value+size;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;value;<br />}
zlgarm 发表于 2008-3-25 17:46 | 显示全部楼层

to gwsino

gwsino,您好!<br />&nbsp;&nbsp;&nbsp;&nbsp;我们仅对光盘里的例程提供技术支持。而用户自己写的程序并非我们的产品,限于精力,我们不会对用户自己写的程序进行技术支持。请您谅解!<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;请您将问题转化为和具体代码无关的形式,或者请您大幅度精简您的代码。<br /><br />&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;&nbsp;on&nbsp;duty:zlgarm_wuzhijian
armecos 发表于 2008-3-25 19:05 | 显示全部楼层

这样写太不规范了,

建议看下ecos的串口和中断程序写法,绝对一流专家的手笔,先模仿再自己写吧。<br /><br /><b>ecos中断、ecos串口驱动文档</b>
 楼主| gwsino 发表于 2008-3-26 10:13 | 显示全部楼层

谢谢&nbsp;<br />&nbsp;&nbsp;&nbsp;我也知道这样写不规范,这只是我写的一个测试程序,其实的真正的意图不在这里。不过还是谢谢各位的关心谢谢<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

73

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部