我正在尝试实现以下目标:
当 TAR 回零事件发生时、我想让 LED 闪烁;当通道1的比较事件发生时、我也想让红色 LED 闪烁。
通道1和 TAR 共用同一个矢量定时器_A1_vector、因此我们只需要一个 ISR。 此陈述是否正确?
我的实施:
#include
#define redLED BIT0 //在 P1.0处为红色
#define greenLED BIT7 //在 P9.7
处为绿色(void)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
PM5CTL0 &=~LOCKLPM5;//启用 GPIO 引脚
P1DIR |= redLED;
P9DIR |=绿色 LED;
P1OUT &=~Ω reddLED;
P9OUT &=~绿色 LED;
TA0CCR1 =(12000-1);
TA0CCTL1 &=~CCIFG;
TA0CCTL1 |= CCIE;
TA0CTL = tassel_1 | ID_0 | MC_2 | TACLR;
while (1){}
返回0;
}
#pragma vector = TIMER0_A1_vector
__interrupt void T0A1_ISR ()
{
if ((TA0CTL & TAIFG)!= 0){
P1OUT ^=绿色 LED;
TA0CTL &=~TAIFG;
}
if ((TA0CCTL1 & CCIFG)!= 0){
P1OUT ^=红色 LED;
TA0CCR1 += 12000;
TA0CCTL1 &=~CCIFG;
}
}
//将 ACLK 配置为32KHz 晶振
void CONFIG_ACLK_TO_32KHz 晶振(){
//默认情况下、ACLK 在5MHz/128 = 39KHz 的 LFMODCLK 上运行
//将引脚重新路由至 LFXIN/LFXOUT 功能
PJSEL1 &=~BIT4;
PJSEL0 |= BIT4;
//等待振荡器故障标志保持清零
CSCTL0 = CSKEY;//解锁 CS 寄存器
执行{
CSCTL5 &=~LFXTOFFG;//本地故障标志
SFRIFG1 &=~OFIFG;//全局故障标志
} while ((CSCTL5 & LFXTOFFG)!= 0);
CSCTL0_H = 0;//锁定 CS 寄存
器返回;
}