This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

定时器中断的退出为何DA输出还是不对的?

Other Parts Discussed in Thread: MSP430FG4616

串口接收参数后通过定时器控制DA输出波形,脉冲产生都是正常的,关闭的时候是这样:

串口收到h后关闭定时器,将DA输出为1.25V

实际结果是收到h后DA输出定时器的第二个中断里的值,不是DA的设置值:DAC_H_AL=0000,收到h后输出的是0000而不是串口里的DAC12_0DAT = 0x800;

烦请各位大佬帮我看看怎么修改,谢谢

定时器初始化:

void TAstart(void)//高频使用的定时器TA
{
TACTL = TASSEL_2 + MC_1 + TAIE + ID_3; //默认的smclk为8m,3分频后1m,一个tick为1us
TACCTL1 |= CCIE;
TA0CCR1 = H_WH; //计时到脉冲持续时间结束,case ccr1 输出正脉冲
TACCTL0 |= CCIE;
TA0CCR0 = H_WH + H_WL; //周期时间=正脉宽+负脉宽,ccro对应 TIMERA0_VECTOR

}

定时器中断:

#pragma vector = TIMERA0_VECTOR //ccr0的周期定时时间到
__interrupt void Timer_A0(void)
{
DAC12_0DAT = DAC_H_AH;
}
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{
switch(TAIV) //需要判断第几个定时中断
{
case 2: DAC12_0DAT = DAC_H_AL;break;
default: break;
}
}

串口接收中断回调里的停止标记:

case 'h': //高频停止输出

TA0CCR0 = 0;                  //这里试过很多关定时器的方法都是一样的结果
TACTL = MC_0; //停止模式
TACTL &= ~(TAIE + TAIFG);


DAC12_0DAT = 0x800; //输出1.25V

Print_Str("TA H DAC0 STOP!\r\n");
break;