R8C/1x 発振停止検出機能について

こんにちは、entakeと申します。お世話になっております。

電源起動後、XINクロック(20MHz)に切り替えていますが、万が一XINクロック供給が途絶えた時のために、発振停止検出機能を使おうと考えています。

R8C/1Bのハードウェアマニュアルによると、同機能は、メインクロック発振回路の停止を検出すると、自動的に低速オンチップオシレータ発振設定(cm14=0)&オンチップオシレータ選択(ocd2=1)とし、発振停止検出割り込みにジャンプするようです。

ジャンプした後の動作ですが、「低速オンチップオシレータからメインクロックへの切り替え手順」として同マニュアルに参考フローが載っています。
(1)ocd3でメインクロック復活確認 ※永久ループ
(2)復活後→発振停止検出機能は無効にセット
(3)ocd2でメインクロックに切り替え

⇒この通りに作ると確かに正しく動くのですが、上記(2)を削るとなぜか上手く動きません。(UART通信ができない)

発振停止検出機能を有効にしたまま、動作を継続できればベストなのですが、何かお分かりの方、お願いいたします。
Parents
  • entakeさん

    すと@konです。

    R8C/12のH/Wマニュアルを参照してコメントしています。

    発振停止検出に関してですがフローチャート上で示されているのは、

    ・メインクロックの発振確認(まだメインクロックで動作していない)
    ・発振停止検出機能を無効(メインクロック動作前なので)
    ・メインクロック動作開始

    となっています。つまり、メインクロックが正常に動作した後(メインクロック動作開始以後)であれば、再び発振停止検出機能を有効にしてもいいと思います。



    メインクロック停止を検出した後の処理ですが、割り込み内でメインクロック復帰を待つのはいいと思いますが、外部から見るとダンマリになるため、何が起きているか判断がつきません。
    また、クロックが破損、破壊があったときには電源onのまま復旧しません。

    発振停止割り込み内では、まずはアクチュエータ関連の全出力をoff。リトライ回数を決めて復旧できるならソフトウェアリセット等の初期化処理(クロックに異常が発生するくらいなら他の周辺機能に影響も考えられるため)、リトライを超えたらエラー表示等で電源offを促すなどの対策が必要ではないでしょうか。


    E8a接続時には高速オンチップが動作しているため、メインクロック停止後もE8aとの接続は維持されると思います。ROMの状態でもハングアップしているようなので、割り込み内の処理に何か問題があるのではないでしょうか。
Reply
  • entakeさん

    すと@konです。

    R8C/12のH/Wマニュアルを参照してコメントしています。

    発振停止検出に関してですがフローチャート上で示されているのは、

    ・メインクロックの発振確認(まだメインクロックで動作していない)
    ・発振停止検出機能を無効(メインクロック動作前なので)
    ・メインクロック動作開始

    となっています。つまり、メインクロックが正常に動作した後(メインクロック動作開始以後)であれば、再び発振停止検出機能を有効にしてもいいと思います。



    メインクロック停止を検出した後の処理ですが、割り込み内でメインクロック復帰を待つのはいいと思いますが、外部から見るとダンマリになるため、何が起きているか判断がつきません。
    また、クロックが破損、破壊があったときには電源onのまま復旧しません。

    発振停止割り込み内では、まずはアクチュエータ関連の全出力をoff。リトライ回数を決めて復旧できるならソフトウェアリセット等の初期化処理(クロックに異常が発生するくらいなら他の周辺機能に影響も考えられるため)、リトライを超えたらエラー表示等で電源offを促すなどの対策が必要ではないでしょうか。


    E8a接続時には高速オンチップが動作しているため、メインクロック停止後もE8aとの接続は維持されると思います。ROMの状態でもハングアップしているようなので、割り込み内の処理に何か問題があるのではないでしょうか。
Children
No Data