1106895_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1106895_ja-JP

1106895_ja-JP

Kinetis W 32kHzオシレータ・レディ・タイム<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

先週、32kHz発振器がクロックソースとして使用できるようになったときに通知する方法を特定する方法についての質問を受けました。つまり、32kHzの発振器が安定してMCGモジュールの基準クロックとして使用できる場合です。その後、システムはそれを切り替えることができる。

Kinetisデバイスは、FEIモードと呼ばれる内部クロックを使用して起動し、その後、外部クロック・ソースを必要とする別のモードに切り替わります。これにより、アプリケーションは外部クロック・ソース(つまり、FEEモード)。通常、次の2つのオプションがあります。

  1. メイン基準クロック。KWデバイスと特に話すと、メインリファレンスクロック用の32MHzの外部水晶があります。
  2. RTCレジスタを介して駆動される32kHz発振器用の32kHz外部水晶。

最初のオプションには、オシレーターの準備ができているとき(RSIM_CONTROL_RF_OSC_READY)を知るために監視できるレジスタがあります。そのため、オシレーターが稼働して準備ができたときにポーリングして通知することができます。

2番目のオプションについては、ここでtは32kHz発振器の「OSCINIT」ビットではありません。ただし、32kHz発振器がいつ動作しているかを知る方法は、RTC OSCを有効にし、RTCをカウントするように設定することです。その後、すぐにRTC_TPRレジスタをポーリング(読み取り)し、4096より大きくなるまでチェックします。32767に達するとロールオーバーされるため、このレジスタをポーリングするには、他に何もしないループでポーリングすることが重要です。そうしないと、レジスタが4096未満ですでにロールオーバーされている場合にレジスタが読み取られる可能性があります。4096より大きい場合は、オシレーターが正常に動作していると判断できます。RTCが不要な場合は、カウンタを無効にすることができます。32kHzクロックが利用可能になったので、アプリケーションはFEEモードに切り替えることができます。

そこで、上記の説明を実行するために、次に示すように「CLOCK_CONFIG_EnableRtcOsc()」を変更しました。

static void CLOCK_CONFIG_EnableRtcOsc(uint32_t capLoad)
{
       rtc_config_t rtc_basic_config;
       uint32_t u32cTPR_counter=0;
 
       /* RTC clock gate enable */
    CLOCK_EnableClock(kCLOCK_Rtc0);
 
    if ((RTC->CR & RTC_CR_OSCE_MASK) == 0u)
    {
      /* Only if the Rtc oscillator is not already enabled */
      /* Set the specified capacitor configuration for the RTC oscillator, "capLoad" parameter shall be set
         to the value specific to the customer board requirement*/
      RTC_SetOscCapLoad(RTC, capLoad);
         /*Init the RTC with default configuration*/
      RTC_GetDefaultConfig(&rtc_basic_config);
      RTC_Init(RTC, &rtc_basic_config);
 
      /* Enable the RTC 32KHz oscillator */
      RTC->CR |= RTC_CR_OSCE_MASK;
 
      /* Start the RTC time counter */
      RTC_StartTimer(RTC);
      
      /* Verify TPR register reaches 4096 counts */
      while(u32cTPR_counter < 4096)
      {
         u32cTPR_counter= RTC->TPR;
      }
      /* 32kHz Oscillator is ready. Based on the application requirements, it can let the RTC enabled or disabled. 
          In this case, we can disable RTC since it is not needed by this application */
      RTC_Deinit(RTC);
    }
    /* RTC clock gate disable  since RTC is not needed anymore*/
    CLOCK_DisableClock(kCLOCK_Rtc0);
}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

次に、上記の機能を使用して、32kHz発振器を使用する準備ができたときに気付くことができます。

これがお役に立てば幸いです...。

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎11-19-2025 10:51 AM
更新者: