[ZLG-ARM] 请教:在使能了发送FIFO时发送中断是如何触发如何工作的?

[复制链接]
 楼主| 海洋饼干 发表于 2007-3-21 17:49 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;我在看ARM7&nbsp;LPC2131&nbsp;UART部分时,对在使能了发送FIFO时发送中断是如何触发如何工作的很不理解,我翻看了一些旧的帖子,有个是这样说的:当FIFO的容量少于或等于触发深度时触发THER中断,向发送FIFO中写入数据,直到发送FIFO容量大于触发深度时,复位中断。<br />&nbsp;&nbsp;&nbsp;&nbsp;我看了之后,还是一头雾水。&nbsp;&nbsp;比如,我使能了FIFO,触发深度为8,使能发送中断,用中断方式发送字符串,现在我想发送10个字符,那么这个过程是什么样的呢,中断是在什么时候触发的呢?<br />&nbsp;&nbsp;&nbsp;&nbsp;请大家帮我解释,谢谢了。&nbsp;
zlgARM 发表于 2007-3-22 08:38 | 显示全部楼层

RE

&nbsp;海洋饼干:<br />&nbsp;&nbsp;&nbsp;&nbsp;1、发送FIFO一直都默认使能的;<br />&nbsp;&nbsp;&nbsp;&nbsp;2、发送FIFO没有触发深度设置的说法;<br />&nbsp;&nbsp;&nbsp;&nbsp;发送FIFO和接收FIFO是两回事。<br />&nbsp;&nbsp;&nbsp;&nbsp;最后,关于发送中断的触发,您只要知道,&quot;您的UART发送完一个字符&quot;就会触发中断。设置好IER寄存器,配置好VIC,打开IRQ中断,写好ISR,您做个试验试一试。
ourdoctor 发表于 2007-3-22 11:31 | 显示全部楼层

re

海洋饼干:<br />&nbsp;&nbsp;&nbsp;接收可以实现&nbsp;设置U0FCR的<br />7:6&nbsp;Rx&nbsp;Trigger&nbsp;Level&nbsp;Select<br />00:&nbsp;trigger&nbsp;level&nbsp;0&nbsp;(1&nbsp;character&nbsp;or&nbsp;0x01h)<br />01:&nbsp;trigger&nbsp;level&nbsp;1&nbsp;(4&nbsp;characters&nbsp;or&nbsp;0x04h)<br />10:&nbsp;trigger&nbsp;level&nbsp;2&nbsp;(8&nbsp;characters&nbsp;or&nbsp;0x08h)<br />11:&nbsp;trigger&nbsp;level&nbsp;3&nbsp;(14&nbsp;characters&nbsp;or&nbsp;0x0eh)<br />These&nbsp;two&nbsp;bits&nbsp;determine&nbsp;how&nbsp;many&nbsp;receiver&nbsp;UART0&nbsp;FIFO&nbsp;characters&nbsp;must&nbsp;be&nbsp;writtenbefore&nbsp;an&nbsp;interrupt&nbsp;is&nbsp;activated.<br /><br />发送需要自己搞定了
 楼主| 海洋饼干 发表于 2007-3-23 10:28 | 显示全部楼层

再次请教各位强人!

<br />&nbsp;&nbsp;&nbsp;&nbsp;非常感谢2位大哥指点,我好象对发送FIFO有点儿明白了.我正在做UART的实验,我现在就是想先用上接收中断,CTI中断,使能FIFO,禁止发送中断.就是想我给ARM发什么,ARM就能在上位机再给返回什么.<br />&nbsp;&nbsp;&nbsp;&nbsp;现在的实验现象是这样的:(设触发深度是8),发低于8个字符没问题,发挺多的也很好,就两种情况会出错,当发8的整数倍+1个字符和发8的整数倍+2个字符时就不行了.第一种情况会少2个字符,第二种情况会少1个字符.比如我想发123456789,会显示1234569;要发1234567890,会显示123456790.&nbsp;&nbsp;&nbsp;真的是不明白,我感觉程序应该没错啊,别的时候一切都那么完美,咋就一到那种情况就不行呢?我本来想着是如果这样能调好,再加上发送中断,那UART的硬件及中断机制就都用上了吧.但现在还没加发送中断都拿不下,还请大家帮我看看哪里错了,谢谢大伙.程序如下:<br />/****************************************Copyright&nbsp;(c)**************************************************<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;&nbsp;&nbsp;&nbsp;Guangzou&nbsp;ZLG-MCU&nbsp;Development&nbsp;Co.,LTD.<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graduate&nbsp;school<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.zlgmcu.com" target=_blank>http://www.zlgmcu.com</a><br />**<br />**--------------File&nbsp;Info-------------------------------------------------------------------------------<br />**&nbsp;File&nbsp;name:&nbsp;&nbsp;&nbsp;main.c<br />**&nbsp;Last&nbsp;modified&nbsp;Date:&nbsp;&nbsp;2004-09-16<br />**&nbsp;Last&nbsp;Version:&nbsp;&nbsp;1.0<br />**&nbsp;Descriptions:&nbsp;&nbsp;The&nbsp;main()&nbsp;function&nbsp;example&nbsp;template<br />**<br />**------------------------------------------------------------------------------------------------------<br />**&nbsp;Created&nbsp;by:&nbsp;&nbsp;&nbsp;Chenmingji<br />**&nbsp;Created&nbsp;date:&nbsp;&nbsp;2004-09-16<br />**&nbsp;Version:&nbsp;&nbsp;&nbsp;&nbsp;1.0<br />**&nbsp;Descriptions:&nbsp;&nbsp;The&nbsp;original&nbsp;version<br />**<br />**------------------------------------------------------------------------------------------------------<br />**&nbsp;Modified&nbsp;by:&nbsp;&nbsp;&nbsp;Chenxibing<br />**&nbsp;Modified&nbsp;date:&nbsp;&nbsp;2005-01-17<br />**&nbsp;Version:<br />**&nbsp;Descriptions:&nbsp;&nbsp;UART0通讯实验,中断方式,使用FIFO。<br />**<br />********************************************************************************************************/<br />#include&nbsp;&quot;config.h&quot;<br />/*&nbsp;定义串口模式设置数据结构&nbsp;*/<br />typedef&nbsp;struct&nbsp;UartMode<br />{<br />&nbsp;uint8&nbsp;datab;&nbsp;&nbsp;//&nbsp;字长度,5/6/7/8可选<br />&nbsp;uint8&nbsp;stopb;&nbsp;&nbsp;//&nbsp;停止位,1/2可选<br />&nbsp;uint8&nbsp;parity;&nbsp;&nbsp;//&nbsp;奇偶校验位,0-无校验,1-奇校验,2-偶校验<br />}UARTMODE;<br />&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;&nbsp;&nbsp;&nbsp;<br />char&nbsp;&nbsp;*rcv_buf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;UART0数据接收缓冲区<br />volatile&nbsp;uint8&nbsp;rcv_new;&nbsp;&nbsp;&nbsp;//&nbsp;接收新数据标志<br />uint8&nbsp;sum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//计算字符串中字符的个数<br />/**********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:IRQ_UART0()<br />**&nbsp;函数功能&nbsp;:串口0接收中断服务程序<br />**&nbsp;入口参数&nbsp;:无<br />**&nbsp;出口参数&nbsp;:无<br />*********************************************************************************************************<br />*/<br />void&nbsp;__irq&nbsp;IRQ_UART0&nbsp;(void)<br />{<br />&nbsp;uint8&nbsp;IIR;<br />uint8&nbsp;i=0;<br />&nbsp;&nbsp;while(((IIR&nbsp;=&nbsp;U0IIR)&nbsp;&&nbsp;0x01)&nbsp;==&nbsp;0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有中断未处理完&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rcv_new&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;//&nbsp;设置接收到新的数据标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(IIR&nbsp;&&nbsp;0x0e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x04:&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;(i==0)||((i%8)!=0)&nbsp;;&nbsp;i++)<br />&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;rcv_buf&nbsp;=&nbsp;U0RBR;&nbsp;&nbsp;//&nbsp;读取FIFO的数据,并清除中断&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x0c:&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;(U0LSR&01)!=0;i++)<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rcv_buf&nbsp;=&nbsp;U0RBR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;}&nbsp;<br />&nbsp;sum=i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;VICVectAddr&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;//&nbsp;中断处理结束<br />}<br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:UART0_SendByte()<br />**&nbsp;函数功能&nbsp;:向串口0发送1字节数据<br />**&nbsp;入口参数&nbsp;:dat&nbsp;要发送的数据<br />**&nbsp;出口参数&nbsp;:无<br />*********************************************************************************************************<br />*/<br />void&nbsp;UART0_SendByte&nbsp;(uint8&nbsp;dat)<br />{<br />&nbsp;U0THR&nbsp;=&nbsp;dat;&nbsp;//&nbsp;要发送的数据<br />&nbsp;while&nbsp;((U0LSR&nbsp;&&nbsp;0x20)&nbsp;==&nbsp;0);&nbsp;//&nbsp;等待数据发送完毕<br />}<br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:UART0_SendStr()<br />**&nbsp;函数功能&nbsp;:向串口0发送1字节数据<br />**&nbsp;入口参数&nbsp;:dat&nbsp;要发送的数据<br />**&nbsp;出口参数&nbsp;:无<br />*********************************************************************************************************<br />*/<br />void&nbsp;UART0_SendStr(char&nbsp;const&nbsp;*str)<br />{uint8&nbsp;i;<br />&nbsp;for(i=0;i&ltsum;i++)<br />&nbsp;UART0_SendByte(*str++);<br />}<br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:UART0_SendBuf()<br />**&nbsp;函数功能&nbsp;:向串口发送11个字符串数据<br />**&nbsp;入口参数&nbsp;:dat&nbsp;要发送的数据<br />**&nbsp;出口参数&nbsp;:无<br />*********************************************************************************************************<br />*/<br />void&nbsp;UART0_SendBuf&nbsp;(void)<br />{<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;UART0_SendStr(rcv_buf);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;<br />}<br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:UART0_Init()<br />**&nbsp;函数功能&nbsp;:串口初始化,设置工作模式和波特率。<br />**&nbsp;入口参数&nbsp;:baud&nbsp;波特率<br />**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;模式设置(UARTMODE数据结构)<br />**&nbsp;出口参数&nbsp;:1-初始化成功,&nbsp;&nbsp;0-初始化失败<br />*********************************************************************************************************<br />*/<br />int8&nbsp;UART0_Init&nbsp;(uint32&nbsp;baud,&nbsp;UARTMODE&nbsp;set)<br />{<br />&nbsp;uint32&nbsp;bak;<br />&nbsp;<br />&nbsp;/*&nbsp;参数过滤&nbsp;*/<br />&nbsp;if&nbsp;((baud&nbsp;==0&nbsp;)&nbsp;||&nbsp;(baud&nbsp;&gt&nbsp;115200))&nbsp;return&nbsp;(0);<br />&nbsp;if&nbsp;((set.datab&nbsp;&lt5)&nbsp;||&nbsp;(set.datab&nbsp;&gt&nbsp;8))&nbsp;return&nbsp;(0);<br />&nbsp;if&nbsp;((set.stopb&nbsp;==&nbsp;0)&nbsp;||&nbsp;(set.stopb&nbsp;&gt&nbsp;2))&nbsp;&nbsp;return&nbsp;(0);<br />&nbsp;if&nbsp;(set.parity&nbsp;&gt&nbsp;4)&nbsp;return&nbsp;(0);<br />&nbsp;<br />&nbsp;/*&nbsp;设置串口波特率&nbsp;*/<br />&nbsp;U0LCR&nbsp;=&nbsp;0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;DLAB&nbsp;=&nbsp;1&nbsp;<br />&nbsp;bak&nbsp;&nbsp;&nbsp;=&nbsp;(Fpclk&nbsp;&gt&gt&nbsp;4)&nbsp;/&nbsp;baud;<br />&nbsp;U0DLM&nbsp;=&nbsp;bak&nbsp;&gt&gt&nbsp;8;<br />&nbsp;U0DLL&nbsp;=&nbsp;bak&nbsp;&&nbsp;0xFF;<br />&nbsp;<br />&nbsp;/*&nbsp;设置串口模式&nbsp;*/<br />&nbsp;bak&nbsp;&nbsp;&nbsp;=&nbsp;set.datab&nbsp;-&nbsp;5;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置字长<br />&nbsp;if&nbsp;(set.stopb&nbsp;==&nbsp;2)&nbsp;bak&nbsp;|=&nbsp;0x04;&nbsp;//&nbsp;判断是否为2位停止位<br />&nbsp;<br />&nbsp;if&nbsp;(set.parity&nbsp;!=&nbsp;0)<br />&nbsp;{<br />&nbsp;&nbsp;set.parity&nbsp;=&nbsp;set.parity&nbsp;-&nbsp;1;<br />&nbsp;&nbsp;bak&nbsp;|=&nbsp;0x08;<br />&nbsp;}<br />&nbsp;bak&nbsp;|=&nbsp;set.parity&nbsp;&lt&lt&nbsp;4;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置奇偶校验<br />&nbsp;<br />&nbsp;U0LCR&nbsp;=&nbsp;bak;<br />&nbsp;<br />&nbsp;return&nbsp;(1);<br />}<br /><br />/*<br />*********************************************************************************************************<br />**&nbsp;函数名称&nbsp;:main()<br />**&nbsp;函数功能&nbsp;:从串口UART0接收字符串&quot;ABCDEFGH&quot;,并发送回上位机显示。<br />**&nbsp;调试说明&nbsp;:需要PC串口显示终端软件如EasyARM.exe。<br />*********************************************************************************************************<br />*/<br />int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;UARTMODE&nbsp;set;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;set.datab&nbsp;&nbsp;=&nbsp;8;<br />&nbsp;set.stopb&nbsp;&nbsp;=&nbsp;1;<br />&nbsp;set.parity&nbsp;=&nbsp;0;<br />&nbsp;<br />&nbsp;rcv_new&nbsp;=&nbsp;0;<br />&nbsp;<br />&nbsp;<br />&nbsp;PINSEL0&nbsp;=&nbsp;0x00000005;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设置I/O连接到UART0<br />&nbsp;<br />&nbsp;UART0_Init(115200,set);&nbsp;&nbsp;&nbsp;//&nbsp;串口初始化<br />&nbsp;U0FCR&nbsp;=&nbsp;0x81;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能FIFO,并设置触发点为8字节<br />&nbsp;U0IER&nbsp;=&nbsp;0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;允许RBR中断(即接收中断),禁止THRE中断(发送中断)<br />&nbsp;<br />&nbsp;IRQEnable();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;使能IRQ中断<br />&nbsp;/*&nbsp;使能UART0中断&nbsp;*/<br />&nbsp;VICIntSelect&nbsp;=&nbsp;0x00000000;&nbsp;&nbsp;&nbsp;//&nbsp;设置所有的通道为IRQ中断<br />&nbsp;VICVectCntl0&nbsp;=&nbsp;0x20&nbsp;|&nbsp;0x06;&nbsp;&nbsp;&nbsp;//&nbsp;UART0分配到IRQ&nbsp;slot0,即最高优先级<br />&nbsp;VICVectAddr0&nbsp;=&nbsp;(uint32)IRQ_UART0;&nbsp;//&nbsp;设置UART0向量地址<br />&nbsp;VICIntEnable&nbsp;=&nbsp;1&nbsp;&lt&lt&nbsp;0x06;&nbsp;&nbsp;&nbsp;//&nbsp;使能UART0中断<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;<br />&nbsp;while&nbsp;(1)<br />&nbsp;{<br />&nbsp;&nbsp;if&nbsp;(rcv_new==1)<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;rcv_new=0;<br />&nbsp;&nbsp;&nbsp;UART0_SendBuf();<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<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;&nbsp;&nbsp;End&nbsp;Of&nbsp;File<br />********************************************************************************************************/<br />
liujigan 发表于 2007-3-23 13:10 | 显示全部楼层

re

(1)中断中变量i定义为外部变量,把rcv_new&nbsp;=&nbsp;1;&nbsp;放到case&nbsp;0x0c&nbsp;后面试试<br />(2)实际产品中如果每次发送不到16个可以设置U0FCR=0xc1;这样就可一次接收下来再送出去。至于发送用中断我觉得意义不大。
 楼主| 海洋饼干 发表于 2007-3-23 16:54 | 显示全部楼层

TO liujigan大哥

<br />&nbsp;&nbsp;&nbsp;&nbsp;(1)变量i是记录一次发送的字符串中字符的个数的,同时它还作为了字符串的结束标志(sum=i),所以i不能放在外头,不然下次再发的时候它就没法清零,那么第n次发的时候就会连同n-1次的一块发出去了.<br />&nbsp;&nbsp;&nbsp;&nbsp;现在rcv_new&nbsp;=&nbsp;1的位置就是把它同时放在&nbsp;case&nbsp;0x04:&nbsp;&nbsp;和case&nbsp;0x0c:后面的一个减写.&nbsp;大哥你说是这样不?&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;(2)将来是想用ARM传图象,传的数据比较多哈哈.&nbsp;我听人说很多商用的产品的代码中很少使用FIFO,它不好用吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;谢谢大哥的回复.<br />&nbsp;&nbsp;&nbsp;&nbsp;还请各位老大帮我看看到底是怎么回事,我是真找不出毛病.郁闷中!
liujigan 发表于 2007-3-23 17:17 | 显示全部楼层

to:海洋饼干老弟

(1)放到外面定义是记录是为二次传送累加和最后放入sum中(i放入内部不能二次累加),只有字符超时中断指示(CTI)才把rcv_new&nbsp;=&nbsp;1,(当然只有接收不为8的整数倍时适用),rcv_new&nbsp;=&nbsp;1放前面和放case&nbsp;0x0c能一样吗?放前面哪条满足了都发。<br />(2)发完后当然要把i=0;不然乱了。
 楼主| 海洋饼干 发表于 2007-3-27 16:15 | 显示全部楼层

谢谢liujigan和各位大哥的点拨!

<br />&nbsp;&nbsp;&nbsp;&nbsp;昨天终于把这个小程序调通了,就像<font color=#000000>liujigan大哥所说,得把i定义成外部变量,最后再把它清零,刚开始这样改完还是不行,实在没法了我就在i清零的后边又加了一句我认为可有可无的一句:sum清零,谁知道加上这句就好了.不管怎么说程序终于完美运行了哈哈.小弟再次感谢liujigan和各位大哥!</font>
liujigan 发表于 2007-3-27 16:46 | 显示全部楼层

你快乐,我也高兴,一起进步嘛。

水潭先生的FIFO无限数据发送,可是相当不错的范例,值得一悟。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

12

帖子

0

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