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.

MSPF627X 关于WDT,看门狗模式,怎么时钟源选择ACLK和VLO,结果都是VLO做时钟源的??ACLK通过IO引脚输出确实为32768Hz

MSPF627X 关于WDT,看门狗模式,怎么时钟源选择ACLK和VLO,结果都是VLO做时钟源的??ACLK通过IO引脚输出确实为32768Hz,看门狗时钟源选择ACLK,定时1秒,时间差不多有3秒多才复位,和选VLO做时钟源结果一个样!

  • 没有mspf627x的430.

    应该是看门狗的配置不正确导致的。例如

      WDTCTL = WDT_ADLY_250;                  // WDT 250ms, ACLK, interval timer

  • 你好!

    能否把代码贴上来,以便分析。

  • WDTCTL = WDTPW + WDTHOLD;

       PJDIR |= BIT3;

       PJSEL |= BIT3;

       //PJDIR |= BIT0 | BIT1 | BIT3;           // ACLK, MCLK, SMCLK set out to pins

       //PJSEL |= BIT0 | BIT1 | BIT3;           // PJ.0,1,3 for debugging purposes.

       // Setup LFXT1

       UCSCTL6 &= ~(XT1OFF);                   // XT1 On

       UCSCTL6 |= XCAP_2;                      // Internal load cap ~8.5PF

       // Loop until XT1 fault flag is cleared

       do

       {

           UCSCTL7 &= ~XT1LFOFFG;              // Clear XT1 fault flags

       } while (UCSCTL7 & XT1LFOFFG);          // Test XT1 fault flag

       UCSCTL6 &= ~(XT1DRIVE_3);               // XT1 stable, reduce drive strength

       // Initialize DCO to MHz

       UCSCTL0 = 0x0000;                      // Set lowest possible DCOx, MODx

       UCSCTL1 = DCORSEL_3;                   // Set RSELx for DCO [0.64-1.51]

       UCSCTL2 =  31;                          // Set DCO Multiplier for 1.048MHz

                                              // (N + 1) * FLLRef = Fdco

                                              // (31 + 1) * 32768 = 1.048MHz

                                              // Set FLL Div = fDCOCLK/1

       // Watchdog mode -> reset after expired time; WDT is clocked by ACLK

       WDTCTL = WDT_ARST_1000;                 // SET BREAKPOINT HERE

                                               // Set WDT Timer timeout 1s

       // Setup P1.0 output

       P2DIR |= BIT6;                          // Set P1.0 to output

       P2OUT ^= BIT6;                          // Toggle P1.0

       __bis_SR_register(LPM3_bits | GIE);     // Enter LPM3

       __no_operation();                       // For debugger

    }

    基本上就是官方例程,3.几秒翻转一次,理论上应该是1秒。可以确保选的是ALCK做时钟源,且ACLK为32KHz

  • 不好意思,是MSP430F672x

  • 你好!

     

    这应该是时钟配置的问题。可以参考下这个代码,改成MSP430F67 头文件即可。

  • 您好。我手上3块板子,按照你提供的代码修改后,有2块板子是1秒复位一次,但有一块板子不启动,卡在while (UCSCTL7&XT1LFOFFG); 处了。怎么回事呢?

    另外,就是do {

           UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);

                                                 // Clear XT2,XT1,DCO fault flags

           SFRIFG1 &= ~OFIFG;                    // Clear fault flags

       } while (SFRIFG1&OFIFG);   我不判断标志,直接启动,ALCK,MCLK都有且正确,为什么WDT“自作主张”选择VLO,仿真看到的也是选择的ACLK,为什么呢??

  • 补充一下,官方WDT例程都也没去判断SFRIFG的标志位,那照这样,岂不是官方例程有问题?因为按照官方例程操作,选择ALCK,1秒,结果却是3.几秒的,即内部把VLO做时钟源。