LPC2138串口中断总结

发布者:清新时光最新更新时间:2014-11-03 来源: 21ic关键字:LPC2138  串口  中断 手机看文章 扫描二维码
随时随地手机看文章

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

     1)接收

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


      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));         // 等待当前字节发送完毕
      }
 

关键字:LPC2138  串口  中断 引用地址:LPC2138串口中断总结

上一篇:基于微处理器和射频收发芯片近程无线数传系统设计
下一篇:用单片机S3C44BOX控制红外线通信接口电路设计

推荐阅读最新更新时间:2024-03-16 13:44

2440中断解析
MACRO $HandlerLabel HANDLER $HandleLabel $HandlerLabel sub sp,sp,#4 ;decrement sp(to store jump address) stmfd sp!,{r0} ;PUSH the work register to stack(lr does not push because it return to original address) ldr r0,=$HandleLabel; load the address of HandleXXX to r0 ldr r0, ;load the contents(service r
[单片机]
STM32HAL库ADC实验(三)——中断查询法
(模式:连续模式 非扫描模式) 使能ADC全局中断 参考视频 【STM32】超简单的开发方法-基础篇(ADC模数转换) https://player.bilibili.com/player.html?aid=715022775 参考文章:https://blog.csdn.net/as480133937/article/details/99627062 设置定时 可以看我这篇文章 配置玩定时器之后 配置ADC 使能ADC中断 基本函数: • HAL_ADC_Start_IT(&hadcx);       //中断轮询模式开启ADC • HAL_ADC_Stop_IT() //中断轮询模式停
[单片机]
STM32HAL库ADC实验(三)——<font color='red'>中断</font>查询法
单片机中断的应用
51单片机: P3.2 引脚为INT0 中断 P3.3引脚为INT1 中断 按钮 P3.2 P3.3 按钮低电平触发: while(PB0==0); delay(); #include reg51.h #define SEG P0 // 定义七节显示器接至Port 0 sbit LED = P2^0; // 定义LED灯接至P2.0 sbit com = P1^0 ; // 数码管 com 口 sbit OC = P1^1; // 定义573锁存器使能口,我是用的573驱动7段数码管 void delay10ms(int x); // 声明延迟函数
[单片机]
单片机<font color='red'>中断</font>的应用
基于ARM微处理器及嵌入试Linux的串口网桥软硬件设计
l、引言 在电力系统自动化控制及其他工业控制、民用设备如商场销售系统等领域,众多设备的对外通讯接口仍然是低速串口。串口由于其易用性、可靠性及相对于工控设备来说足够高的通信能力而长盛不衰。然而,串口有一个重大弱点就是传输距离短且无法与网络直接相连,造成设备无法实现远程控制及数据共享,而这些恰恰是实现工业控制高度自动化的必须条件。因此,要求设计一种使串口设备快捷方便地实现联网功能的装置,而且要求其成本低廉,我们称之为串口网桥或串口设备联网服务器。 2、串口网桥简介 我们设计的串口网桥是一个可以为RS-232串口设备提供联网能力的设备联网服务器。装置主要完成主机与串口设备间交流数据的过滤与转发功能,将RS-232信号转换成T
[单片机]
基于ARM微处理器及嵌入试Linux的<font color='red'>串口</font>网桥软硬件设计
单片机中断唤醒
生活上有很多东西都搭载着单片机而进行工作的,而且有相当一部分的设备、仪器、产品都是靠蓄电池来提供电源的,往往这些靠蓄电池供电的设备、仪器、产品都能够用上一大段时间。例如我们经常接触到的遥控器,假若MCU一直不停地运行,不出一段时间,电池的能量会很快耗光。当然在8051系列单片机搭载的系统中,不光有单片机需要耗电,同时还有其他外围部件耗电的,因此,我们在适当的时候关闭设备的运行同时将8051系列单片机的运行模式进入空闲模式或者掉电模式,以节省不必要的能源,达到低功耗的目的。 平时8051系列单片机正常工作的电流为4毫安~7毫安;当8051系列单片机进入掉电模式下,它的工作电流小于1微安。由此可见,低功耗设备的功耗控制很有必要在适当的
[单片机]
单片机<font color='red'>中断</font>唤醒
AVR单片机和Matlab串口通信的计时器系统
引言   本文设计了一种基于AVR单片机和Matlab串口通信的计时器系统,本计时器系统可以满足体育竞赛中精确计时的要求。在该设计中,主要以Atmel公司ATmega16单片机作为信号采集系统,通过串口和上位机的Matlab通信,自定义了一项通信协议,使上位机接收到不同的信号,可以实现对Matlab中计时器的控制。 利用Matlab软件提供的GUI设计出一套友好的人机界面。 本系统中,可以有多个单片机作为下位机,通过串口连接ZigBee无线传输模块,与上位机进行通信。无线传输模块的接入可以实现远程多点信号采集,使系统更加灵活,可扩展性大大增强。 1 系统总体设计   本系统包括多个以ATmega16单片机为主控制器的信号采
[单片机]
AVR单片机和Matlab<font color='red'>串口</font>通信的计时器系统
N76E003双串口中断配置、问题及解决方法
更正 发现造成该原因是由于TI/RI只要进入中断,就会一起打开造成,针对此情况需要在中断服务函数中将其置低,否则中断响应将一直存在。建议在串口中断中除了对RI进行置低外,还对TI进行置低(代码已修改)。此外我两年前测试时在接收中断中使用的send_data_to_uart1()函数,其会在发送前先将TI置低,后发送完成后会硬件置低,也可能是因为此原因,导致中断能顺利运行。 再次对找到原因的大佬表示感谢,也对那些曾被我误导的同学道歉。 原回答 最近在调试N76E003串口0,串口1中断时,发现当串口0开启中断后,串口1中断无法正常工作,下面详细说说自己的办法。(我的问题原因是中断优先级造成的,取消串口1中断优先级即可解决)
[单片机]
N76E003双<font color='red'>串口</font><font color='red'>中断</font>配置、问题及解决方法
STM32速成笔记(5)—串口通信
一、什么是串口通信 串口通信是指外部设备与主控芯片之间,通过数据信号线、地线等,按位进行数据传输的一种通信方式,属于串行通信方式。串行通信是指使用一条数据线依次逐位传输数据,每一位数据占据固定长度的时间。可以看一下简单的串行通信示意图。 串口通信示意图 二、串口通信有什么用 这里简单列举一下串口通信的用途 • 下载程序 • 外设与单片机通信 单片机给外设发送一些指令或者配置信息,外设给单片机回传一些信息。 • 打印信息 比如将ADC采集到的电压发送给上位机的串口调试助手,或者实时监测某一个变量的变化。 三、STM32的串口通信 普中核心板上使用的STM32F103ZET6有三
[单片机]
STM32速成笔记(5)—<font color='red'>串口</font>通信
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved