• 注册
    • 查看作者
    • PIE/CPU中断响应过程

      A、开始;

      B、PIEIFRx.y = 1 ?是,转到C,否则等待;

      C、PIEIERx.y = 1 ?是,转到D,否则等待;

      D、PIEACKx = 0 ?是,转到E,否则等待;

      E、中断请求发送到CPU;

      F、IFRx位置1;

      G、IERx = 1 ?是,转到H,否则等待;

      H、INTM = 0 ?是,转到I,否则等待;

      I、CPU响应,进入中断服务子程序前,DSP硬件自动将IFRx清0,然后将CPU内一些关键寄存器如:ST0、ST1及IER等的内容压到堆栈保存起来,随后硬件自动将IERx清0,INTM置1,以避免中断嵌套,在中断服务子程序执行完返回后,这些保存的内容会自动从堆栈中弹出,将原寄存器的内容恢复。因此ISR中不需要再进行INTM清0和IER置1操作,但必须注意的是:在ISR中执行完中断响应任务之后,返回前,必须将外设寄存器中的中断标志软件清0,这样外设中断才能再次产生;

      J、从PIE处取中断矢量,PIEIFRx.y被清除,CPU转到ISR执行。这里从PIE中断向量表中可以取到中断服务子程序的地址,它是一个32位的矢量,中断矢量被取出后,PIE模块中的中断标志PIEIFRx.y被自动清0,但该中断x对应的PIE应答位PIEACKx在中断服务子程序ISR中必须软件清0(写1清0),这样才能接受下一个外围中断。

      K、中断返回。

      func :中断服务函数入口;XINT3

      CPU响应中断,就是CPU要去执行相应的中断服务程序,其响应过程是CPU将现在执行程序的指令地址压入堆栈,跳转到中断服务程序入口地址,中断服务程序的入口地址就是中断向量,这个中断向量用2个16位寄存器存放。入口地址是22位的,地址的低16位保存在该向量的低16位,地址的高16位则保存在它的高6位,更高的10位保留。

      上图为外设复用中断向CPU申请中断的流程。

      步骤一:任何一个PIE中断组的外设或外部中断产生中断。如果外设模块内的中断被使能,中断请求将被送到PIE模块。

      步骤二:PIE模块将识别出别的PIE中断组x内的y中断(INTx.y)申请,然后相应的PIE中断标志位被锁存:PIEIFRx.y=1。

      步骤三:PIE的中断如要送到CPU需满足下面两个条件:

      1.相应的使能位必须被设置(PIEIERx.y=1)。

      2.相应的PIEACKx位必须被清除。

      步骤四:如果满足步骤三中的两个条件,中断请求将被送到CPU并且相应的响应寄存器位被置1(PIEACKx=1)。PIEACKx位将保持不变,除非为了使本组中的其他中断向CPU发出申请而清除该位。

      步骤五:CPU中断标志位被置位(CPUIFRx=1),表明产生一个CPU级的挂起中断。

      步骤六:如果CPU中断被使能(CPUIERx=1,或DBGIERx=1),并且全局中断使能(INTM=0),CPU将处理中断INTx。

      步骤七:CPU识别到中断并且自动保存相关的中断信息,清除使能寄存器(IER)位,设置INTM,清除EALLOW。CPU完成这些任务准备执行中断服务程序。

      步骤八:CPU从PIE中获取响应的中断向量。

      步骤九:对于复用中断,PIE模块用PIEIERx和PIEIFRx寄存器中的值确定响应中断的向量地址。有以下两种情况:

      1.在步骤四中若有更高优先级的中断产生,并使能了PIEIERx寄存器,且PIEIFRx的相应位处于挂起状态,则首先响应优先级更高的中断。

      2.如果在本组内没有挂起的中断被使能,PIE将响应组内优先级最高的中断,调转地址使用INTx.1。这种操作相当于处理器的TRAP或INT指令。

      CPU进入中断服务程序后,将清除PIEIFRx.y位。需要说明的是,PIEIERx寄存器用来确定中断向量,在清除PIEIERx寄存器时必须注意。

      附上百度文库一篇文章链接

      美国·加州·多拉多希尔斯
    • 26
    • 46
    • 0
    • 122
    • 0
      1点25Lv.1
      牛逼!牛逼!太牛逼了!
    • 0
      rkfokLv.1
      牛逼!牛逼!太牛逼了!
    • 0
      我代表全国人民感谢楼主的无私分享!楼主万岁!
    • 0
      666!楼主真6!
    • 0
      卧槽!卧槽!卧槽!
    • 0
      我代表全国人民感谢楼主的无私分享!楼主万岁!
    • 0
      我代表全国人民感谢楼主的无私分享!楼主万岁!
    • 0
      666!楼主真6!
    • 0
      666!楼主真6!
    • 0
      我代表全国人民感谢楼主的无私分享!楼主万岁!
    • 0
      666!楼主真6!
    • 0
      牛逼!牛逼!太牛逼了!
    • 0
      DrakingLv.1
      卧槽!卧槽!卧槽!
    • 0
      666!楼主真6!
    • 0
      曾晓Lv.1
      牛逼!牛逼!太牛逼了!
    • 0
      牛逼!牛逼!太牛逼了!
    • 0
      666!楼主真6!
    • 0
      我代表全国人民感谢楼主的无私分享!楼主万岁!
    • 0
      牛逼!牛逼!太牛逼了!
    • 0
      牛逼!牛逼!太牛逼了!
    • 0
      我代表全国人民感谢楼主的无私分享!楼主万岁!
    • 0
      卧槽!卧槽!卧槽!
    • 0
      666!楼主真6!
    • 0
      卧槽!卧槽!卧槽!
    • 0
      恬妞Lv.1
      卧槽!卧槽!卧槽!
    • 0
      牛逼!牛逼!太牛逼了!
    • 0
      shiterLv.1
      牛逼!牛逼!太牛逼了!
    • 0
      卧槽!卧槽!卧槽!
    • 0
      我代表全国人民感谢楼主的无私分享!楼主万岁!
    • 0
      666!楼主真6!
    • 0
      牛逼!牛逼!太牛逼了!
    • 0
      咽作Lv.1
      牛逼!牛逼!太牛逼了!
    • 0
      Big SaiLv.1
      666!楼主真6!
    • 0
      NY#XXLv.1
      卧槽!卧槽!卧槽!
    • 0
      卧槽!卧槽!卧槽!
    • 0
      逗比Lv.1
      卧槽!卧槽!卧槽!
    • 3
      STZGLv.1
      我代表全国人民感谢楼主的无私分享!楼主万岁!
    • 3
      我代表全国人民感谢楼主的无私分享!楼主万岁!
    • 3
      666!楼主真6!
    • 3
      本行评论带有换行

      机器人评论的时候会自动替换成换行
    • 3
      COCO56Lv.1
      牛逼!牛逼!太牛逼了!
    • 3
      牛逼!牛逼!太牛逼了!
    • 3
      卧槽!卧槽!卧槽!
    • 3
      该评论内容已被删除。
    • 3
      卧槽!卧槽!卧槽!
    • 3
      AinoeLv.1
      666!楼主真6!
    • 单栏布局 侧栏位置: