在CPLD管理下实现高效多串口中断源
[11-20 16:14:23] 来源:http://www.88dzw.com FPGA 阅读:8227次
文章摘要:(3)8259A8259A是可编程的中断控制芯片。每块芯片可管理8级向量中断,具有8条中断请求输入线IRQ0~IRQ7,1条外中断请求输出线;具有4种主要工作方式,即全嵌套、循环优先级、特定屏蔽和程序查询方式;同时,还有4种从属工作方式,即结束中断、读状态、中断请求触发和数据缓冲方式。这些工作方式可以通过初始化命令字寄存器来实现。采用全嵌套方式时,芯片初始化后不必设置操作命令字。中断请求优先级是固定的:0级最高;7级最低。接受的8个中断请求信号为边沿触发。设定0级请求对应中断号为8,直至7级请求中断号为0FH。单片工作时,实际使用020H和021H两个端口。经过中断优先级分析器选中的当前请求的
在CPLD管理下实现高效多串口中断源,标签:fpga是什么,fpga教程,http://www.88dzw.com(3)8259A
8259A是可编程的中断控制芯片。每块芯片可管理8级向量中断,具有8条中断请求输入线IRQ0~IRQ7,1条外中断请求输出线;具有4种主要工作方式,即全嵌套、循环优先级、特定屏蔽和程序查询方式;同时,还有4种从属工作方式,即结束中断、读状态、中断请求触发和数据缓冲方式。这些工作方式可以通过初始化命令字寄存器来实现。采用全嵌套方式时,芯片初始化后不必设置操作命令字。中断请求优先级是固定的:0级最高;7级最低。接受的8个中断请求信号为边沿触发。设定0级请求对应中断号为8,直至7级请求中断号为0FH。单片工作时,实际使用020H和021H两个端口。经过中断优先级分析器选中的当前请求的中断优先级。其相应的中断服务寄存器ISR位被置1,一直保持到中断服务程序在返回前发中断结束命令为止。在ISR置位期间,禁止同级或较低级的中断响应,开放较高级的中断请求。
(4)CPLD的编程
嵌入式系统都有灵活性的要求。因此,本系统选用了Lattice ispLSI系列产品,以适应不断扩展或开发新的产品以及1个硬件平台上多个品种的实现。使用可编程逻辑器件CPLD,有利于在系统设计和现场运行后对系统进行修改、调试、升级等。Lattice是带有在系统可编程(ISP)功能的可编程逻辑器件,即不需要重新修改PCB即可修改原有设计。
①在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。
上面基于嵌入式系统的精简特性,提出了一种高效多串口中断源的实现方案;大大节省了资源,确保中断请求的无漏检测和服务,并有效地解决了多个串口共享同一中断源时所造成的冲突和丢失等问题。
《在CPLD管理下实现高效多串口中断源》相关文章
- › 在CPLD管理下实现高效多串口中断源
- 在百度中搜索相关文章:在CPLD管理下实现高效多串口中断源
- 在谷歌中搜索相关文章:在CPLD管理下实现高效多串口中断源
- 在soso中搜索相关文章:在CPLD管理下实现高效多串口中断源
- 在搜狗中搜索相关文章:在CPLD管理下实现高效多串口中断源