ホーム › フォーラム › Texas Instruments › マイコン › MSP430 › UCS モジュールのフェールセーフ動作について
このトピックには24件の返信が含まれ、2人の参加者がいます。5 年、 5 ヶ月前に UNA さんが最後の更新を行いました。
-
投稿者投稿
-
御回答ありがとうございます。
御連絡いただいたとおり、FLL基準クロックソースはXT1CLKから供給(SELREF=0)されています。
FLL(DCO)の再起動はどのような手順で行えば良いでのしょうか?kkk様
FLL(DCO)の初期化を実施頂く必要があります。
初期化手順については下記サンプルコードをご参考ください。
※DCOを12Mhzに初期化するコードになっております。http://dev.ti.com/tirex/explore/node?node=AK.MiAXQcD3eqe5tGmsMzQ__IOGqZri__LATEST
以上、どうぞ宜しくお願い致します。
H.UResource Explorerが起動できなかったため遅くなりましたが、ご紹介いただいたサンプルコードを確認しました。
下記サンプルコードではSCG0によってFLLを再起動していますがDISMODをセットしていないため、DCOモジュレータを再起動していないと思います。// Initialize DCO to 12MHz
__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_5; // Select DCO range 24MHz operation
UCSCTL2 = FLLD_1 + 374; // Set DCO Multiplier for 12MHz
// (N + 1) * FLLRef = Fdco
// (374 + 1) * 32768 = 12MHz
// Set FLL Div = fDCOCLK/2
__bic_SR_register(SCG0); // Enable the FLL control loopオシレータ障害発生後に消費電流が増加したソフトの動作モードはアクティブモードとLPM3モードを交互に繰り返すことで、FLLをイネーブル/ディスエーブルに切り替えて再起動(DCOはイネーブルのまま)しましたが、消費電流がオシレータ障害発生前の数値に戻ることはありませんでした。
DCOモジュレータの再起動によって消費電流がオシレータ障害発生前の数値に戻ることは確認できましたので、DCOモジュレータがオシレータ障害発生後の消費電流増加の原因と考えていますが、そのようなことは無いのでしょうか?kkk様
説明が不足しておりまして申し訳ありません。
メーカからは、FLL基準クロックソース(XT1CLK)に障害が発生しているため、
FLLを再起動してLFXT1を再調整することが推奨されてるとの指摘がございます。従いまして、上述させて頂いたサンプルコードをご参考頂き、FLLの再起動(初期化)を
お試し頂けませんでしょうか。
FLLの再起動でも現象が改善しない場合は再度メーカへ問い合わせをさせて頂きたく存じます。以上、宜しくお願い致します。
H.U確認が遅くなり、申し訳ありませんでした。
ご紹介頂いたサンプルコードを参考にしてFLLの再起動(MCLK、SMCLK、ACLKの再設定)を行ったところ、消費電流が戻ることを確認しました。FLLの再起動のためクロックシステム制御レジスタ「UCSCTL*」の再設定を行いましたが、ご紹介頂いたサンプルコードのどの範囲がFLL再起動に必要な処理なのでしょうか?
サンプルコードを添付いたします。- この返信は5 年、 5 ヶ月前に kkk さんが編集しました。
Attachments:
kkk様
サンプルコードでは、下記コード部分にてFLLの初期化を行っています。
========
// Initialize DCO to 12MHz
__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_5; // Select DCO range 24MHz operation
UCSCTL2 = FLLD_1 + 374; // Set DCO Multiplier for 12MHz
// (N + 1) * FLLRef = Fdco
// (374 + 1) * 32768 = 12MHz
// Set FLL Div = fDCOCLK/2__bic_SR_register(SCG0); // Enable the FLL control loop
========以上、宜しくお願いします。
H.U御回答ありがとうございました。
サンプルコードではDCO安定待ちのために「while (SFRIFG1&OFIFG)」のループ処理がありますが、FLL初期化ではこのループ処理は実施しなくても良いでしょうか?
kkk様
安定化処理は挿入いただいた方がより良いかと思います。
以上、宜しくお願いします。
H.U御回答ありがとうございます。
UCSCTL7レジスタによってオシレータ障害の発生と解消を確認してからFLL再起動を行おうと考えていますが、FLL再起動にDCO安定化処理を加えると、オシレータ障害解消を確認後に再度オシレータ障害が発生した場合にDCO安定化処理での待ち時間が長くなることで製品機能に不具合が発生します。
そのため、FLL再起動ではDCO安定化処理を実行しないことを検討しています。
FLL再起動時にDCOが安定していなかった(OFIFG=1)としても、フェールセーフ機能によってクロックソースが32kHzの内蔵オシレータに切替わり通常通り処理が行われると考えていますが、このような動作になるのでしょうか?kkk様
再度オシレータ障害が発生した場合はフェールセーブ機能によって、
再び内蔵オシレータに切り替わると考えられます。なお、外部クリスタルからクロック供給される場合は、安定的にクロックが供給されることをメーカとしても想定しておりますので、クリスタル周辺回路の見直しや、クリスタルのマッチングなどによってクロック障害が頻発する要因の解消をご検討いただけますようお願い致します。
以上、宜しくお願いします。
H.U -
投稿者投稿