dsPIC33F具有5个非屏蔽陷阱源和67个中断源,为每个中断源分配7个等级的优先级。中断向量表(IVT)位于程序存储器中,起始单元地址是0x000004。每个中断向量都包含24位地址,保存中断服务程序(ISR)的起始地址。CPU负责读取中断向量表并将中断向量中的地址传递给程序计数器。
中断处理需要4个指令周期。第1个指令周期为外设中断发生后的指令周期,在该指令周期中完成当前指令操作并将中断标志状态位置1;第2个指令周期中PC和SRL寄存器的内容被存入临时缓冲寄存器,并执行一个NOP操作,以保持与双周期指令中所进行的序列的一致性;在第3个周期中,PC被装入中断源的向量表地址并将程序跳转到ISR的起始地址;在第4个周期中,PC被装入ISR地址,并执行NOP操作。然后程序运行ISR地址中的内容。
与中断处理有关的寄存器包括:
1)状态寄存器(SR)和内核控制寄存器(CORCON):其中的IPL<2∶0>和IPL3一起表示中断优先级状态位。
2)中断控制寄存器1(INTCON1):定义了中断嵌套禁止(NSTDIS)位,以及用于处理陷阱源的控制和状态标志。
3)中断控制寄存器2(INTCON2):控制外部中断请求信号的行为和备用向量表的使用。
4)中断标志状态寄存器(IFSx):对应每个中断源的中断请求标志,其中“x”表示寄存器编号。每个中断源都有一个状态位,它们由各自的外设和外部信号置1,并通过软件清零。
5)中断允许控制寄存器(IECx):对应每个中断源的中断允许控制位,其中“x”表示寄存器编号。这些控制位用于分别允许来自外设或外部信号的中断。(www.xing528.com)
6)中断优先级控制寄存器(IPCx):为每个中断源设置中断优先级。
在默认情况下中断是可嵌套的,任何正在处理的ISR都可以被另一个具有更高用户分配优先级的中断源中断。通过将NSTDIS位(INTCON1<15>)置1禁止中断嵌套。当NSTDIS位被置1时,所有处理中的中断将通过设置IPL<2∶0>=111强制CPU的优先级为7,此时将有效屏蔽其他所有中断源,直到执行RETFIE指令。当中断嵌套被禁止时,用户分配的中断优先级无效,除非是为了解决同时等待处理的中断之间的冲突。当禁止中断嵌套时,IPL<2∶0>位变成只读,这将防止用户软件将IPL<2∶0>设置为一个较低的值,从而防止其有效地重新使能中断嵌套。
对于中断的配置通常采用如下步骤:
1)根据是否需要中断嵌套来设置NSTDIS控制位(INTCON1<15>)。
2)通过写相应的IPCx控制寄存器中的控制位选择中断源的用户分配优先级,优先级取决于特定的应用和中断源类型。
3)在相关的IFSx状态寄存器中清零与外设相关的中断标志状态位。
4)通过在相应的IECx控制寄存器中置1打开与中断源相关的中断允许控制位,使能中断源。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。