工具/软件:Code Composer Studio
大家好、
我的任务是编写一个基于计时器的中断代码(我是这个代码的初学者)。 至于开始、我尝试编译了 TI 为 TM4C129exl 提供的 timers.c 代码。
但是、似乎没有触发计时器 IntHandlers (添加了几条 printf 线对此进行调试)。 我想知道我是否需要为此进行任何跳线设置或返工(我的跳线处于默认设置)。
已连接终端输出和代码:
// // // timers.c -计时器示例。 // //版权所有(c) 2013-2017 Texas Instruments Incorporated。 保留所有权利。 //软件许可协议 // //德州仪器(TI)提供此软件仅供 和//仅供 TI 的微控制器产品使用。 软件归 // TI 和/或其供应商所有,并受适用的版权 //法律保护。 您不能将此软件与"病毒"开源 //软件组合在一起以形成更大的程序。 // //此软件按“原样”提供,且存在所有故障。 //对于 本软件,不作任何明示、暗示或法定的保证,包括但不限于对适销性和适用性的暗示保证//特定用途。 在任何 //情况下、TI 不对任何 原因造成的特殊、意外或必然//损害负责。 // //这是 EK-TM4C129EXL 固件包的版本2.1.4.178的一部分。 //// ***************** #include #include #include "inc/hw_ints.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/fpu.h" #include "driverlib/gpio.h"#include "driverlib/interrupt.h" #include "driverlib/driverlib.rom" #include "driverlib/driverlib"#driverlib.driver.h"#include"#driverlib/driverlib.driverlib#driverlib.driverlib.driver.h // //! \addtogroup example_list //!计时器(计时器)
//! //! 此示例应用演示了如何使用计时器来生成 //! 周期性中断。 一个计时器设置为每秒中断一次和 //! 另一个中断每秒中断两次;每个中断处理程序将切换 //! 它自己的指示器通过 UART。 //! //! UART0、连接到虚拟串行端口、运行速度为115、200、8-N-1、 //! 用于显示来自此应用程序的消息。 //// ***************** // // ////系统时钟速率,单位为 Hz。 //// ************* uint32_t g_ui32SysClock; //********* // //包含 UART 上显示的中断指示符当前值的标志//。 //// ***************** uint32_t g_ui32Flags; //********* // //如果驱动程序库遇到错误,则调用的错误例程。 //// ***************** #ifdef debug void __error__(char *dpcFilename、uint32_t ui32Line) { #endif //********* // //第一个定时器中断的中断处理程序。 //// ***************** void Timer0IntHandler (void) { UARTprintf ("调试:输入的 timer0\n"); char cone、cTwo; // //清除计时器中断。 // ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT); // //切换第一个计时器的标志。 // HWREGBITW (&g_ui32Flags、0)^= 1; // //使用标志切换此计时器的 LED // GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、g_ui32Flags); // //更新中断状态。 // ROM_IntMasterDisable(); Cone = HWREGBITW (&g_ui32Flags、0)? “1”:“0”; cTwo = HWREGBITW (&g_ui32Flags、1)? “1”:“0”; UARTprintf ("\RT1:%c T2:%c"、cone、cTwo); ROM_IntMasterEnable(); } //********* // //第二个计时器中断的中断处理程序。 //// ***************** void Timer1IntHandler (void) { UARTprintf ("调试:输入的 Timer1\n"); char cone、cTwo; // //清除计时器中断。 // ROM_TimerIntClear (Timer1_base、timer_TINA_TIMEOUT); // //切换第二个计时器的标志。 // HWREGBITW (&g_ui32Flags、1)^= 1; // //使用标志切换此计时器的 LED // GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、g_ui32Flags); // //更新中断状态。 // ROM_IntMasterDisable(); Cone = HWREGBITW (&g_ui32Flags、0)? “1”:“0”; cTwo = HWREGBITW (&g_ui32Flags、1)? “1”:“0”; UARTprintf ("\RT1:%c T2:%c"、cone、cTwo); ROM_IntMasterEnable(); } //********* // //配置 UART 及其引脚。 这必须在 UARTprintf()之前调用。 //// ***************** void ConfigureUART (void) { // //启用 UART 使用的 GPIO 外设。 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); // //启用 UART0。 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0); // //为 UART 模式配置 GPIO 引脚。 // ROM_GPIOPinConfigure (GPIO_PA0_U0RX); ROM_GPIOPinConfigure (GPIO_PA1_U0TX); ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); // //初始化控制台 I/O 的 UART // UARTStdioConfig (0、115200、g_ui32SysClock); } //************* // //此示例应用演示了如何使用计时器生成 //周期性中断。 //// ***************** int main (void) { // //将时钟设置为直接从频率为120MHz 的晶体运行。 // G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); // //初始化 UART 和写入状态。 // ConfigureUART(); UARTprintf ("\033[2JTimers 示例\n"); UARTprintf ("t1:0 t2:0"); // //启用用于板载 LED 的 GPIO 端口。 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPION); // //为 LED (PN0和 PN1)启用 GPIO 引脚。 // ROM_GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0 | GPIO_PIN_1); // //启用此示例使用的外设。 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_Timer1); // //启用处理器中断。 // ROM_IntMasterEnable(); // //配置两个32位周期定时器。 // ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE); ROM_TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE); ROM_TimerLoadSet (TIMER0_BASE、TIMER_A、g_ui32SysClock); ROM_TimerLoadSet (Timer1_base、timer_A、g_ui32SysClock / 2); // //设置计时器超时的中断。 // ROM_IntEnable (INT_TIMER0A); ROM_IntEnable (INT_TIMER1A); ROM_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT); ROM_TimerIntEnable (Timer1_base、timer_TINA_TIMEOUT); // //启用计时器。 // ROM_TimerEnable (TIMER0_BASE、TIMER_A); ROM_TimerEnable (Timer1_base、timer_A); // //在计时器运行时永久循环。 // while (1) { } }