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.

[参考译文] MSP430G2553:定时器不工作

Guru**** 2538930 points
Other Parts Discussed in Thread: MSP430G2553

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/959552/msp430g2553-timer-not-working

器件型号:MSP430G2553

大家好、

     我最近开始使用 MSP430G2553微控制器、方法是使用 BSL 对其进行编程。 所有代码均可上传并正常工作、但使用计时器的代码除外。  

     使用计时器的程序正在成功编译和上传、但 MCU 不执行任何操作。 我添加了几条调试语句(在输出端使用 LED)来找出问题、并发现 OFIFG 标志始终保持为1。

//简单的闪烁 sketch

void register_settings_for_gpio()
{
P1DIR |= BIT7;
P1OUT &=~BIT7;
}

void register_settings_for_TIMER0 ()
{
CCTL0 = CCIE;
TACTL = tassel_1 + MC_1;
CCR0 = 32768;
}

void main (void)
{
WDTCTL = WDTPW + WDTHOLD;
unsigned int i;

do{
IFG1 &=~OFIFG;
对于(i = 50000;i;i--);
} while (IFG1 & OFIFG);

register_settings_for_TIMER0 ();
register_settings_for_GPIO ();
_BIS_SR (LPM3_BITS + GIE);
}

#pragma vector= TIMER0_A0_Vector
_ interrupt void Timer_A (void)
{
P1OUT |= BIT7;
_DELAY_CYCLES (200);
P1OUT &=~ BIT7;
} 



这里可能会出现什么错误?

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否将32kHz 晶体连接到 XIN/XOUT?

    如果这样做、您可能应该检查焊点。

    否则、您不应检查 OFIFG (它将始终开启)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,我连接了32kHz 晶振,并检查了焊点。 到目前为止未发现任何设置问题。 当然、我也尝试使用另一个板上的 MCU 进行切换、但没有成功。 发生这种情况的其他可能原因是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这似乎是正确的方法(如示例 msp430g2xx3_LFxtal_NMI.c 中所示):

    https://dev.ti.com/tirex/explore/node?node=AJ5Bmm7V5ca8wCEc-tsvkg__IOGqZri__LATEST

    在 F2系列中、LFXT 将接管 ACLK、即使您未清除 OFIFG。 如果您不执行循环、则在 P1.7下会得到什么结果(闪烁速率)? 使用 VLOCLK (故障转移)时、闪烁时间比1秒长3秒。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    无论是否使用环路部件、我都不会获得任何输出。 我使用 P1.6 LED 来调试代码。

    在环路部分、

    执行{
    IFG1 &=~OFIFG;
    对于(i = 50000;i;i-); 
    P1OUT ^= BIT6; //指示循环正在运行 } while (IFG1 & OFIFG);

    P1OUT &=~BIT6;//指示循环终止

    我做了这个添加、并注意到我的 PIN1.6上的调试 LED 根本不闪烁、它只是亮起。 我也没有关闭、当它从环路中流出时会关闭。
    因此、就我的解释而言、它进入循环并停留在 for 语句之后。
    即使用1替换 while 条件后、它也会提供相同的结果。

    产生这样的输出的原因可能是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1) 1)当我移除环路时、我在 P1.7上获得脉冲。 它们比我预期的要快一点(1.5Hz?) 我怀疑是由于振荡器故障转移、因为我没有晶体。  

    2) 2)当我尝试它时、编译器使延迟循环消失、因为它没有执行任何操作。 您可以声明 i "volatile"或使用__delay_cycles ()。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现环路中的延迟太小了,所以 它不能察觉到闪烁。 环路部分现在工作、只有 OFIFG 标志不会被清除。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我找到了一个启用了晶体的(G2ET) Launchpad。 当我运行该代码时、OFIFG 清零、并且我每秒在 P1.7上获得一次脉冲。 如果移除 OFIFG 循环、您会得到什么结果?

    我怀疑您的晶体没有振荡。 您能描述您的电路板吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    即使在循环被移除后、代码也不工作。

    我已连接该电路以供您参考。

    我还尝试用同一批次中的另一个晶体替换晶体、但它仍然无法正常工作。 与电子产品中的其他组件一样、我是否有任何方法可以测试晶体?

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当您移除 OFIFG 循环时、它不起作用的是什么? 您怎么说?

    无论晶体是否振荡、程序都应该执行某些操作(如果您移除了环路)、但它会有所不同、这将是一个线索。  

    一个想法:尝试将该200周期延迟延长、使 LED 闪烁更长时间、可能是100000 (100ms)。 电流闪烁不是很容易看到。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉对此不清楚。  我更改了 ISR 代码以仅打开 LED (P1.7)、以避免此延迟函数的混乱。

    移除环路后,MCU 进入低功耗模式并在该模式下停止。 测试方法是在 LED P1.6进入低功耗模式之前使其发光、并测量 MCU 的电流消耗。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗯。 如果 ACLK 正在运行、最终应该调用 ISR。 因此、我们可能不会看晶体本身、也可能看不到我可以在这里复制的东西。

    两个可能的实验:

    1) 1)在开头添加"BCSCTL3 |= LFXT1S_2;// VLOCLK"。 这将设置 ACLK=VLO 并使晶振无关。

    2) 2)将 LPM3语句替换为类似如下的语句:"_BIS_SR (GIE);while (1){}"。 这将阻止它进入 LPM。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    将时钟源更改为 VLOCLK 后、代码工作正常。

    如果我说得对、我的外部晶体肯定有问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我以前没有看到故障转移失败(完全),尽管我看到它的行为不正常。 (这就是我知道 LFXTIS _2诀窍的原因。)

    再尝试一件事:在开头的某个位置添加"P2SEL=0xC0;../../Run the LFXT no 开玩笑"。 这是复位值、据我所知、BSL 不会与 P2SEL 发生混乱、但我们似乎进入了某种程度上未被制表的区域。

    您是否相当确定22pF 电容器与您的晶体匹配? 我使用的32kHz 晶体处于6-12pF 范围内。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将这些22pF 电容器替换为8pF 电容器、并在代码中包含复位值。 仍然会遇到相同的问题。 代码滞留在循环中。

    我使用了8pF 电容器、因为它在您上面提到的范围内、这是商店中唯一可用的低值电容器。 在这里、该范围内的电容器似乎很少见。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    遗憾的是、我的经验是、直接测量晶体电路并不容易、因为示波器探针往往会将其丢弃。

    您可以尝试在 BCSCTL3中试验 XCAP 设置。 [参考用户指南第5.3.4节]它从1 (6pF)开始、因此您可以尝试将其设置为更高或更低。

    [编辑:我忘了问:建议您的晶体使用哪种电容? 您是否有该器件的器件型号?]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试了所有4个 XCAP 选项、仍然相同。

    很抱歉、如果这是一个基本问题、是否有用于低频晶体的器件型号? 我的只是一个没有标记的银质圆柱。

    我没有考虑推荐的电容器值、因为我之前共享的电路是一个完美工作的电路。 它在使用和不使用电容器的情况下都能正常工作。 因此,我认为电容值的 pF 变化不大重要。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    圆柱形"音叉"晶体上没有器件型号(或者至少我的老眼睛看不到它们)、因此我将我的产品保留在它们进来的(标记的)信封中。 我在我的吉兹莫盒中发现的第一个问题是:

    https://www.mouser.com/ProductDetail/ABRACON/AB26TRQ-32768KHZ-T?qs=%2Fha2pyFaduhLEYIPQrxx91mYdfM%252BEQEqp%252BSly4jQSF%2FvyFlf8D2xNA%3D%3D

    我不确定我是否理解您的第二条评论。 如果电路正常工作、会发生什么变化?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我实际上看过一个视频、其中电路是在没有任何晶体电容器的情况下使用的。 计时器仍然以晶体作为时钟源运行。 。 由于电容值看起来不那么重要、我 只使用了电路图中提到的值、而没有搜索任何其他详细信息。

    我认为 TI 支持的官方电路板使用12pF 电容器。 我怀疑我的晶体振荡器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否在没有任何电容器的情况下试用过它? (您可能需要调整 XCAP。)

    我刚刚在一个抽屉中找到了一个旧的 G2 Launchpad (修订版1.5)、该抽屉具有晶振、但未安装电容器(C21/C22)、并且(根据 DMM) 没有外部 GND 连接、振荡器看起来运行正常。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    已移除电容器并尝试运行代码、但代码仍然无法正常工作。 我还尝试了所有的 XCAP 设置、但没有结果。  

    我认为、问题可能出在晶体上。 虽然我买的晶振更换没有解决、 但我会用一些新的晶振来尝试、因为整个晶振都可能出现故障。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是一个很好的秘密,我没有什么建议。 也许一张照片会给人启迪?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我正在进行的测试设置。 实际上、我已经断开了电容器与晶体的连接(作为我上次测试的一部分)、 从该视图中看不到该电容器。

    这是底视图。 希望图片清晰...  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    DIP 开关有什么作用? 我在原理图中看不到它们。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用 CP2012分线板对此进行编程。 插座引脚(在最右侧)用于连接 CP2102板。 按下 RESET 按钮可在电路板连接时清除 MCU 中的代码、因此我已使用 DIP 开关断开除+5V 和 GND 之外的所有其他引脚。