UART中断方式发送无反应

纠结了好些天了,终于解决了。

泪奔啊!!刚刚写了一堆。。结果undo一下,全没了。。redo也不管用。。。抓狂


程序内容:UART中断方式的接收与发送


问题描述:可以中断方式接收,但是从来没有进去过0x2发送中断


分析:因为U0IIR每次读取都会清空中断标志,而我的程序在中断服务函数里读取了两次U0IIR,第一次读取U0IIR判断是否有中断,第二遍读取U0IIR判断是什么类型的中断。所以清空了发送中断标志,不会进入中断。。不过很奇怪为什么缺能正常接收。。


解决方法:注释掉第一遍对U0IIR的读取。。但是不知道这样子会不会不严谨,至少程序可以跑起来了。

另外,从网上看到,有时候会发生发送中断不断触发的情况,需要在初始化时只允许接收中断。然后在接收到数据后再使能发送中断。。发送完毕后再关闭发送中断。用这种方法实现接收->发送。

中断函数如下:

__irq void irq_handler(void)
{
  int iir = U0IIR;
    switch(iir & 0XF)
    {
    case 0x2://发送中断
      U0THR = transmit;
      U0IER = 0X1;
      break;
    case 0xc://字符超时中断
      break;
    case 0x4://
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值