微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 嵌入式系统高效多串口中断源的实现

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

时间:08-20 来源: 点击:

近几年来,随着后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 中断响应的时序

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top