工具/软件:Code Composer Studio
我一直在尝试让计时器 A 正常工作、但没有运气。 实际上、当我执行代码时、电路板看起来会冻结。 我一直在搜索有关如何使计时器正常工作的几个小时的示例、我发现每个示例都是不同的、我无法让任何计时器正常工作。 我还尝试使用 driverlib.h、但即使包含它、我也会得到所有常量的错误、表示它们未定义。 有人能看到我做了什么错吗?
枚举按钮状态{
READY = 0、
init_cycle = 1、
full_cycle = 2
};
enum buttonState button1State = READY;
enum buttonState button2State = READY;
void TA0_0_IRQHander (void){
switch (button1State){
case init_cycle:
button1State = full_cycle;
中断;
默认值:
button1State = READY;
}
switch (button2State){
case init_cycle:
button2State = full_cycle;
默认值:
button2State =就绪;
}
TA0CTL &=~1; //确认中断
TA0CCTL0 &=~1; //确认中断
//NVIC_ICPR0 =(1<<8);//清除 NVIC 中的中断挂起标志
}
void main (void)
{
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD; //停止看门狗计时器
//本节设置按钮和 UART
//配置去抖计时器
TA0CTL &=~0x0030; //停止计时器 A0
TA0CTL |= 0x0004; //复位计时器
TA0CTL &=~0x0004; //结束复位
TA0CTL = 0x0202; // SMCLK、1分频、启用定时器、启用中断
TA0CCTL0 = 0x0010; //断开 I/O 引脚、比较模式、启用中断
TA0CCR0 = 3745; //我认为这应该是~10ms
TA0EX0 &=!0x0007; //时钟分频器- 3MHz/8 = 375kHz (2.67uS)
NVIC_setpriority (TA0_0_IRQn、2);
NVIC_EnableIRQ (TA0_0_IRQn);
//此部分启用其他中断
_enable_interrupt ();
while (1){
//主循环
}
}
注意:这里是我尝试过的其他一些代码、我认为其中的大部分用于 driverlib
//中断寄存器中断(INT_TA0_0、TA0_0_ISR_Hander);
//NVIC_ISER0 =(1<<8); //启用计时器中断
// TA0CTL |= 0x0010; //开始计时器计数直到 TA0CCR0
// const Timer_A_UpModeConfig upConfig =
// {
// TIMER_A_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
// TIMER_A_CLOCKSOURCE_DEVIDER_1、 // SMCLK/1 = 3MHz
// 45000、 // 15ms 去抖周期
// TIMER_A_TAIE_INTERRUPT_DISABLE, //禁用计时器中断
// TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE, //启用 CCR0中断
// TIMER_A_DO 清除 //清除值
// };
/*停止 WDT 并禁用主中断*/
// map_WDT_A_holdTimer();
// map_Interrupt_disableMaster ();
/*将主时钟初始化为3MHz */
// map_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 3);
// map_CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_clock_divider);
// map_CS_initClockSignal (CS_HSMCLK、CS_DCOCLK_select、CS_clock_divider);
// map_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_clock_divider);
// map_Timer_a_configureUpMode (timer_A0_BASE、&upConfig);
// map_Interrupt_enableInterrupt (INT_TA0_0);
// map_GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);
// map_SysTick _enableModule();
// map_SysTK_setPeriod (1500000);
// map_Interrupt_enableSlepOnIsrExit();
// map_SysTick _enableInterrupt ();
// CSKEY = CSKEY _VAL; //解锁 CS 模块以进行寄存器访问
// CSCTL0 = 0; //重置调优参数
// CSCTL0 = DCORSEL_3; //将 DCO 设置为12MHz (标称值、8-16MHz 范围的中心)
// CSCTL1 = SELA_2 | SELs_3 | SELM_3; //选择 ACLK = REFO、SMCLK = MCLK = DCO
// CSKEY = 0; //锁定 CS 模块,防止意外访问
// NVIC_ISER0 = 1 <<(INT_TA0_0 - 16)& 31);
// TA0CTL = tassel_2 + MC_1 + TACLR;// SMCLK、向上、清零
// TA0CCR0 = 12000;
// TA0CCTL0 = CCIE;
// map_Interrupt_enableMaster ();