原创
PIC24HJ单片机自学笔记_中断延时与设置
单周期指令的中断延时,四步完成:
- 发生中断,标志状态位有效,此时完成之前的那条指令。
- 保存PC
- 取向量号
- 压入之前的中断优先级SRL
如果是双周期指令,如果中断发生在第一个周期,则必须完成整条指令,然后开始,如果发生在后一个指令周期,同上面的单周期指令。
中断返回:
- 中断完成以后,执行RETFIE这条双周期指令指令,在指令表中,#of cycles=3(2).
- 与此同时,PC和SRL被取出来。
- 然后执行一个NOP
- 第四步,返回到原来的PC值开始执行。
一些特殊的延时:
跟PSV有关的,或者出现指令堵塞时候,会有两倍的单指令和双指令的延时,具体内容看数据存储器中关于PSV的介绍。
中断控制和状态寄存器:
- INTCON1:包含嵌套使能,和陷阱状态
- INTCON2:包含AIVT和DISI使能,以及5个外部中断的中断极性。
- IFSX:硬件置位软件清零。
IFSX的列表如下:
这个列表和上面的标志位置是一样的。
- SR:这个不是中断硬件相关的寄存器,包含IPL2~0用来设置CPU的优先级。
- CORCON:这个不是中断硬件相关的寄存器,包含IPL3用来设置CPU的优先级。
具体的位定义可以查看芯片的头文件,有详细的位定义,也可以查看datasheet和section6的详细介绍。
中断设置步骤:
- 初始化
- 如果要使用中断嵌套,使能NSTDIS位
- 设置优先级
- 清标志
- 使能中断
- 中断服务程序
不同的编译器,程序设置不同,C30编译器中,只要记得清标志即可,而汇编就麻烦一下,要RETFIE和保存PC,SRL和CPU的优先级。
- 陷阱中断程序:同上面的终端服务程序,也要记得清标志
- 中断关闭:从PUSH当前SR值,或者强制CPU的优先级为7即可。DISI指令只对1~6的优先级有效。
使能和去使能中断的程序如下:
文章评论(0条评论)
登录后参与讨论