[ZLG-ARM] 请教UART0的问题

[复制链接]
2395|4
 楼主| zzyszl 发表于 2007-10-24 23:50 | 显示全部楼层 |阅读模式
&nbsp;当UART0发送数据时,有下面语句:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;R0,=U0THR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;R1,=0X12&nbsp;&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;STR&nbsp;&nbsp;R1,[R0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&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;<br /><br />当数据发送完以后没有经过其他任何操作,U0THR&nbsp;和&nbsp;U0TSR&nbsp;中的值分别是什么?
zlgarm 发表于 2007-10-25 10:49 | 显示全部楼层

U0THR为空,U0TSR为0x12

如题~~~
ppz2005 发表于 2007-10-25 10:58 | 显示全部楼层

与之前的发送有关

如果这些指令执行之前刚刚发送过,就是刚才发送的数据还没发完,那么U0TSR中就是刚刚先发的那个数,U0THR中就是新发的数据0x12.经过一段时间后,U0THR变为空。如果之前未发任何数据,则自然,U0THR就是空的,这个写入的数据到U0TSR中去了。
 楼主| zzyszl 发表于 2007-10-25 20:16 | 显示全部楼层

请教学习方法!

明白!谢谢!<br /><br />我是初学&nbsp;ARM7&nbsp;,也在用ARM,但是总感觉浮在上面!<br /><br />现在我自己现在想法是搞精通一款ARM芯片,包括最底层的硬件怎么动作,这样再看其他芯片只要稍微看看不同点就可以了,以后在学操作系统等等其他外围东西,不知道这种思路是否可行!我觉的“zlgarm”、“ppz2005”是俩位高人,&nbsp;能否给点意见?包括按照什么样的步骤学,什么资料比较适合?等等,我想有高人指点可能少走弯路,能达到事半功倍的效果!<br /><br />我的邮件地址是:zhengliangshen@163.com<br /><br />如有什么好的文档请帮忙发给我!谢了!以后还有什么不懂之处还要请教各位!
 楼主| zzyszl 发表于 2007-10-25 21:48 | 显示全部楼层

还有一问题不明白!

周立功著《ARM&nbsp;微控制器基础与实战》第二版中有:<br /><br />P&nbsp;135:U0LSR的TEMT位解释:<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;&nbsp;&nbsp;0:U0THR和/或U0TSR包含<font color=#FF0040>有效</font>数据.<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;&nbsp;&nbsp;1:U0THR和U0TSR空。<br /><br />当U0THR和U0TSR&nbsp;都为空时,TEMT置位,当U0TSR或U0THR包含<font color=#FF0040>有效</font>数据时,TEMT清零。<br /><br />P138:有这么一段程序:<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;SENDBYTE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R0,=U0THR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,[R0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R0,=U0LSR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SENDBYTE_L1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;R1,[R0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ANDS&nbsp;&nbsp;&nbsp;&nbsp;R1,R1,#0X40&nbsp;&nbsp;&nbsp;&nbsp;<font color=#FF00FF>&nbsp;;//</font><font color=#FF00FF>U0LSR.6&lt-----&gtTEMT</font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#FF0040>BEQ&nbsp;&nbsp;&nbsp;&nbsp;SENDBYTE_L1&nbsp;&nbsp;&nbsp;&nbsp;;//&nbsp;TEMT位为1时跳到SENDBYTE_L1</font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;PC,LR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;……….<br />有上面程序和两位解释我有些不明白的地方:<br />TEMT位为1时跳到SENDBYTE_L1,但是按照上面两位的解释,其实U0TSR和U0THR中永远是有有效数据的。这样只要有过一次发送,TEMT就永远为0,那么上面的程序就不对了,但是程序运行确实正确。<br />后来我又想是不是问题出在“<font color=#FF0040>有效</font>”上,如果数据发送完了就叫“无效”的话,那么TEMT在发送时为0,而发送完了为1,这又与程序意思相反。我理解一下发送过程,是不是下面意思:<br /><br /><b>芯片复位――&gt第<font color=#FF0040>1</font>次发送<font color=#FF0040>完</font>――&gt。。。。。。――&gt第<font color=#FF0040>N</font>次<font color=#FF0040>开始</font>发送――&gt第<font color=#FF0040>N</font>次发送<font color=#FF0040>完<br /></font></b>U0THR=0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0THR=0&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0THR=N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0THR=0<br />U0TSR=0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0TSR=1&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0TSR=N-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;U0TSR=N<br />TEMT=1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEMT=0&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEMT=0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEMT=0<br /><br />不知到我的分析哪出了问题?请指点指点!<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

37

帖子

1

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