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

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

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

在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。

结语

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

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

网站地图

Top