[ZLG-ARM] 为什么我的程序只能发16字节呢?

[复制链接]
1645|4
 楼主| chcoin 发表于 2008-11-6 10:58 | 显示全部楼层 |阅读模式
se, COM, ui, pi, ni
void&nbsp;Comm_SendByte(uint8&nbsp;port,&nbsp;uint8&nbsp;dat)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(port==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(U0LSR&nbsp;&&nbsp;0x40==0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0THR=dat;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br />void&nbsp;Comm_SendBuf(uint8&nbsp;port,uint8&nbsp;*psbuf,uint8&nbsp;lenth)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(port==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltlenth;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comm_SendByte(0,&nbsp;*psbuf++);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;COMMMODE&nbsp;set;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;rbuf[25]={00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;set.baud=com0baud;<br />&nbsp;&nbsp;&nbsp;&nbsp;set.len&nbsp;&nbsp;=&nbsp;com0len;<br />&nbsp;&nbsp;&nbsp;&nbsp;set.stopb&nbsp;&nbsp;=&nbsp;com0stopb;<br />&nbsp;&nbsp;&nbsp;&nbsp;set.pari&nbsp;=&nbsp;com0pari;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;InitCycQueue(&sq);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0=0x00005505;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1=0x00000000;<br /><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Comm_Init(0,set);<br />&nbsp;&nbsp;&nbsp;&nbsp;VIC_Init();<br />&nbsp;&nbsp;&nbsp;&nbsp;SPIini();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;psbuf=sbuf;<br />&nbsp;&nbsp;&nbsp;&nbsp;rcv=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR=LEDS|SPICS;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET=LEDS;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rcv==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comm_SendBuf(0,rbuf,24);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rcv=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}
 楼主| chcoin 发表于 2008-11-6 11:01 | 显示全部楼层

请各位老师指点

为什么发送字节间加延时就可以呢?
ZLG_Dengz 发表于 2008-11-7 00:47 | 显示全部楼层

RE

&nbsp;&nbsp;&nbsp;&nbsp;发送了第16个字节后,程序是死了还是怎么了?看看U0LSR、U0IIR的值是多少?最好通过示波器看看TXD引脚的状态。<br />&nbsp;&nbsp;&nbsp;&nbsp;请贴出你的UART初始化代码和UART中断函数的代码,以供分析。
 楼主| chcoin 发表于 2008-11-7 16:55 | 显示全部楼层

上面那个程序只能接收到16字节

int8&nbsp;Comm_Init(uint8&nbsp;commport,COMMMODE&nbsp;comset&nbsp;)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(commport&gt2)&nbsp;return&nbsp;(1);//返回1,无效端口号<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(comset.baud&gt115200)&nbsp;return&nbsp;(2);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(comset.len&lt5&nbsp;||&nbsp;comset.len&gt8)&nbsp;return&nbsp;(3);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(comset.stopb==0&nbsp;||&nbsp;comset.stopb&gt2)&nbsp;return&nbsp;(4);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(comset.pari&gteven&nbsp;)&nbsp;return&nbsp;(5);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(commport==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0LCR=0x80;//允许访问除数寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=(Fpclk&gt&gt4)/comset.baud;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0DLM=temp&gt&gt8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0DLL=temp&0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0LCR=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=comset.len-5;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(comset.stopb==2)&nbsp;&nbsp;&nbsp;temp|=0x04;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(comset.pari!=none)&nbsp;temp|=0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(comset.pari==even)&nbsp;temp|=0x10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0LCR=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0FCR=0x81;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0IER=0x05;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(0);<br />}<br />我是用串口调试助手调试的,单步执行仿真是可以都传过来,而且发送字节间加延时也可以,上面那个程序只能接收到16字节
 楼主| chcoin 发表于 2008-11-7 16:57 | 显示全部楼层

程序没有死机,可以正常运行

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

1

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