打印
[ZLG-ARM]

2214串口接收中断程序,请大家帮忙指点

[复制链接]
2362|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wgqabc|  楼主 | 2007-7-14 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用串口UART0接收上位机发送的数据,当有数据准备接收时,进入接收中断程序
1,关向量中断
2,是接收中断,接收第一字节为数据长度
3,是否还有数据待接收,如果有中断寄存器职位但不触发向量中断,保存数据
4,如果接收数据长度正确,则设置接收到数据标志
5,向上位机发送答复值(不使用发送中断)
通讯波特率9600,8位数据位,1位停止位,无奇偶校验,不使用FIFO
请问这样的接收中断程序能不能实现正确的数据接收。
void   __irq IRQ_UART0(void)
{
    uint8 len;
    uint8 i;
    uint8 clru;
    uint32 j=0;
    VICIntEnClr = 0x00000040;       //禁止向量中断
    if(0x04==(U0IIR&0x0E))
    {        
    len=U0RBR;                 //接收数据长度
        
    for(i=0;i<len;i++)
    {
       while(!((U0IIR&0xfb)==0))       //是否还有数据
          {
        j++;
        if(j>50000)
          {
            break;
          }
           }
       if(j<50000)
              {
        RevBuffer=U0RBR;
        j=0;
         }
       else
         {    
           break;
          }
    }
    if(i==len)
      {
      CmdValid=1;
      }
     }

    VICVectAddr = 0x00;// 中断处理结束        
}

相关帖子

沙发
wgqabc|  楼主 | 2007-7-14 17:23 | 只看该作者

自己来顶

怎么没人帮忙看看

使用特权

评论回复
板凳
alin_99| | 2007-7-15 10:35 | 只看该作者

哈哈

只看到你的中断程序,没看到你的初始化啊,

你至少也要把条件说清楚啊,fifo多大??
如果你用了fifo的话,这样你的下传数据如果>你的fifo植时,你需要在接受中断中接受一部分数据. 在cit中断中接受 通讯自己总数%fifo字节的 余数部分

使用特权

评论回复
地板
wgqabc|  楼主 | 2007-7-15 12:04 | 只看该作者

谢谢alin_99

FIFO是一字节触发,我想问中断后就把向量中断关了,在这次中断把所有要接收的数据都接收,上面的程序能不能实现?

使用特权

评论回复
5
wgqabc|  楼主 | 2007-7-16 08:41 | 只看该作者

做好事了

兄弟姐妹们帮忙看看啊,现在放假在家,没有调试工具,毕业设计完成不了没法找工作啊

使用特权

评论回复
6
wgqabc|  楼主 | 2007-7-16 09:23 | 只看该作者

没天理了

举手之劳啊,怎么没人花点时间看看啊,郁闷,去上街了

使用特权

评论回复
7
alin_99| | 2007-7-16 12:30 | 只看该作者

aa

你的程序思路不对.  你是假设你第一次中断进入就是一个抱文的起始位置,而且一直等待接受,直到收完数据,中断程序过长,等待接受也浪费了不少cpu时间,  要知道 arm的中断不是可以硬件嵌套的,这样做只有隐患,
你的程序风险很大,

使用特权

评论回复
8
wgqabc|  楼主 | 2007-7-16 15:15 | 只看该作者

谢谢alin_99

是不是就要设置FIFO,然后把CIT中断也打开,我的程序就是根据上位机发的命令进行操作,如果不考虑你说的那些,程序可以运行吗?

使用特权

评论回复
9
Ice_River| | 2007-7-17 10:31 | 只看该作者

FIFO 是必须设置的

其实你在制定一个简单的协议,程序太复杂了
void    __irq IRQ_UART0(void)
{
    UINT8      Tch;
        
       switch(U0IIR&0x0F)
         {
           case 0x04:                //Receive  intrrupt
        
                          
             break;

            case 0x02:                //Transmitinterrupt
            
            break;
                 
//            case 0x0c:  
                      
          default:
            break;        
         }


    Tch = U0IIR;            //
    Tch = U0LSR;            //clear inturrpt indicate
     
    VICVectAddr = 0;    //interrupt return
    
}

使用特权

评论回复
10
alin_99| | 2007-7-17 13:18 | 只看该作者

就用楼上的框架

使用特权

评论回复
11
wgqabc|  楼主 | 2007-7-17 14:58 | 只看该作者

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

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

使用特权

评论回复
12
alin_99| | 2007-7-18 11:34 | 只看该作者

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

可惜  作出来 读卡还是没反映那
不知道有没人做 epc c1 g2协议的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

17

帖子

1

粉丝