LPC2138的串口中断程序设计

发布者:cwk2003最新更新时间:2023-05-07 来源: elecfans关键字:LPC2138  串口  中断程序 手机看文章 扫描二维码
随时随地手机看文章

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


关键字:LPC2138  串口  中断程序 引用地址:LPC2138的串口中断程序设计

上一篇:LPC51U68使用HID bootloader的步骤
下一篇:12位串行高速A/D转换器ADS7822的功能特点及应用设计

推荐阅读最新更新时间:2024-11-09 23:24

高速DSP与PC实现串口通信的方法
数字信号处理器(Digital Signal Processor,DSP)在图形图像处理、高精度测量控制、高性能仪器仪表等众多领域得到越来越广泛的应用,实际运用中,通常须将DSP采集处理后的数据传送到PC机,然后进行存储和处理。 T1公司的 TMS320VC33 微处理器具有性价比高,同时,该芯片的I/O电平、字长、运行速度、串口功能具有大多数DSP的共同特点。本文针对TMS320VC33与PC RS-232的通讯,分析三种具体的接口电路和软件设计方法,实现高速DSP与低速设备的通讯:①通过TMS320VC33的通用I/O口实现通信;②通过TMS320VC33中可设置为通用I /O的串行引脚实现通信;③直接利用TMS320VC33
[嵌入式]
高速DSP与PC实现<font color='red'>串口</font>通信的方法
STM32开发板入门教程 - 串口通讯 UART
通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。 它支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。用于多缓冲器配置的DMA方式,可以实现高速数据通信。 主要特性: 全双工的,异步通信 NR 标准格式 分数波特率发生器系统 -发送和接收共用的可编程波特率,最高到4.5Mbits/s 可编程数据字长度(8位或9位)
[单片机]
stm32f1xx串口控制灯开关实验
工程文件使用cubemx建立,因此程序是基于HAL库开发,设置如图所示 查看原理图可以知道PA10和PA9是复用IO口,这里用来做串口的RX与TX端,在左侧的栏目中就可以设置,将状态从RESET改成第二个A字开头的即可 在configuration中,记得使能中断,具体操作如下,点击NVIC_Settings选项卡,在Enabled上打勾即可,然后生成代码 在代码的int main(void)下,添加如下代码: flag是用来控制状态的变量,HAL_UART_Receive_IT()与HAL_UART_Transmit_IT()是两个成对的库函数,它们的特点是会产生一个中断,直到完成数据的发送或者接收才
[单片机]
stm32f1xx<font color='red'>串口</font>控制灯开关实验
STM32 UART串口驱动程序
示例1.通过UART1进行数据发送 UART 1 的初始化 /** * @brief UART1 Initialise. * @param None. * @retval None. */ void UART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //UART1 选择对应UART的RCC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GP
[单片机]
N76E003 串口的时候用和printf初始设置
N76E003的共两个串口。每个串口有多种工作模式。具体可以看规格书以及BSP包例程。为方便日后使用。做简要的总结。 1.初始化 开发中。常用的是串口模式1.其初始化代码如下: 因为串口的发送需要用到定时器(产生波特率需要用到)。UART0可选择有TIMER1和timer3。UART1只有TIMER3 UART0 void InitialUART0_Timer1(UINT32 u32Baudrate); //T1M = 1, SMOD = 1 void InitialUART0_Timer3(UINT32 u32Baudrate); //Timer3 as Baudrate, SMOD=1, Prescale=0
[单片机]
N76E003 <font color='red'>串口</font>的时候用和printf初始设置
解决串口开启DMA接受却只能接收到第一个字节的问题
设备: 单片机:STM32G070 MDK:V5.25 问题描述: 发现串口接受不到数据,只能接受到第一个字节。 MX_USART4_UART_Init(); HAL_Delay(200); HAL_UART_Receive_DMA(&huart4, UART_DMA_RXBuf, UART_RX_BUF_SIZE); 原因分析: 在单片机执行完串口初始化之后,并没有立马开启DMA接收,在这个时间差之内如果有数据发过来就会导致这个问题 解决方案: 在完成串口初始化之后,立马开启DMA接收,中间不能有较大的空挡时间差即可。 MX_USART4_UART_Init(); // HAL_Delay(200);
[单片机]
计算机串口与单片机通讯测试系统的实现
1引言 串行通讯接口标准经过使用和发展,目前已有多种,不过都是在RS-232C的基础上改进而形成的。RS-232C标准是美国EIA(电子工业联合会)与BELL公司一起开发并于1969年公布的通讯协议。因此,他作为一种标准,目前已在微机通讯接口中被广泛采用,他不仅已被内置于每台计算机,同时也已被内置于从微处理器到主机的多种类型的计算机及其相连设备。而串口与单片机的通讯技术可以解决多台下位机的多内容同时显示,还可以方便地完成多机通讯技术、多数据处理等优点。但是当同时用到两种通信方式时,很可能产生串口冲突或其他不可预料的错误,对开发工作极其不利。 所以,此系统解决了这种开发中的问题,依靠软件仿真数据信号的发送、接收和多种通讯方式的测
[单片机]
计算机<font color='red'>串口</font>与单片机通讯测试系统的实现
AVR单片机外部中断C程序框架
Avr mega16a 单片机在studio4 开发环境中外部中断C程序框架如下: #include avr/io.h //头文件. #include avr/interrupt.h //中断头文件; typedef unsigned char uint8; //习惯宏定义数据类型语法.应用时只需写入数据类型: // uint8 s=0; typedef unsigned int uint16; //习惯宏定义数据类型语法.应用时只需写入数据类型: // uint16 i=0; Int main() //主函数; { MCUCR=0Xnn: //中断模式触发寄存器,用来设置外部
[单片机]

推荐帖子

【聊聊DSP】聊聊DSP入门必读文档 与 最小系统设计
D妹恋爱使用说明书:入门篇【使用申明】:此乃和DSP妹妹恋爱的至尊宝典,TI出品,Starcool(Q工)整理校订,审核,公布,乃为使更多人能走上和D妹家族的妹子们踏入爱的殿堂,本文重在告诉您如何从驳杂的文档之海中找到需要的,并借助有限的很少的资料,进行最有效的学习。首发于EEWORLD未经允许不得转载!因个人知识与眼界有限,故也许有诸多不足,还望批评指正。【附件】:将通用文档已提供于二楼,请移步下载【适用人群】:没有女朋友的屌丝们,有女朋友的慎入~
starcool DSP 与 ARM 处理器
为何我的Jlink可以下载程序到Flash重新上电可运行,但不能仿真
IAR4.4.2环境下,可用Jlink下载程序到Flash,进入调试窗口后可以单步/全速执行,但没有实际效果(应该是程序没有被正确运行),而我重新给目标板上电后,程序可以正确运行.这是什么原因造成的?查了下linkarm_flash.xcl和其它配置好象没发现异常.为何我的Jlink可以下载程序到Flash重新上电可运行,但不能仿真我也是,经常莫名其妙的这样什么芯片?什么程序功能?
heyan0902 stm32/stm8
大家有没有fpga控制DM9000的程序
网上搜到最多的只是那个verilog实现的程序,但也只有部分程序,好像有个top文件没有,而且功能貌似也不好,不知道哪位大牛能共享下程序,万分感谢大家有没有fpga控制DM9000的程序直接驱动程序还是容易的。我只能写出初始化程序,其他部分的就不会了,纠结啊回复沙发eeleader的帖子还是要看懂口ATASHEET啊!才能随心所纹。
aluowell FPGA/CPLD
懂VB的近来帮下忙
本人用VS2005编译了一个串口通讯的小软件用VB写的为什么当串口一收到数据的时候就弹出以下错误错误Temper11.exeNotSupportedExceptionControl.Invoke必须用于与在独立线程上创建的控件交互。位于Microsoft.AGL.Common.MISC.HandleAr()位于System.Windows.Forms.Control.get_Text()位于System.Windows.Forms.Control.set_Text(
bbslee888 嵌入式系统
How to Make 3 Partition SD Card中文手册
HowtoMake3PartitionSDCard中文手册HowtoMake3PartitionSDCard中文手册
鑫海宝贝 DSP 与 ARM 处理器
AD导入brd文件提示cadence allegro installation not found ……错误
求大佬们给下意见,或者帮我转一下AD格式,我用了AD13、10、18这几个版本的AD导入还是一样的提示。实在没有办法了AD导入brd文件提示cadenceallegroinstallationnotfound……错误能在Allegro能打开么楼主的这么多AD软件版本都打不看,其他人也一样需要先成功安装Cadence,保证Candence能成功打开本设计文件,然后在AD中用File-InportWizard导入。这是因为没有安装allegro软件白天没有时间转换,
IJK PCB设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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