1. 首页
  2. 编程语言
  3. 硬件开发
  4. K60芯片NVIC

K60芯片NVIC

上传者: 2020-07-30 21:22:23上传 PDF文件 402.04KB 热度 35次
K60芯片NVIC模块中断相关寄存器配置以及应用举例有分配号的。在的的页可以看到中断向量分配表,定义了各种不同的中断源所对应的中断入口地址、中断向量号、中断请求号、寄存器号以及彼此之间的关系,如图所示。Table 3-5. LPTMR interrupt vector assignmentAddressVector IRQ1NVICNVICSource moduleSource descriptionnon-IPR IPRregister registernumbernumber20x00000194101LoW Power timer图中断向量的分配这里结合的中断向量分配表,以(低功耗定时器)模块为例介绍一下寄存器的配置。模块的中断向量分配如图所示,可以看到中断入口地址为,中断向量号为,中断请求号为。那么如何确定配置中断所对应的寄存器的组号和位号呢?即使用寄存器组中的哪一个寄存器,以及该寄存器的哪个位呢?它们又和中断向量号有什么关系呢,下面分非优先级中断寄存器和优先级中断寄存器分别介绍对于非优先级中断寄存器,如上面提到的以及,组号的计算公式为,所以可以得到的非优先级中断寄存器的组号为从而得到需要使用的非优先级中断寄存器为这些寄存器都是位的,所以对应于的位号计算公式为得到确定完了组号和位号,便得到了需要设置的的非优先级中断控制寄存器及相应的位为对于优先级中断寄存器,如上所述,因为每一个寄存器可以设置个中断源的优先级,所以组号计算公式为。下面确定位号,前面讲到优先级控制需要位,另外还有位保留位,所以每个中断源需要位,因此位起始号的计算公式为得到的位起始号为。确定完了组号和位号便得到了的优先级屮断寄存器及相应的位为、应用举例通常,中断程序的处理流程为:关闭系统总中断、开启外设模块并使能该外设模块中断、配置模块中的中断寄冇器、廾总中断等儿个过程。第一步,关闭系统总中断。一般采用宏定义其本质是在内部调用句汇编代码“同样,打开总中断一般采用,本质是在内部调用一句汇编代码“第二步,开启外设模块并使能其屮断。需要设置外设模块的寄存器屮的屮断使能位。对于,需要置位控制状态寄存器的位廾模块时钟使能定时器中断第三步,配置模块的中断寄存器。需要设置中相关的中断控制寄存器,如上面提到的以及。值得注意的是,使能一个外设的中断需要完成两个步骤,首先置位(中断挂起清除寄存器),然后再置位(中断使能设置寄存器)其原因在于,在完成第二步开启并使能外设模块屮断后,外设模块便可以被触发产生屮断请求,这时如果置位(中断使能设置寄存器),程序便可以进入中断服务程序,而这并非程序编写者的本意。所以为避免出现这种情况,需要首先置位(中断挂起清除寄存器),清除已经挂起的中断,然后再置位(中断使能设置寄存器),等待下一个中断的发生。代码实现如使能中断请求确定号是否有效确定中断控制寄存器的组号置位中断挂起清除寄存器置位中断使能设置奇存器如果需要使能的中断,直接调用即可。如果要在中关闭某个中断源,只需对中断使能清除寄存器中的对应位置位即可实现代码如下确定号是否有效确定中断控制寄存器的组号置位屮断使能清除寄存器对于一个中断的所有相关寄存器的配置,除了嵌入式向量中断控制器与该中断源模块本身相关的中断控制寄存器的设置外,有时还需要设置该中断的优先级,也就是设置寄存器的相应位。例子代码如下:中断优先级为级设定优先级指针确定号是否有效确定中断优先级设置是否在范围内设置对应的另外,对于一个完整的中断程序代码,用户还需编写中断服务程序代码以及定义中断服务涵数,并在文件中声明自定义的中断服务函数,并将中断向量表中的宏定义修改为此中断服务程序的函数名,指定中断服务程序的入口地址默认的中断服务程序自定义的终端服务程序定义的中断向量函数中断服务程序示例代码如下:关闭总中断清除比较标志定时器中断次数计数开放总中断需要注意的是,由丁在本示例程序中只应用到中断,所以在以上中断服务程序中使用了关闭总中断和开放总中断操作。用户如果需要在程序中设置中断嵌套,则不能够关闭总的屮断。、总结木文介绍了飞思卡小系列的嵚套式向量中断控制器()模块的相关寄存器,以及中断向量请求号与寄有器组号和位号的对应关系,并以的低功耗定时器模块为例给出了程序示例代码。参考文献:ContexT
下载地址
用户评论