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