EDN China > 技术文章 > 可编程器件 > PLD > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

在CPLD管理下实现高效多串口中断源

来源:四川大学/作者:黄 郑 夏建刚?? 2007年04月09日 ?? 收藏0

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

  ②在CPLD中设计一个8位状态机。状态机由XCLK驱动,XCLK通过分频生成100kHz时钟,即Δt=10μs。

  3 设计构想

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

设计构想

  ①INTREQ为n个中断的或;

  ②CPU对INTEN只写,操作过程分3步。
?
??????? 第1步,中断安装后设置INTEN=1。?

  第2步,进入中断服务程序后CPU设置INTEN=0。

  第3步,退出中断服务程序的最后指令。

设计构想

  outportb(0x20,0x20);

outportb(INTEN_PORT,0x01);//INTEN_PORT为INTEN的口地址

  ③中断响应的时序如图3所示。 在ISR置位期间,有中断请求INTREQ产生时,此时如果触发了中断,则会使上次中断服务无法完成,因而造成中断丢失。因此,在ISR配置期间,将中断允许INTEN设置为0,防止其它中断请求触发中断,并用INTREQ锁存未被响应的中断请求。退出中断服务后,得中断允许INTEN设置为1,保证其它中断请求能够被响应,并延迟50μs,以确保此次中断服务完全退出。
?
??????? ④中断控制寄存器的状态图(描述8位状态机的转换)如图4所示。 在退出中断时,将INTEN设置为1,从状态S3转换到状态S0。时间上延迟了5Δt=50μs,确保当前中断完全退出。INTREQ锁存中断请求,以确保下一中断能获得响应。
?
??????? 4 软件设计

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

  上面基于嵌入式系统的精简特性,提出了一种高效多串口中断源的实现方案;大大节省了资源,确保中断请求的无漏检测和服务,并有效地解决了多个串口共享同一中断源时所造成的冲突和丢失等问题。


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

嵌入式系统? RS232? 多串口? CPLD 中断?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈