首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Xilinx FPGA嵌入式开发(三)— XPS中的中断处理模块

Xilinx FPGA嵌入式开发(三)— XPS中的中断处理模块

XPS intc中断处理模块:端口说明:模块作为一个32位宽的PLB从设备连接到PLB总线上。模块内部有8个寄存器,因此PLB地址空间最少为32,大的地址空间可减少译码逻辑,提高系统性能。寄存器均32位宽,只能使用字访问方式,具体地址参见手册P10。单个模块提供最多32个中断源输入,通过多个IP模块级联,允许更多的中断输入。  中断请求输入端口Intr[(C_NUM_INTR_INPUTS-1) : 0],连到外设中断输出上,其中Intr[0]优先级最高,具体连接方式参见下面的“参数说明”。中断请求输出端口irq连接到MB模块中断输入管脚。MER寄存器有效位宽度为2bit,IVR寄存器有效位宽度为32bit,其余6个寄存器有效位宽度由C_NUM_INTR_INPUTS确定。参数说明:C_NUM_INTR_INPUTS设置中断输入端口数量,第一个输入为中断0,对应于各寄存器LSB位(除了IVR和MER),优先级最高。C_KIND_OF_INTR、C_KIND_OF_EDGE、C_KIND_OF_LVL用于设置外部输入中断信号的极性(高或低)和类型(电平或沿)。连接到模块的每个中断输入均可为高低电平或上升/下降沿。这几个参数是模块添加输入中断时,根据输入中断的类型进行自动设置,简介如下:系统中其它IP核的中断输出口类型(高低电平/上升下降沿)在XPS->System Assembly view->Port->Sensitivity可看到,一般是固定的,不能改变;外部管脚也可配置成中断输入管脚(XPS->System Assembly view->Port->Class),然后在Sensitivity中设置中断类型。在System Assembly view->Port->Net,单击模块Intr行打开添加外部中断对话框,只要系统中某IP模块具有中断输出管脚,即使没有设置为连接,相应的中断也会显示在对话框左边,如果在对话框中加入此中断,则自动把相应IP模块的中断管脚连接到中断处理模块中。加入中断后,模块自动识别输入中断的数量和每个中断的类型,然后自动配置C_NUM_INTR_INPUTS、C_KIND_OF_INTR、C_KIND_OF_EDGE、C_KIND_OF_LVL这四个参数,在XPS中打开IP配置界面可看到这几个参数(在EDK12.2中显示的总为缺省值,估计是显示bug)。控制方式:通过控制8个寄存器即可。所有中断可通过IER分别屏蔽或通过MIE全部屏蔽。上电或复位后,所有中断输入和中断请求输出均被禁止,因此需要进行设置IER、MER的ME位开启相应请求输出,设置MER的HIE位开启外部硬件中断输入。读取ISR来获取检测到中断信号的输入端口;读取IPR获取有中断信号且被IER使能的输入端口;读取IVR获取最高优先级、有中断信号且被IER使能的输入端口;只有写入1到IAR相应位才能清除中断,清除中断后相应位中断输入仍有效则产生一个新的中断。所有的中断输入进行“或”组合成一个irq输出,如果多个中断输入存在,清除一个后,其它不清楚,则剩余的仍会产生一个新的中断输出。Interrupt Status Register(ISR):读取时,某位为1表示相应中断请求输入端口有中断发生。ISR的相应位不受IER的相应位设置影响,即外部中断输入条件满足且MER寄存器的HIE位为1时,即使IER的某位没有使能,ISR的相应位也会被设置。MER寄存器的硬件中断使能位HIE为0时,外部中断输入无效,此时可以通过软件对ISR写,此时如果对某位写入1,则MER的ME、HIE为1时且IER相应位为1,可产生一个中断以用于测试,HIE为1时软件不能写ISR。Interrupt Pending Register(IPR):可选寄存器,只读。通过C_HAS_IPR=0来设置启用。某位的值为ISR和IER相应位的与,为1表示相应中断出现且被使能。Interrupt Enable Register(IER):某位设为1使能ISR相应的位产生中断输出。某位为0并不是禁止了相应的中断,也不会清除相应的中断。如果某中断输入有效,那么ISR相应的位变为1,如果此时IER相应位为0,不产生中断输出,但是中断条件还在,只要还没有通过IAR清除相应的中断,一旦IER相应位变为1,则MER的ME、HIE为1时立即产生中断输出。Interrupt Acknowledge Register(IAR):只写,对某位写入1清除相应输入端口产生的中断请求,也清除ISR相应位和它自己的相应位。Set Interrupt Enables(SIE)、Clear Interrupt Enables (CIE):对SIE某位写1,则IER相应位置1,对CIE某位写1,则IER相应位置0;对SIE、CIE某位写0,则无任何效果,这种方式对IER置1/清零比较方便,单步操作即可。如果直接对IER某位置1/清零,由于寄存器均32位读写方式,为不影响其它位,需把IER读取出来,然后相应位置1/置0,最后写IER,需要三步操作。Interrupt Vector Register(IVR):只读,可选寄存器,通过设置C_HAS_IVR=0来设置启用。值为最高优先级的有中断发生且被使能的中断输入端口序号。如果没有符合条件的中断则值为全1。例如int3中断输入端口检测到有效中断信号,int0、int1、int2没有,则读取IVR返回值为3,如果int0也有效返回值0,如果没有中断有效,返回值全1。Master Enable Register(MER):两位有效位宽,可读写。1位为硬件中断使能Hardware Interrupt Enable(HIE),0位为主使能Master Enable(ME)。对ME位写0屏蔽所有的中断输出,实质上是禁止irq输出,写1使能irq输出。HIE只能写一次,PLB总线复位后此位为0,此时软件可写入ISR相应位1,然后写入HIE为1来产生中断以用于测试。HIE写入1后此位在下次复位前不能再次被改变,且HIE为1时软件不能写ISR。 文章来源:seadoncas的专栏:http://blog.csdn.net/seadoncas
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表