嵌入式系统高效多串口中断源的实现

发布者:数字冒险最新更新时间:2013-12-27 来源: eefocus关键字:CPLD  中断  串口 手机看文章 扫描二维码
随时随地手机看文章

近几年来,随着后PC时代的来临,嵌入式系统由于其简洁、高效等特点,得到了飞速发展,嵌入式技术目前已将各种计算机技术多层次、多方面地交叉融合在一起。嵌入式系统加快了工业设计进程,降低了开发成本及其风险,使用简便,扩展灵活,高效精简,可方便应用于工业各个领域。

传统方法中,扩展多个串行口是利用多个中断源。但在嵌入式系统中,花费大量的中断源来扩展串口无疑是大量的资源浪费。针对这种情况,为了节省紧张的系统资源,本文提出的实现高效多串口中断源方案,可以利用单一的中断源来管理多个扩展串口,并保证多个串口中断的无漏检测与服务。

总体设计

方案的基本组成如图1所示。RS-232串口通过驱动芯片MAX202转换成TTL电平,通过串口异步通信器件16C554输出中断请求,通过或门获得多个串口的中断请求INTREQ,再通过CPLD与中断控制器相连接。中断线INTREQ通过CPLD主要是在CPLD中有一位的控制寄存器INTEN,用做中断允许控制位。并且根据16C554的中断请求INTREQ和INTEN的状态来最终生成DLY_IRQ,向CPU发出请求。CPU实时响应中断请求DLY_IRQ,在中断服务过程中,CPU按顺序逐个检查多个扩展的串口中断源,有中断请求的就给予服务。
在刚刚检查过的中断又出现时,一方面靠CPLD中的一位寄存器INTREQ锁存;另一方面,当上一中断服务完毕时,CPLD中的8位状态机保证了一定时间的延迟,此延时中,中断控制把堆栈内容返回给CPU寄存器,恢复系统状态,确保上一中断完全退出,并且下一中断能获得响应。这样,即使在多个串口中断密集发生的环境下,扩展的多个串行口仍可获得实时性和可靠性较高的中断响应。


图1 原理结构图

 

硬件实现

MAX202

MAXIM公司的MAX202芯片为标准的RS-232电平转换器,符合RS-232通信标准,功耗低,集成度高,只用单一5V电源,每片有两个驱动器和两个接收器,具有两组接收和发送通道,全部接口电路简单,可靠性高,实现TTL电平和RS-232电平的直接转换。

16C554

16C554是集成异步通信元件,在FIFO模式,传输和接收前将数据缓冲为16字节数据包,减少了CPU的中断数量。包含四个改良16C550异步传输器件,使得串行I/O更加可靠,每个信道实现串行和并行两种连接方式的转换,每个信道的状态可以通过CPU的操作读取,可以获取操作情况或任何的错误状态。三态输出为双向数据总线和控制总线提供TTL驱动能力,优先级中断系统控制,可编程的串行接口特性。

8259A

8259A是可编程的中断控制芯片,每块芯片可管理8级向量中断,具有八条中断请求输入线IRQ0~IRQ7,一条外中断请求输出线,具有4种主要工作方式,即全嵌套、循环优先级、特定屏蔽和程序查询方式。同时,它还有4种从属工作方式,即结束中断,读状态,中断请求触发和数据缓冲方式。这些工作方式可以通过初始化命令字寄存器来实现。采用全嵌套方式时,芯片初始化后不必设置操作命令字,中断请求优先级是固定的,0级最高,7级最低,接受的8个中断请求信号为边沿触发,设定0级请求对应中断号为8,直至7级请求中断号为0FH。

单片工作时,实际使用020H和021H两个端口。经过中断优先级分析器选中的当前请求的中断优先级,其相应的中断服务寄存器ISR位被置1,一直保持到中断服务程序在返回前发中断结束命令为止。在ISR置位期间,禁止同级或较低级的中断响应,开放较高级的中断请求。

CPLD编程

嵌入式系统都有灵活性的要求。因此,本系统选用了Lattice ispLSI系列产品,以适应不断扩展或开发新的产品以及一个硬件平台上多个品种的实现。使用可编程逻辑器件CPLD有利于在系统设计和现场运行后可能遇到的系统修改、调试、升级等。Lattice是带有在系统可编程(ISP)功能的可编程逻辑器件,不需要重新修改PCB即可修改原有设计。

(1)在CPLD中设计一位寄存器INTEN原理图如图2所示:地址总线A对应INTEN的口地址,数据线D[0]对应INTEN的数据,数据在L#的上升沿锁定。

图2 CPLD中一位寄存器INTEN原理图

(2)在CPLD中设计一个8位状态机,状态机由XCLK驱动,XCLK通过分频生成100Khz时钟,即Dt=10ms。

设计构思

在CPLD中做一个一位寄存器Reg,称为INTEN中断允许,由一个8位状态机根据16C554的中断请求线产生的INTREQ及INTEN状态来最终生成DLY_IRQ。

(1)INTREQ为n个中断的或:
INTREQ=IRQ0+IRQ1+...+IRQn

(2)CPU对INTEN只写,操作过程分三步:
第一步:中断安装后设置INTEN=1;
第二步:进入中断服务程序后CPU设置INTEN=0;
第三步:退出中断服务程序的最后指令:
//INTEN_PORT为INTEN的口地址

(3)中断响应的时序如图3所示。

图3 中断响应的时序

在ISR置位期,有中断请求INTREQ产生时,此时如果触发了中断,则会使上次中断服务无法完成,因而造成中断丢失。因此我们在ISR置位期间,将中断允许INTEN设置为0,防止其他中断请求触发中断,并用INTREQ锁存未被响应的中断请求。退出中断服务后,将中断允许INTEN设置为1,保证其他中断请求能够被响应,并延迟以确保此次中断服务完全退出。

(4)中断控制寄存器的状态如图4所示(描述8位状态机的转换)。

图4 中断控制寄存器的状态设置

在退出中断时,将INTEN设置为1,从状态S3转换到状态S0,时间上延迟了5Dt=50ms,确保当前中断完全退出。INTREQ锁存中断请求,以确保下一中断能获得响应。

软件设计

在设计中断服务程序时,注意中断服务程序必须具备自我保护能力,并能访问到所有当前段基址和堆栈指针,接管中断向量前要关中断,在中断程序入口处要立即开中断,以允许较高级的中断产生,中断程序执行IRET指令前,应向中断控制器发出结束中断命令EOI。在安装中断时,将INTEN设置为1,在中断服务中轮流检查多个串口,如果有中断服务产生则将INTEN设置为0,退出中断服务的时候将INTEN设置为1。

结语

本文提出的多串口中断源的实现方案,大大节省了资源,确保了中断请求的无漏检测和服务,并有效解决了多个串口共享同一中断源时所造成的冲突和丢失等问题。

关键字:CPLD  中断  串口 引用地址:嵌入式系统高效多串口中断源的实现

上一篇:嵌入式系统设计三层次
下一篇:实时嵌入式产品的测试系统设计

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

单片机通用模拟串口C程序
//----------------------------------------------------------------------   // UART.C   // 通用模拟串口程序   // 资源需求:一个硬件计数器,两个I/O口   // 硬件计数器的计数时间设定为三倍波特率   // 定义的两个I/O口,用于发送和接收,分别用在receive()和transmit(char)中   // 设立了专门的接收缓冲区,用于存储接收数据   // 注意:必需根据波特率来设定定时器;   // 每次通信开始必须调用初始化函数init_uart()   //--------------------
[单片机]
MSP430有哪些可屏蔽中断_MSP430中断的优先级
MSP430有哪些可屏蔽中断 中断很大程度上体现了一款单片机的性能,从这一点将MSP430在中断方面做得很不错,主要是提供了非常丰富的中断源,基本的有IO中断,定时器中断和一些接口中断(SPI,UART,I2C)等等。 现在我就谈谈关于MSP430中断的一些特性,主要是在项目经历中感觉比较有用的问题,跟大家分享下。 第一,MSP430中断的优先级。 MSP430支持中断优先级,但是优先级的高低怎么获知呢?它的用手手册上有个很有意思的说法,我原文引用过来“The nearer a module is to the CPU/NMIRS, the higher the priority”,翻译过来就是说离CPU/NMIRS越近,
[单片机]
MSP430有哪些可屏蔽<font color='red'>中断</font>_MSP430<font color='red'>中断</font>的优先级
ARM 处理器 ~ 中断与异常
中断与异常 定义 ARM 中的工作模式除 User 和 System 外,均为异常模式,这里的异常是广义的,包含以下三类情况 外部中断(外部中断) 由于 CPU 外部的原因而改变程序执行流程,属于异步事件,可以屏蔽 软件中断(自陷) 通过处理器拥有的软件指令,可预期地使正在执行的程序改变执行流程,以执行特定的程序 显式的事件,无条件执行 属同步事件,且不可屏蔽 例如 Motorola 68000 系列的 Trap 指令、ARM 中的 SWI、Intel 8086 中的 INT 异常 由 CPU 内部的原因(如非法指令)或外部的原因(如访存错误)引起的事件 没有对应的处理器指令 异常发生时,处理器无条件地挂起当前运行的程序,
[单片机]
ARM 处理器 ~ <font color='red'>中断</font>与异常
STM32嵌套向量中断控制器(NVIC)
嵌套向量中断控制器 一、特性 ● 68个可屏蔽中断通道(不包含16个Cortex -M3的中断线); ● 16个可编程的优先等级(使用了4位中断优先级); ● 低延迟的异常和中断处理; ● 电源管理控制; ● 系统控制寄存器的实现; 嵌套向量中断控制器(NVIC)和处理器核的接口紧密相连,可以实现低延迟的中断处理和高效地 处理晚到的中断。 嵌套向量中断控制器管理着包括内核异常等中断。 二、中断优先级 STM32中有两个优先级的概念---抢占式优先级和响应优先级。所有中断源都要指定这两种优先级。具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。当两个中断源抢占式
[单片机]
STM32开发笔记86:使用printf向串口输出数据
单片机型号:STM32L053R8T6 本文介绍使用printf向串口输出数据的方法,具体如下: 1、根据原理图确认使用哪路串口进行printf输出,并在config.h文件予以声明,程序如下: /** 配置调试信息 */ #define DEBUG_UART 2 //指定调试端口号 2、建立该串口类,从CMiniUART继承,初始化该串口,程序如下: #ifndef UART_COMMUNICATION_H_ #define UART_COMMUNICATION_H_ #include mini_uart.h #ifdef __cplusplus extern C { class CUart
[单片机]
STM32开发笔记86:使用printf向<font color='red'>串口</font>输出数据
【ARM学习笔记】ARM中断嵌套模式理解
之前一直是做DSP,DSP上有中断嵌套,为了保证在多中断的情况下终端不丢失,在读取完硬件数据后会重新开启中断。因此想当然的以为ARM架构也存在这样一种根据优先级的抢占机制。但是事实上不是的,ARM架构中只有FIQ模式才能打断IRQ中断模式。而内核中,为了防止中断丢失直接在SVC模式下执行中断服务程序。 以下是来自韦东山老师的一盘文章: 几天前一个学生问我ARM中断嵌套的问题,我才发现原来在我心中理所当然的事对学生来说理解实属不易。 ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。 我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin。在ARM的cpsr
[单片机]
串口通信的理解
串口通信,可以理解为打开文件,写文件,读文件,关闭文件 使用的是系统函数 open,write,read,close函数 char path = dev/ser1 ; if ( ( fd = open ( path, O_RDWR,S_IRUSR | S_IWUSR) ) != -1 ) 串口通信首先要设置波特率、奇偶校验、数据位数、停止位。 串口通信数据,一般会写成共用体的形式
[单片机]
80c51是几位单片机 80c51单片机有几个中断
  80c51是几位单片机   80C51是一种8位微处理器,也被称为8051,由Intel公司推出。它是最早的商用单片机之一,由于它的简单易用、灵活可靠,被广泛应用于许多嵌入式系统中。在80C51系列中,最常见的型号包括AT89C51和AT89S52等。   80c51单片机寻址范围有多少   80C51单片机的寻址范围取决于其具体的型号和存储器结构。在最常见的AT89C51和AT89S52型号中,其寻址范围如下:   内部RAM寻址范围:0x00-0x7F(128字节)   内部ROM寻址范围:0x0000-0xFFFF(64KB)   特殊功能寄存器(SFR)寻址范围:0x80-0xFF(128字节)   外部扩展RAM
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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