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.

[参考译文] MSP430FR6922:MSP430FR6922 RTC 不会每0.125秒置1

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1158469/msp430fr6922-msp430fr6922-rtc-not-set-at-every-0-125-second

器件型号:MSP430FR6922

大家好、

   我正在处理 MSP430 RTC。 我希望每0.125秒生成一次 RTC 中断。

我已附上我的代码供您参考 告诉我代码是否正确。  

谢谢  

#include "common.h"

void RTC(void)
{
    RTCCTL0_H = RTCKEY_H;                   // Unlock RTC
    RTCCTL1 = RTCBCD | RTCHOLD | RTCMODE;   // RTC enable, BCD mode, RTC hold
    RTCPS1CTL = RT1IP_3 | RT1PSIE;

    RTCCTL1 &= ~(RTCHOLD);                  // Start RTC
  }


#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=RTC_VECTOR
__interrupt void RTC_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(RTC_VECTOR))) RTC_ISR (void)
#else
#error Compiler not supported!
#endif
{
    switch(__even_in_range(RTCIV, RTCIV_RT1PSIFG))
    {
        case RTCIV_NONE:      break;        // No interrupts
        case RTCIV_RTCOFIFG:  break;        // RTCOFIFG
        case RTCIV_RTCRDYIFG: break;        // RTCRDYIFG
        case RTCIV_RTCTEVIFG:               // RTCEVIFG
             break;
        case RTCIV_RTCAIFG:   break;        // RTCAIFG
        case RTCIV_RT0PSIFG:
             break;        // RT0PSIFG

        case RTCIV_RT1PSIFG:
             count++;    //increment count at every 0.125 second

              break;        // RTCRDYIFG

        default: break;
    }
}

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

    您好、Sayali、看看 Eh RT1PSDIVx 和 RT1IPx 寄存器、似乎无法获得0.125秒 如果两个寄存器都使用 div_256、则可以根据32kHz 时钟实现的最低值为0.5秒。

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

    好的... 您能为我编写代码、以每0.125秒生成一次中断吗?

    谢谢

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

    您好、Sayali、

    我将看到我可以做什么。

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

    尊敬的 Dennis:

    正在等待您的回复

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

    您好、Sayali、

    这是一个有趣的实验。  事实证明用户指南是正确的。  

    根据我所做的示波器测量值、我可以实现的最慢中断为0.5秒。

    您是否考虑在 TMR 模式下使用定时器_A 或 WDT 之一来生成一个0.125秒的中断。  下面 是 TI Resource Explorer 中的一个示例、其中 WDT 每0.250秒生成一次中断  您可以修改0.125秒

    这就是我在这个问题上可以做的所有事情。

    对于此主题之后的其他人、以下是 用户指南中的信息

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

    大家好、Dennis、我只是一名被动观测器。 如果 Sayali 请求0.125秒的中断、即8Hz、则可以根据数据表和用户指南进行中断。 将 RT0PS 和 RT1PS 设为64分频值时、应将32kHz 时钟转换为8Hz (0.125秒)。

    //32.768kHz/(64 * 64)
    //Divide ACLK by 64 to source into RT1PS | keep in held state
    RTCPS0CTL = RT0PSDIV__64 | RT0PSHOLD;
    
    //        Souce from RT0PS | divide again by 64
    RTCPS1CTL = RT1SSEL__RT0PS | RT1IP__64;

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

    您好 Seth、

      根据您的建议、我对我的代码进行了如下更改:-

    RTCPS0CTL = RT0PSDIV0 | RT0PSDIV2 |RT0PSHOLD ;// ACLK、/64
    RTCPS1CTL = RT1SSEL1 | RT1IP2 | RT1IP0;//从 RT0PS 输出、/64

    因此、主时钟为32768/RT0PSDIV (64)= 512

    源为 RT0PS SO、512/RT1IP (64)=8Hz

    但在0.125秒时、我的中断仍然不会生成。

    RTCCTL1寄存器怎么样? RTC 将在哪种模式下工作(计数器/光标)?

    我测量0.125秒、如下所示:-

    在中、"计数"变量每0.125秒递增一次。

    因此、1秒表示8次计数。 当8个计数完成时,1秒完成..

    因此、我尝试使用电话秒表来比较0.125秒。

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

    您需要设置为计数器模式、因为日历模式只允许1秒的中断。

    RTCCTL0 = RTCKEY;
    RTCCTL1 &= ~RTCMODE;//32-bit counter mode. RTCHOLD set by default after RESET
    
    //Initialize counter to 0
    RTCCNT12 = 0;
    RTCCNT34 = 0;
    
    //Divide ACLK by 64 to source into RTCPS1 | keep in held state
    RTCPS0CTL = RT0PSDIV__64 | RT0PSHOLD;
    
    //        Souce from RT0PS | divide clock by 64 | enable interrupt
    RTCPS1CTL = RT1SSEL__RT0PS | RT1IP__64 | RT1PSIE;
    
    RTCPS0CTL &= ~RT0PSHOLD;
    
    RTCCTL0_H = 0;//Lock the RTC registers

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

    您好、Sayali、

    我们已经听过您的介绍、现在已经有一段时间了、因此我将假定您能够继续推进您的项目。
    我将此帖子标记为已解决,但如果不是这种情况,请单击“这不能解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题已锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。