原创 PIC24HJ单片机自学笔记_中断延时与设置

2014-1-7 07:30 1055 8 8 分类: MCU/ 嵌入式 文集: PIC24HJ单片机自学笔记
单周期指令的中断延时,四步完成:
  • 发生中断,标志状态位有效,此时完成之前的那条指令。
  • 保存PC
  • 取向量号
  • 压入之前的中断优先级SRL
如果是双周期指令,如果中断发生在第一个周期,则必须完成整条指令,然后开始,如果发生在后一个指令周期,同上面的单周期指令。

中断返回:
  • 中断完成以后,执行RETFIE这条双周期指令指令,在指令表中,#of cycles=3(2).
  • 与此同时,PC和SRL被取出来。
  • 然后执行一个NOP
  • 第四步,返回到原来的PC值开始执行。
一些特殊的延时:
跟PSV有关的,或者出现指令堵塞时候,会有两倍的单指令和双指令的延时,具体内容看数据存储器中关于PSV的介绍。

中断控制和状态寄存器:
  • INTCON1:包含嵌套使能,和陷阱状态
  • INTCON2:包含AIVT和DISI使能,以及5个外部中断的中断极性。
  • IFSX:硬件置位软件清零。
IFSX的列表如下:
20140107072908590.jpg

  • IECX:使能
20140107072921615.jpg
这个列表和上面的标志位置是一样的。
  • IPCX:优先级
20140107072937279.jpg

  • SR:这个不是中断硬件相关的寄存器,包含IPL2~0用来设置CPU的优先级。
  • CORCON:这个不是中断硬件相关的寄存器,包含IPL3用来设置CPU的优先级。
具体的位定义可以查看芯片的头文件,有详细的位定义,也可以查看datasheet和section6的详细介绍。

中断设置步骤:
  • 初始化
    • 如果要使用中断嵌套,使能NSTDIS位
    • 设置优先级
    • 清标志
    • 使能中断
  • 中断服务程序
不同的编译器,程序设置不同,C30编译器中,只要记得清标志即可,而汇编就麻烦一下,要RETFIE和保存PC,SRL和CPU的优先级。

  • 陷阱中断程序:同上面的终端服务程序,也要记得清标志
  • 中断关闭:从PUSH当前SR值,或者强制CPU的优先级为7即可。DISI指令只对1~6的优先级有效。
使能和去使能中断的程序如下:

20140107073000788.jpg
















文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条