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.
我在比较模式下使用 Timer_A 在 MSP430f1xx 上生成 PWM 输出。 在 OSC 故障期间、我将 Timer_A 源从 SMCLK 更改为 ACLK (XTS=1)。
ACLK 现在以与 SMCLK 相同的频率运行、并且所有定时器寄存器看起来都正常。 但 PWM 输出频率现在是随机的(我假设这是因为 Timer_A 不会按预期在 ACLK 上运行)。
这是我的 NMI 例程、
#pragma vector=NMI_vector
_interrupt void NMI_(void)
{
IF (OFIFG){
configure_lfxt1 (); //确定
IFG1 &=~NMIIFG;
IFG1 &=~OFIFG;
IE1 |= NMIIE;
TACTL &=~(MC0 | MC1);
TACTL &=~tassel_2;
TACTL |= tassel_1;
_DELAY_CYCLES (200);
TACTL |= MC_1;
}
请提供任何指示。 谢谢、
您好 Caleb、
您正确理解了场景。 是的、我尝试输出 ACLK 频率、并且它按预期计时(切换到 ACLK 的其他应用程序、运行时不会出现任何问题)。
此外、我从 SMCLK 切换到 ACLK 的原因是我无法使用 LFXT1 (XTS=1)配置 SMCLK。
下面是我从 XT2切换到 LFXT1的方法。
BCSCTL1 |= XT2OFF + XTS + DIV_2;
_DELAY_CYCLES (2000); //等待 OSC 启动
BCSCTL2 |= SELM_3 + DIVM_1 + SELS + DIVS_2;
此致、
在配置更改期间清除可能有所帮助?
您好!
我按照建议从一开始就运行了 Timer_A、并注意到它仍然失败。
基本上、TASSEL 对 Timer_A 没有影响 无论选择何种源、它都始终选择 SMCLK。
有什么想法吗?
此致
此问题已得到解决。 这个问题是因为 Timer_A 根本没有切换到 ACLK。 代码中有一个错误。
其中一个函数 Sure Caleb 为 TACTL 寄存器分配了一个值、从而修改了我完全忽略的 TASSELx (而不是 ORing 相关位)。