首页 理论教育 ARMCortexM4固件中断与定时控制

ARMCortexM4固件中断与定时控制

时间:2023-11-17 理论教育 版权反馈
【摘要】:学习本章内容前,先介绍一下系统定时器和中断控制器。②可作为使用系统时钟的高速报警定时器。当发生某种事件时,CPU将暂停当前的程序执行,转而去处理中断事件。并可软件设置7个异常和78个中断的8级优先级。中断控制器API提供了一组处理NVIC的函数。

ARMCortexM4固件中断与定时控制

学习本章内容前,先介绍一下系统定时器和中断控制器。

(1)系统定时器(SysTick)

TM4C123GH6PM控制器内核集成了一个系统定时器(SysTick),它是一个简单的定时器,为Cortex-M微处理器NVIC控制器中的一部分,其作用是为RTOS提供一个周期性中断。另外它也可用于其他简单的定时操作,提供一个简单的、控制灵活的24位递减计数器,还具有写入即清零、过零自动重载等特性。在调用SysTick中断处理程序时,会通过NVIC自动清除SysTick的中断源。

1)系统定时器的应用如下:

①作为RTOS的节拍定时器,可按编程频率定时触发,调用系统定时器处理子程序。

②可作为使用系统时钟的高速报警定时器。

③速率可变的报警或信号定时器。

④可作为简易计数器,用于测量任务的完成时刻、总体耗时等。

⑤可实现依据失配/匹配周期的内部时钟源控制。

2)系统定时器所包含的3个寄存器如下:

①控制和状态(STCTRL):控制和状态计数器用于配置时钟、使能计数器、使能中断与确定计数器的状态。

②重载值(STRELOAD):计数器的重载,用于计数器的重装值(Wrap Value)。

③当前值(STCURRENT):计数器的当前值。

3)工作过程描述如下:

在使能系统定时器后,计数器对于每个时钟将递减一次,从重载值依次递减到0,然后在下一个时钟沿翻转,再对每个时钟递减一次,周而复始。如果将STRELOAD寄存器清零,将在下次重载时禁止该计数器。当计数器递减到0时,COUNT标志位将被置位。读取COUNT标志位后将使其自动清零。

若写STCURRENT寄存器,可将其清零,并且还可清除COUNT标志位。写该寄存器时不会触发SysTick异常逻辑,而读取该寄存器时,其返回值是此寄存器被访问时刻的内容。

SysTick计数器按照系统时钟或精确内部振荡器(PIOSC)4分频运行。若在某些低功耗模式下停止供给该时钟信号,将会使系统定时器上的计数器也会停止运行。在SysTick控制和状态寄存器(STCTRL)中置位CLK_SRC位,并保证深度睡眠时钟配置寄存器(DSLP-CLKCFG)中的PIOSCPD位被清零,以便SysTick在深度休眠模式中保持运行状态。在软件访问SysTick的寄存器时,应保证始终采用字对齐操作访问。

4)复位后的操作。在复位时,由于SysTick计数器的重载值和当前值未被定义,则Sy-sTick计数器的正确初始化过程如下:(www.xing528.com)

①编程STRELOAD寄存器中的值。

②写入任意值到STCURRENT寄存器中使其清零。

③将STCTRL寄存器配置成所要求的操作。

注意:在调试时,若处理器暂停,该计数器将不会递减。

此驱动程序包含在driverlib/systick.c中,driverlib/systick.h包含应用程序使用的API的定义。

(2)嵌套式向量化中断控制器(NVIC)

中断为CPU实时地处理内部或外部事件的一种机制。当发生某种事件时,CPU将暂停当前的程序执行,转而去处理中断事件。当中断服务程序结束后,又会返回到前面程序的中断处,重新开始往下执行。

TM4C123GH6PM控制器包含ARM嵌套向量中断控制器(Nested Vectored Interrupt Con-troller,NVIC)。NVIC和TM4C处理器在处理模式中可对所有异常进行优先级划分和处理。且在处理异常时处理器状态将会自动保存到堆栈中,而当中断服务程序(ISR)结束时又会自动恢复。中断向量的读取与状态保存同步,可高效地进入中断。处理器支持尾链技术,背对背的中断执行可免去入栈和出栈的时间开销。并可软件设置7个异常(系统处理器)和78个中断的8级优先级。

中断处理程序的配置方式:在编译时静态配置;在运行时动态配置。

静态配置可通过编辑使能代码中的中断程序表来实现。在静态配置时,必须首先通过使能IntEnable()函数才能开启NVIC中断,处理器才可响应该中断。

对于中断在运行时的动态配置,可使用IntRegister()或相关驱动函数进行。当使用In-tRegister()时,首先必须使能中断;当使用单个相关函数时,IntEnable()由驱动函数调用,而无需由程序来调用。

中断控制器API提供了一组处理NVIC的函数。该函数用于使能和禁止中断、注册中断处理程序和设置中断优先级。

此驱动程序包含在driverlib/interrupt.c中,driverlib/interrupt.h包含应用程序使用的API的定义。

➢本章主要内容:

➢中断控制器

➢系统定时器

➢系中统断及定系时统器定中断时器实例固件库函数(见附录E)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈