【ATSAMG53 Xplained Pro】-使用笔记6 —中断分析 好久没发帖了,今天继续未尽的事业,探讨下中断的有关问题,请大家批评指正啊。
中断是一种发生了一个外部的事件时调用相应的处理程序的过程。因而十分有必要对ATSAMG53处理器的中断功能进行一番详细的研究。 1、中断控制器简介 ATSAMG53的中断控制器NVIC全称Nested Vectored InterruptController(嵌套向量中断控制器),特性: (1)一共47个可屏蔽中断 (2)16个优先级 (3)动态设置中断优先等级 (4)优先级分组:选择抢占中断级别和非抢占中断级别 (5)支持尾链和迟到的中断:连续的中断处理没有连续中断的状态保存和和恢复的开销 (6)进入中断时处理器状态自动保存,出中断状态自动恢复,没有额外的指令开销。 2、中断标示及编程方法 ATSAMG53的47个中断采用peripheral identifier进行标示,Datasheet中的 8.15节表Table 8-3列出相应的中断。中断的编程主要采用CMSIS函数(Cortex Microcontroller SoftwareInterface Standard),如下表可以采用如下的函数,设置中断优先级、使能、禁止、挂起等。
3、中断和异常的关系 ATSAMG53中的异常Exceptions和中断Interrupts是两个比较容易混淆的概念,笔者当初以为这两个是等效的两种概念,其实不然,异常的种类有如下:Reset 、Non Maskable Interrupt 、Hard fault、Memory Management Fault 、Bus Fault、Usage Fault、SVCall、PendSv、SysTick、Interrupt(IRQ)。异常的概念要广包含了中断。本文讨论的中断只是中断而不是异常,2中介绍的中断的编程方法也仅使用于中断,虽然只是某些函数适用于异常(如NVIC_SetPriority函数适用于异常 ),但是还是建议大家谨慎的使用。 针对以上的异常的处理函数分别如下 中断服务函数:中断IRQ0~IRQ46 故障处理函数:Hard fault, memory management fault, usage fault, bus fault 系统处理函数:NMI, PendSV, SVCall SysTick 4、设计一个按键中断,当按键按下,则进入PIOA中断。 首先设定引脚方向(输入)、模式(上拉)、检测模式(下降沿)。
设置中断的优先级,使能中断控制器,再使能PIO中断外设。
使能PIO中断外设的详细函数,如下:
重写中断服务函数。
完成如上的步骤后,按动开发板上的SW0就可以进入PIOA的中断了。
|