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.

[参考译文] MSP430FR2355:看门狗问题?

Guru**** 2535150 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/983048/msp430fr2355-watchdog-questions

器件型号:MSP430FR2355

我有以下测试程序...我正在使用示波器来测量 PWM 开启的选通时间。  它将由配置为计时器的看门狗进行门控。  它不能正常工作。  我发现、如果我在启用 GIE 后将该行替换为:

WDTCTL =(WDTPW | WDTSSEL_ACLK | WDTTMSEL | WDCTNCL | WDTIS_4); 

我得到我想要的预期结果。  但是、我希望做的是按如下方式配置看门狗(也可能添加 WDTHOLD 标志以节省功耗)。  在另一个 ISR 内(此处未显示)、我只需取消暂停并清除计数器(使用 PW)、但没有结果。

我的问题:

在 知道我回读高字节中的0x69后、似乎没有任何方法可以执行按位运算符并在稍后的某个点添加值以进行配置、这是正确的吗?  (似乎我不能总是写入完整的寄存器)

2. 是否有办法在应用程序中及早配置、然后稍后复位计数器、如下所示?

#include 
#include "application.h"#include


volatile int wd_entry = 0;

int main (void)
{
struct TimerB s_TB;
struct pwm s_tb3_pwm;


WDTCTL =(WDTPW | WDTSSEL_ACLK | WDTTMSEL | WDTCNTCL | WDTIS_4);

//配置 GPIO
P2SEL1 |= BIT6 | BIT7; // P2.6~P2.7:晶振引脚
操作
{
CSCTL7 &=~(XT1OFFG | DCOFFG); //清除 XT1和 DCO 故障标志
SFRIFG1 &=~OFIFG;
} while (SFRIFG1和 OFIFG); //测试振荡器故障标志
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

strcpy (s_tb.clksrc、"A");
S_TB.whichTimer = 3;
strcpy (s_tb.mode、"U");
S_TB.irqValue = 0;
TimerBConfig (&s_TB);

s_tb3_pwm.freq = 983;//minimum 983 - 30Hz
s_tb3_PWM.rate = 50;//%导通时间(整数)
pwmConfig (&s_tb3_PWM);
pwmRun (channel_2);
_bis_SR_register (GIE);

WDTCTL |=(WDTPW | WDTCNTCL);
SFRIFG1 &=~WDTIFG;
SFRIE1 |= WDTIE;//1秒

_bis_SR_register (LPM3_bits); //进入 LPM3
__no_operation(); //对于调试

}


#pragma vector = WDT_vector
__interrupt void OneSec_ISR (void)
{
WD_Entry ++;
如果(wd_entry > 1)
{
pwmRun (all_off);
WD_Entry = 0;
// WakeRadio(F);
SFRIE1 ~WDTIE;
SFRIFG1 &=~WDTIFG;
}
}

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

    您不能在看门狗控制寄存器上使用||、因为这会始终导致寄存器被读取、与它一起读取或写入、然后被写回。 该寄存器的密码部分在读取时返回一个不需要写入的值。

    您可以执行该操作、但它需要更多的工作。 使用显式读取、然后屏蔽高字节(& 0xff)、添加密码、然后更改要更改的低字节中的位、最后将结果写回。

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

    是的、我意识到最好是在整个时间重新写入寄存器

    谢谢