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.

[参考译文] CCS/MSP430FR6989:MSP430 UNMI 处理程序和时钟初始化的代码检查

Guru**** 2595800 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/873616/ccs-msp430fr6989-code-review-on-msp430-unmi-handler-and-clock-initialization

器件型号:MSP430FR6989

工具/软件:Code Composer Studio

此帖子与  在回复 中的回复有关:https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/673619/2479155?tisearch=e2e-sitesearch&keymatch=UNMI#2479155

在文件 msp430fr69xx_of_lfxt1_nmi.c 中、它允许通过执行写入 CS 寄存器  

CSCTL0_H = CSKEY >> 8; 

但事实证明之后、再次写入密码以锁定 CS 寄存器的位置并不重要。  这是否意味着 CS 寄存器不再被锁定、从而允许执行所有后续的 CS 写入?  如果是、我会怀疑这不是最佳做法吗?


此外,在 UNMI ISR 内部还有一个:

_delay_cycles (60000); //标志的设置时间 

是否在任何地方记录了正确的延迟时间、或为什么应该这么做?  它是为了让用户能够看到 LED 闪烁、还是需要一定量的周期来清除标志?  如果是、如果您消除延迟、会产生什么后果?


在 UNMI ISR 处于服务状态(已完成运行)后、微控制器是否会在故障发生之前停止运行?


最后、关于 UNMI ISR、如果代码更改为:

执行
{
CSCTL0_H = CSKKEY_H; //添加了---解锁 CS 寄存器
CSCTL5 &=~LFXTOFFG; //清除 XT1故障标志
SFRIFG1 &=~OFIFG;
_delay_cycles (60000); //标志的设置时间
P1OUT ^= BIT0; //使用异或切换 P1.0
CSCTL0_H = 0; //添加了---锁定 CS 寄存器
} while (SFRIFG1和 OFIFG); //测试振荡器故障标志 

以这种方式解锁和锁定 CS 寄存器是否会导致任何问题?   

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

    KL74您好、感谢您的评论!

    问:这是否意味着 CS 寄存器不再被锁定、

    答:在器件加电之前、CS 寄存器不会再次锁定。这是 slau367o 中 CSKEY 密码的描述。 必须始终写入 A5h;如果写入任何其他值、则会生成 PUC。 始终读为96h。 写入正确的密码后、所有 CS 寄存器均可进行写入。

    问:是否在任何地方记录了适当的延迟时间、或为什么应该这么做?  它是为了让用户能够看到 LED 闪烁、还是需要一定量的周期来清除标志?

    答:我认为这只是为了演示。 如果延迟计数器减少、则将执行更多的周期时间

    问:最后、关于 UNMI ISR、如果代码被更改为:

    答:如果 CSCTL0_H 在 DO while 周期中清零、则如果写入任何其他值、则会生成 PUC。 在这种情况下、无法执行 DO while 循环。 我认为这不是正确的清除和轮询检查方法。

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

    感谢  

    生成 PUC 的含义是什么。  是否发生完全复位?  还有事吗?  当我键入它时、我也会对它进行读取。

    在写入 CS 寄存器后、我正在处理写入0的代码、固件似乎正常运行。  此代码已就位并已在该字段中显示一段时间。  如果我们在循环中将 CSKEY 写入0、那么它会持续生成 PUC、这不会阻止固件运行、但我们看到应用程序运行了吗?

    请参阅 slaz473ad 中的 CS12、变通办法的一部分是向 CSCTL0写入一个非0xA5值以再次锁定寄存器。

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

    KL74您好、感谢您的评论!

    我再次查看 MSP430FR6989UG 1.2、您答对了! PUC 不会导致复位(BOR 或 POR)。 根据我的理解、PUC 将清除某些寄存器(PUC 后为-0、-1个条件)。 因此、将 Wroten CSKEY 设置为0是锁定 CS 寄存 器的良好做法、正如 slaz473ad 中 CS12中的描述。