主题中讨论的其他器件:TM4C123GH6PM
工具/软件:TI C/C++编译器
大家好、我想使用这个板上的周期定时器 TM4C123gxl 来生成一个10Hz、50%占空比的 LED 灯。
但是、我将以下代码烧写到电路板上、只是为了看到应该"闪烁"的 LED 灯不能正常工作。
LED 灯不是以10Hz 的频率"闪烁"、而是以相同的亮度持续发光。
中断必须由处理器处理、否则 LED 将不会首先亮起。
因此、我假设计时器中断的代码段只输入一次、可能是因为我对计时器的重新加载值执行了错误操作。
有人可以帮帮我吗? 我已经被这个问题困扰了一段时间。
#include "driverlib/sysctl.h"
#include "driverlib/timer.h"
#include "inc/tm4c123gh6m.h"
#include "driverlib/interrupt.h"
静态无符号长整型 ulPeriod;
空 Timer0IntHandler (空);
空 Timer0IntHandler (空)
{
//清除计时器中断
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
//读取 GPIO 引脚和的当前状态
//写回相反的状态
IF (GPIOPinRead (GPIO_PORTF_BASE、GPIO_PIN_2))
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3、0);
其他
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);
}
void setup(){
//系统时钟以40MHz 运行
SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1_GPIO_PIN_2|GPIO_PIN_3);
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_TIMER0)){}
TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_PERIODICASE);
ulPeriod =(SysCtlClockGet ()/10)/2;
TimerLoadSet (TIMER0_BASE、TIMER_A、SysCtlClockGet ()/1000);//ulPeriod -1);
IntEnable (INT_TIMER0A);
TimerEnable (TIMER0_BASE、TIMER_A);
IntMasterEnable();
TimerIntDisable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
TimerIntRegister (TIMER0_BASE、TIMER_A、Timer0IntHandler);
TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
}
void loop(){
}