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:帮助实现勘误编号 TA12的权变措施

Guru**** 2563990 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/758170/msp430g2553-help-to-implement-workaround-for-errata-number-ta12

器件型号:MSP430G2553

您好!

我的应用程序的运行方式为奇数、并且有可能与器件勘误表中描述的 MCU 错误 TA12相关。 我正在尝试实施该变通办法、但它没有达到目的。 我能否提供一些代码示例或有关如何实现此变通办法的指示?

此时、我将按照以下方式配置 TIMER_A_MODULE、其中 TIMERRELOAD 是一个整数:
CCTL0 = CCIE; //启用 CCR0中断,启用捕捉模式
CCR0 = TIMERRELOAD; // 1ms 计时器23986
TACTL = tassel_2 + MC_1;// ACLK、向上、CLR TAR 
Timer_MODULE_A 也会调用中断子例程。
//计时器 A0中断服务例程
#pragma vector=TIMER0_A0_VECTOR
_interrupt void TIMER0_A0_ISR (void)
{
timertick ++; //更新系统计时器节拍
freqtimertick++; //更新频率计时器节拍
Soundtick++; //更新声音频率
线对++; //更新线对;
samplpletick++; //更新样本节拍

if (soundflg =true){
P2OUT ^= 0x20;


if (soundtick =sounddontime){
soundflg = false;
SpkrOff;
}

}
TIMER0中断的}//END 

据我了解、从权变措施来看、我必须在 CRRx 寄存器递增之前将定时器配置为捕获模式、然后切换回比较模式。 我在如何动态实施这一过程中遇到了困难、同时考虑到了中断服务。
谢谢你
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的.png 似乎连接不正确。

    请尝试粘贴您的代码、使用"插入代码、附加文件等"。 然后选择"<>"图标。 这也比屏幕截图更易于阅读。

    [编辑:我想知道 Erratum 的含义。]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的建议。 我已经按照您的建议上传了代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TASSEL=2是 SMCLK、它(通常)不是 TA12的"慢速"。 我也看不到您在 CCR 中添加1的位置(也根据 TA12)。

    您为什么认为您遇到了 TA12?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bruce、您好!

    我没有编写此代码、这是我第一次使用 TI MCU。 我认为 TASSEL = 2是为了使用 ACLK 设置定时器。 此配置 sint税收 是否从0开始? 那么、TASSELx 寄存器的 TASSELx 位9和8设置为0b10等于吗?

    此外、我认为当外设中断发生时、CCR 寄存器会自动递增?

    这是频率计数器。 因此、每次输入发生变化时、计时器都会开始计数、直到发生另一次变化。 (我相信它可以正常工作)。 我也会上传中断子例程
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、tassel_2是将 tassel 字段设置为2=0b10的速记法。 TASSEL_1将是 ACLK。 [参考用户指南(SLAU144J)秒 12.3.1]

    在比较模式(非捕获)下、只有当代码更改 CCR 时、它们才会发生变化。 计数器寄存器(TAR)递增、并与 CCR 进行比较。

    频率计数器通常使用 TACLK 作为时钟(TASSEL_0)。 在此模式下、TACLK 是时钟而不是门、因此每个上升沿都会将计数器(TAR)递增1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我将尝试使用 ACLK。 使用此模式后、是否会使勘误表对我的案例有效?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍然看不到任何向 CCR 添加1的情况。 [编辑:删除了有关 CCR0+UP 的注释、因为它基本上是正确的、在任何情况下都是不相关的。]

    您到目前为止发布的代码看起来相当普通(除了我不知道 SpkrOff 的作用)。 您观察到哪些行为会导致您认为工作中存在勘误表?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在生产批次中、大约10%的器件有一个奇怪的行为、在这种行为中、它们会"被吸入"。

    我已经获得了代码、但我没有调试器来测试这种情况的确切发生位置。

    因此、在仔细查找不一致之处并与之前未发生问题的版本进行比较之后、我发现除了勘误表 TA12之外、我认为它可能会影响到这种未知行为、但我的有限能力除外。

    很遗憾,我没有更简明的资料来证明 TA12是问题的原因,因为我对问题的了解很差。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    若要回答您原来的问题:TA12解决方法建议您首先找到看起来或多或少类似于"CCRn++;"的代码行(在 ISR 中)。 然后将该行括起来、使其看起来像"CCTLn|=cap;CCRn++;CCTLn&&~cap;"。 在没有原始代码行的情况下、无法执行变通办法(并且很可能不是您遇到的情况)。

    存在不同级别的"卡住"。 一种方法是、器件根本无法执行任何操作。 在另一种情况下、某些(可能很重要)函数不工作、但其他情况(例如 LED、UART)也是如此。 通常有线索。

    一些清单项目(无特定顺序):
    1) 1) 1)如果您重置它、它是否开始工作? 如果您对其进行下电上电、会怎么样?
    2) 2)卡住时、它消耗了多少电流? (睡眠模式与激活模式)
    3) 3)比较代码版本时、您发现了哪些差异?
    4) 4)您说您没有调试器。 您是否有任何方式加载新代码? 我的第一个想法是使用看门狗计时器(WDT)、
    这不是很复杂。
    5) 5)它可能不是代码、而可能是电气(直接或间接)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的详尽答复。

    实际上、程序不会使该 CCRn 寄存器递增。

    感谢你的建议。 我已联系客户、为我提供进行此调查所需的硬件。 (现在我甚至没有板)。

    再次感谢 您的建议。