131 1300 0010
其他
当前位置: 首页>> 元件技术>>其他>>
  • 导航栏目
  • 二极管
  • 整流桥
  • MOS管
  • 其他
  • LPC2138的串口中断程序设计
    LPC2138的串口中断程序设计
  • LPC2138的串口中断程序设计
  •   发布日期: 2019-10-07  浏览次数: 1,238

    LPC2138的串口带有16字节的接收和发送FIFO,并且接收FIFO的触发点可设为1,4,8,14字节。

    1)接收

     

    当接收到的字节数达到设置的触发点(通过FCR寄存器设置)时,就会产生接收中断;而当接收到的字节数未能达到设置的触发点(比如触发点设置为14,但是只接收到了10个字节的数据),那么经过短暂的等待时间后会产生超时中断。在这两种情况下需要正确读取RBR寄存器,妥善保存接收到的数据。
          举例来说,假设接收FIFO的触发点设置为14,而要接收的数据一共有16字节。那么接收过程中会产生两次中断:第一次是当接收到第14个字节时产生的接收中断;之后只剩2个字节要接收,达不到触发点14,所以经过等待时间后会产生超时中断。
          中断服务程序里,对于这两种中断可进行如下的处理(假设使用UART1):


    LPC2138的串口中断程序设计

    switch (U1IIR & 0x0E)
          {
          case 0x0C:            // 若为超时中断(注意此处不要加break)
          case 0x04:            // 若为接收中断
          while ((U1LSR & 0x01) == 1)             // 若U1RBR包含有效数据
          Rec_Buffer[index++] = U1RBR;    // 保存接收到的数据
          }

          
          2)发送

    发送FIFO并没有触发点的问题。要发送数据时,首先把数据写入THR寄存器,之后MCU会将其移入发送FIFO缓冲区中,一旦THR寄存器被移空,就会产生发送中断。换句话说,在使能了发送中断的情况下,每向THR寄存器写一个字节就会引起一次发送中断。所以要发送一系列的数据时,只需要发送第一个字节来启动发送过程,剩余的字节由中断服务程序来完成就可以了。
          假设Send_Length为要发送的总字节数,程序中的处理如下:


          U1THR = Txd_Buffer[0];
          index = 1;
          
          void __irq Uart1_isp(void)                           // 中断服务程序
          {
                if ((U1IIR & 0x0E) == 0x02)                   // 判断是否为发送中断
                {
                      if (index != Send_Length)
                      {
                            U1THR = Txd_Buffer[index];
                            index ++;
                      }
                }
          }


          个人觉得,使能发送中断会导致MCU的工作效率变低。因为一旦THR寄存器为空就会进入中断服务程序,会出现连续的无效中断。(如果理解有错误,还请指正)
          在不使能发送中断的情况下,可用查询方式实现以上的发送过程:


          int i;
          for (i = 0; i < Send_Length; i++)
         {
               U1THR = Txd_Buffer[i];
               while (!(U1LSR & 0x20));         // 等待当前字节发送完毕
          }
    来源;电子工程网


  • ·上一篇:
    ·下一篇:
  • 其他关联资讯
    深圳市日月辰科技有限公司
    地址:深圳市宝安区松岗镇潭头第二工业城A区27栋3楼
    电话:0755-2955 6626
    传真:0755-2978 1585
    手机:131 1300 0010
    邮箱:hu@szryc.com

    深圳市日月辰科技有限公司 版权所有:Copyright©2010-2023 www.szryc.com 电话:13113000010 粤ICP备2021111333号