Renesas Synergy™

FAQ 1004839 : 電源立ち上げ時の動作クロック切り替え(78K0/Kx2,78K0R)

[はじめに]
78K0/Kx2や78K0Rシリーズのマイコンでは、リセットからの起動時には高速内蔵発振回路のクロックで動作します。従って、水晶振動子やセラミッ ク発振子を用いる場合には発振回路を切り替える必要があります(このためには、切り替える前に発振を開始させる必要があります)。マイコンは広い電源電圧 範囲で動作しますが(FAQの「電源電圧と動作クロック」を参照してください)、使用する電源電圧により発振可能な周波数が異なります。以下、78K0/Kx2を例に説明します。

電源電圧とX1発振周波数の例(78K0/Kx2)
電源電圧 発振周波数(MIN.) 発振周波数(MAX.)
4.0 V≦VDD≦5.5 V 1.0 MHz 20.0 MHz
2.7 V≦VDD<4.0 V 1.0 MHz 10.0 MHz
1.8 V≦VDD<2.7 V 1.0 MHz 5.0 MHz

このように電源電圧で発振可能周波数が異なる場合には、発振周波数によっては処理に注意が必要です。最高周波数での発振を行ない、POC(Power On Clear)を用いる場合には特に注意が必要です。

[クロック発振開始前の手順]
そこで、電源が投入され、パワーオン・リセットやPOCが解除されてマイコンが動作を開始したら、X1の発振を開始する前に、低電圧検出回路を用いて発振 周波数に対応した電源電圧以上になっていることを確認します。低電圧検出回路の検出電圧としては、上記の表の低い方の電圧以上になっている必要がありま す。例えば、X1を10MHzで発振させる場合には電源電圧が2.7V以上必要になります。2.7V付近での、低電圧検出回路の検出レベルとしては以下の 2つが候補として考えられます。このうちVLVI10は低いほうにずれると、2.6Vになるので条件を満たさなくなります。そこで、確実に2.7V以上となるVLVI9を選択します。

電圧選択 検出電圧
VLVI9 2.85 V±0.1V
VLVI10 2.70 V±0.1V

なお、発振させる周波数が5MHz以下であれば、電源電圧の立ち上がりを待つ処理は必要ありません。また、10MHzを超える場合には検出電圧としてVLVI0を選択するだけで、処理は同じです。

・具体的な処理
低電圧検出回路の割り込みをマスク(リセット解除後の初期状態としてマスクはセットされている)し、LVISレジスタに9を設定することで検出電圧を設定 します。次に、LVIMレジスタに80H設定することで、割り込みモードで低電圧検出回路を起動します。起動後、10μ秒の動作安定時間を待ってから、 LVIMレジスタを確認し、LVIFビットが0になるのを待ちます。
<注意>電源の立ち上がり時間によっては、待ち時間の間にウォッチドッグ・タイマがオーバーフローしてリセットがかかってしまうことも考えられます。その ようなことを避けるために、ウォッチドッグ・タイマを使用される場合には、電源の立ち上がり待ちループの中にウォッチドッグ・タイマをクリアする処理 (MOV WDTE,#0ACH)を追加してください。

・プログラム例
(アセンブラ記述の例)
        SET1    LVIMK           ; 低電圧検出割り込みのマスク(念のため)
        MOV     LVIS,#9         ; 検出電圧(2.7V)を設定
        MOV     LVIM,#80H       ; 割り込みモードで低電圧検出を開始
        MOV     B,#6            ; ループカウンタを設定
LOOP1:
        DBNZ    B,$LOOP1        ; 10マイクロ秒以上待つ
LOOP2:
        MOV     WDTE,#0ACH      ; ウォッチドッグ・タイマ使用時のみ入れる
        BT      LVIF,$LOOP2     ; 電源の立ち上がりを待つ
        CLR1    LVIIF           ; 割り込み要求フラグのクリア
(C言語記述の例)
#pragma NOP
        :
        unsigned char work;
        :
        LVIMK = 1;              /*低電圧検出割り込みのマスク */
        LVIS = 0b00001001;      /*検出電圧(2.7V)を設定 */
        LVIM = 0x80;            /*割り込みモードで低電圧検出を開始 */
        for (work = 0; work < 4; work1++){
                NOP();
        }                       /* 10マイクロ秒以上待つ */
        while(LVIF){
                WDTE = 0x0AC;   /* ウォッチドッグ・タイマ使用時のみ */
        }                       /* 電源の立ち上がりを待つ */
        LVIIF = 0;              /*割り込み要求フラグをクリア */

[クロック発振開始処理]
・具体的な処理
電源電圧が必要なレベルになったら、X1の発振を開始させるための処理をOSCCTLレジスタの設定により行ないます。まず、発振させるクロック周波数に 応じたAMPHビットの設定を行ないます。次にEXCLK及びOSCSELを設定します。これらの設定が終わったらMSTOPビットをクリアすることで、 X1の発振が開始します。

・プログラム例
(アセンブラ記述の例)
        CLR1    AMPH            ; 10MHzを超える場合にはSET1を使用
        CLR1    EXCLK           ; 初期値は0なので必要はないが念のため
        SET1    OSCSEL          ; X1発振モードを選択
        CLR1    MSTOP           ; X1発振開始
(C言語記述の例)
        AMPH = 0;               /* 10MHzを超える場合には1にする */
        EXCLK = 0;              /* 初期値は0なので必要はないが念のため */
        OSCSEL = 1;             /* X1発振モードを選択 */
        MSTOP = 0;              /* X1発振開始     */

[X1発振安定待ち]
X1発振開始を設定しても、直ぐに発振ができるわけではありません。必ず、発振が安定するまで待つ必要があります。FAQの「クロック発振安定時間」も参照してください。

・具体的な処理
発振安定までの待ち合わせはOSTCレジスタで行ないます。X1発振で使用する水晶振動子やセラミック発振子に応じてOSTCレジスタのビット4~0のど れかのビットがセットされるまでを待ちます。通常、セラミック発振子で発振回路のマッチングがとれていれば、100μ秒程度で十分なので、ビット4がセッ トされるのを待ちます。

・プログラム例 (アセンブラ記述の例)
LOOP3:
        MOV     WDTE,#0ACH      ; ウォッチドッグ・タイマ使用時のみ入れる
        BF      OSTC.4,$LOOP3   ; 発振安定を待つ
(C言語記述の例)
        while(OSTC.4 == 0){
                WDTE = 0x0AC;   /* ウォッチドッグ・タイマ使用時のみ */
        }                       /* 発振安定を待つ */

[クロックの切り替え]
X1発振が安定したら、動作クロックを高速内蔵発振器からX1に切り替えます。切り替えが終わったら、使用しない高速内蔵発振器を停止します。これで、X1クロックへの切り替えは完了です。後はPCCレジスタでクロックの分周比を設定してください。

・具体的な処理
MCMレジスタのXSELビットとMCM0ビットをそれぞれ1にセットすることで動作クロックを切り替えます。切り替わったことはMCMレジスタのMCS ビットが1になることで確認します。その後、RCMレジスタのRSTOPビットを1にセットすることで高速内蔵発振器を停止します。

・プログラム例
(アセンブラ記述の例)
        MOV     MCM,#00000101b  ; クロックを切り替える
LOOP4:
        BF      MCS,$LOOP4      ; 切り替わりを待つ
        SET1    RSTOP           ; 高速内蔵発振器の発振停止
(C言語記述の例)
        MCM = 0b00000101;       /* クロックを切り替える */
        while(MCS == 0){
                NOP();
        }                       /* 切り替わりを待つ   */
        RSTOP =1;               /* 高速内蔵発振器の発振停止 */

 

他にご質問がございましたら、リクエストを送信してください