0

以前も質問したことがありますが、今回はもう少し分かりやすく質問できると思います。

以下は私のRTCテストコードです。IAR EW 5 で msp430f5418 を使用しています。

私の問題は、しばらくすると(15分以上でテストしました)、分の割り込みが予想よりも早く来ることです。

つまり、最初は正確に 60 秒後、15 分後に 45 秒目に分の割り込みが発生します。

なぜそうなのですか?RTC レジスタ操作には TI が提供するライブラリを使用しています。

なぜそうなのか誰か教えてもらえますか??

コードの問題ですか、ライブラリの不適切な使用法またはハードウェア自体の問題ですか??

前もって感謝します...

#include <msp430.h>
#define RTC_VALID_READ_MAX_WAIT  500U
int main()
{
    WDTCTL = WDTPW + WDTHOLD;
    RTCCTL01 = RTCMODE + RTCTEVIE + RTCTEV_0;
    RTCCTL01 |= RTCHOLD;
    /* Calling the routines in the workaround assembly module supplied by TI */
    SetRTCYEAR (2011U);
    SetRTCMON (6U);
    SetRTCDOW (3U);
    SetRTCDAY (4U);
    SetRTCHOUR (23U);
    SetRTCMIN (0U);
    SetRTCSEC (0U);
    RTCCTL01 &= ~RTCHOLD;
    __enable_interrupt();
    while(1)
    {
    }
}

#pragma vector=RTC_VECTOR
__interrupt void handle_rtc_interrupt(void)
{
    switch(RTCIV)
    {
        case 2U:  /* RTC one second Ready Event for valid read */
        {
            int wait_counter = 0U;
            while (!(RTCCTL01&RTCRDY)) /* Wait for RTCRDY to go high, so read will be valid. */
            {
                wait_counter++;
                if (wait_counter > RTC_VALID_READ_MAX_WAIT)
                {
                    break;
                }
            }
            if (wait_counter<=RTC_VALID_READ_MAX_WAIT)
            {
                volatile int min = RTCMIN;
                volatile int sec = RTCSEC;
            }
            RTCCTL01 |= RTCHOLD;
            RTCCTL01 &= ~RTCRDYIE;
            RTCCTL01 &= ~RTCHOLD;
            break;
        }
        case 4U:        /* RTC Minute Interval Event */
        {
            RTCCTL01 |= RTCHOLD;
            RTCCTL01 |= RTCRDYIE;  /* Enable Ready Flag Interrupt */
            RTCCTL01 &= ~RTCHOLD;
            break;
        }
        default:
        {
            break;
        }
    }
}

ハリ

4

2 に答える 2

4

コードのデバッグを手伝うことはできませんが、ハードウェアで継続的な障害が発生していたため、5418のRTCをあきらめました。これは、私がプロトタイプと最初の製品シリコンを持っていた2008年にさかのぼります。標準(非A)グレードの部品では、RTCのバグが今でも完全に解決されているとは思いません。5418プロダクションシリコン(任意のマスク回転/正誤表レベル)で実行する必要があり、F2418およびF149プロセッサから移行していたため、すでにソフトRTCがあり、それに戻りました。処理と消費電力のオーバーヘッドは最小限でした。

于 2011-06-29T12:50:32.437 に答える
1

時間の経過に伴う割り込み間の間隔をプロットします。冷まして再起動しますが、ヘアドライヤーを実行してプロットを繰り返します。それが変化すると、発振器に温度の影響が出ます。

于 2013-02-27T15:53:08.760 に答える