[ZLG-ARM] 2214串口接收中断程序,请大家帮忙指点

[复制链接]
3433|11
 楼主| wgqabc 发表于 2007-7-14 11:45 | 显示全部楼层 |阅读模式
使用串口UART0接收上位机发送的数据,当有数据准备接收时,进入接收中断程序<br />1,关向量中断<br />2,是接收中断,接收第一字节为数据长度<br />3,是否还有数据待接收,如果有中断寄存器职位但不触发向量中断,保存数据<br />4,如果接收数据长度正确,则设置接收到数据标志<br />5,向上位机发送答复值(不使用发送中断)<br />通讯波特率9600,8位数据位,1位停止位,无奇偶校验,不使用FIFO<br />请问这样的接收中断程序能不能实现正确的数据接收。<br />void&nbsp;&nbsp;&nbsp;__irq&nbsp;IRQ_UART0(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;len;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;clru;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;j=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnClr&nbsp;=&nbsp;0x00000040;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//禁止向量中断<br />&nbsp;&nbsp;&nbsp;&nbsp;if(0x04==(U0IIR&0x0E))<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;len=U0RBR;&nbsp;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltlen;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!((U0IIR&0xfb)==0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//是否还有数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(j&gt50000)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(j&lt50000)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RevBuffer=U0RBR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<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;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i==len)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CmdValid=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0x00;//&nbsp;中断处理结束&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}
 楼主| wgqabc 发表于 2007-7-14 17:23 | 显示全部楼层

自己来顶

怎么没人帮忙看看
alin_99 发表于 2007-7-15 10:35 | 显示全部楼层

哈哈

只看到你的中断程序,没看到你的初始化啊,<br /><br />你至少也要把条件说清楚啊,fifo多大??<br />如果你用了fifo的话,这样你的下传数据如果&gt你的fifo植时,你需要在接受中断中接受一部分数据.&nbsp;在cit中断中接受&nbsp;通讯自己总数%fifo字节的&nbsp;余数部分
 楼主| wgqabc 发表于 2007-7-15 12:04 | 显示全部楼层

谢谢alin_99

FIFO是一字节触发,我想问中断后就把向量中断关了,在这次中断把所有要接收的数据都接收,上面的程序能不能实现?
 楼主| wgqabc 发表于 2007-7-16 08:41 | 显示全部楼层

做好事了

兄弟姐妹们帮忙看看啊,现在放假在家,没有调试工具,毕业设计完成不了没法找工作啊
 楼主| wgqabc 发表于 2007-7-16 09:23 | 显示全部楼层

没天理了

举手之劳啊,怎么没人花点时间看看啊,郁闷,去上街了
alin_99 发表于 2007-7-16 12:30 | 显示全部楼层

aa

你的程序思路不对.&nbsp;&nbsp;你是假设你第一次中断进入就是一个抱文的起始位置,而且一直等待接受,直到收完数据,中断程序过长,等待接受也浪费了不少cpu时间,&nbsp;&nbsp;要知道&nbsp;arm的中断不是可以硬件嵌套的,这样做只有隐患,<br />你的程序风险很大,<br />
 楼主| wgqabc 发表于 2007-7-16 15:15 | 显示全部楼层

谢谢alin_99

是不是就要设置FIFO,然后把CIT中断也打开,我的程序就是根据上位机发的命令进行操作,如果不考虑你说的那些,程序可以运行吗?
Ice_River 发表于 2007-7-17 10:31 | 显示全部楼层

FIFO 是必须设置的

其实你在制定一个简单的协议,程序太复杂了<br />void&nbsp;&nbsp;&nbsp;&nbsp;__irq&nbsp;IRQ_UART0(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;UINT8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tch;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(U0IIR&0x0F)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x04:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Receive&nbsp;&nbsp;intrrupt<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x02:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Transmitinterrupt<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;break;<br />&nbsp;&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;case&nbsp;0x0c:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Tch&nbsp;=&nbsp;U0IIR;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br />&nbsp;&nbsp;&nbsp;&nbsp;Tch&nbsp;=&nbsp;U0LSR;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clear&nbsp;inturrpt&nbsp;indicate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;VICVectAddr&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;//interrupt&nbsp;return<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}
alin_99 发表于 2007-7-17 13:18 | 显示全部楼层

就用楼上的框架

  
 楼主| wgqabc 发表于 2007-7-17 14:58 | 显示全部楼层

谢谢两位了,再次寻求帮助

不占用贴子了,再问下有没有人有RC500上位机VC编的程序啊?我毕设是用ARM做的RC500阅读器,DEMO里有个上位机软件不知道什么编的看不懂,根据它编程序麻烦死了,要有VC编的软件麻烦高手传个给我,谢谢!e-mail:wgqabc2000@163.com
alin_99 发表于 2007-7-18 11:34 | 显示全部楼层

RC500啊, 做13.56的读卡器,我正做uhf的读卡器

可惜&nbsp;&nbsp;作出来&nbsp;读卡还是没反映那<br />不知道有没人做&nbsp;epc&nbsp;c1&nbsp;g2协议的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

17

帖子

1

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