搜索
bottom↓
回复: 8

lpc1768的串口中断发送程序-问题

[复制链接]

出0入0汤圆

发表于 2012-6-30 15:13:33 | 显示全部楼层 |阅读模式
void uart0Task(void* pvData)
{
  int iloop;

  for(iloop=0;iloop<16;iloop++)
  {
  uart0SendBuf0[iloop]= iloop+0x30;
  }
  U0IER |= 0x2;

  while(1)
  {

OSTimeDly(200);  
  }
}



void irq_uart0(void)
{
int isendbyte=0;
    while ((U0IIR & 0x01) == 0){                                    
        switch (U0IIR & 0x0E){                                         
            case 0x04:                                                                                          
                for (uart0RecvNum0 = 0; uart0RecvNum0 < 14; uart0RecvNum0++){
                    uart0RecvBuf0[uart0RecvNum0] = U0RBR;
                }
                break;
   case 0x02:
    /*send interrutp*/
    for(isendbyte=0;isendbyte<16;isendbyte++)
    {
      U0THR= uart0SendBuf0[isendbyte];
    }
    U0IER &= ~0x2;
   break;
            default:
                break;
        }
    }
}



发现接收中断可以进来,但是发送中断就没有产生,这个是什么原因呢 请高手帮忙看看,谢谢。

出235入8汤圆

发表于 2012-7-6 08:23:58 | 显示全部楼层
要启动一下发送数据,就能进来了!

出0入0汤圆

 楼主| 发表于 2012-7-6 15:04:59 | 显示全部楼层
z31com 发表于 2012-7-6 08:23
要启动一下发送数据,就能进来了!

我在发送数据时,U0IER |= 0x2; 已经使能了发送中断,怎么启动发送数据?没有明白,thanks.

出235入8汤圆

发表于 2012-7-10 10:23:11 | 显示全部楼层
UARTn THRE中断(UnIIR[3:1]=001)是第三优先级中断,当UARTn THR FIFO为空且满足特定的初始化条件时,该中断激活.

我记得要发数据后,才能进入中断!你用仿真多试试,就知道了。

出0入0汤圆

发表于 2012-7-11 13:15:15 | 显示全部楼层
本帖最后由 vincent0319 于 2012-7-11 13:20 编辑

  for(isendbyte=0;isendbyte<16;isendbyte++)
    {
      U0THR= uart0SendBuf0[isendbyte];
    }
    U0IER &= ~0x2;
这段放中断程序里可以,但是中断产生不了。中断程序不会运行发送。
当中断开启后,串口发送寄存器U0THR,放一个值进去,通过中断发出去一个字节后,会自动地触发下一个发送中断。
也就是说,可以这么理解,发送中断是通过写U0THR触发的。


你应该,开发送中断,然后在你的主后台程序中,发送缓存里拿一个出来放U0THR,触发一次中断发送。
剩下的在中断服务程序里一次次自动触发中断发出去。
加pop和push指针,再加一个串口忙的标志。就ok了。
你触发了一次发送后,CPU就可以去做其他事儿了。串口发就交给了中断。

出0入0汤圆

 楼主| 发表于 2012-7-23 15:39:35 | 显示全部楼层
vincent0319 发表于 2012-7-11 13:15
for(isendbyte=0;isendbyte

你好,我按照你的意思,在后台程序中首先:

for(iloop=0;iloop<16;iloop++)
  {
   uart0SendBuf0[iloop]= iloop+0x30;
  }
  U0IER |= 0x2;
  
  U0THR='K';  // trigger the send int

这个应该可以触发发送中断了吧,但是程序跑起来之后,发现还是不能进入发送中断ISR中去,不晓得是什么缘故?

非常感谢你的回复。

出0入0汤圆

发表于 2012-10-24 17:57:59 | 显示全部楼层
ge做个记号,哈哈

出0入0汤圆

发表于 2012-11-2 10:28:49 | 显示全部楼层
串口中断发送,标记一下

出0入0汤圆

发表于 2014-8-11 22:22:30 | 显示全部楼层

串口中断发送,标记一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 07:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表