mbed小ネタ (ソフトウェアによるリセット)
先日、香川県で開催された「えれくら」という電子工作系のイベントに参加しました。
えれくらでは、LPC1114FN28を使用した「がちゃコンボード」というマイコンボードのキットを頒布しています。それを多少(かなり?)アレンジして製作したものがこちらです。
プログラムの開発環境としてmbed Compilerを使っているので、タイトルもとりあえずmbedとしています。
そしてこれに合体できるような、キャラクタLCDディスプレイと、秋月電子で販売されているUSB-シリアル変換モジュールを載せたボードを作ってみました。(こちらはえれくらのキットではありません)
こういうしょぼしょぼ製作物を持っていってドヤッしたわけですね。^^;
さて、このがちゃコンボード、写真を見ていただくと2種類のスイッチがあります。十字に並んだキーは、押したスイッチによって抵抗の分圧比が変わり、それをADCで読み取ることで押されたキーを判別するという仕組みです。
一方2つ横に並んだスイッチは、汎用のIO(GPIO)で読み取ります。プルアップをONにしてスイッチからのL入力を判定する方法です。
問題は2個並んだスイッチで、このうちの一つがDP23に繋がっています。LPC1114FN28のDP23はノーマル状態でリセット端子の機能となります。つまり、
- 何も設定しなければリセット端子になるので、通常スイッチの入力として使いたい場合はGPIOに設定(DigitalIn)する
- GPIOとして設定するとリセットの機能が無効になるので、手動でリセットをかけられる端子が無くなる
ということになります。
がちゃコンボードのような趣味用途のボードでは、手動でリセットが出来ないとかなり不便です。そこでソフトウェアリセットを使用して、特定のキー入力でリセットがかかるようにしてみました。
ググればすぐ出てきますが、ライブラリ周りの関係からか mbed_reset() は使用できませんでした。NVIC_SystemReset() でリセットすることが可能です。例えば次のようなプログラムを書きます。
DigitalIn din1(dp23, PullUp);
DigitalIn din2(dp25, PullUp);
・・・
if (~din1 && ~din2) {
NVIC_SystemReset();
}
前述の、がちゃコンボードに合体させた自作ボードでは、DP24を引き出してスイッチを取り付けています。(写真ではLCDに隠れて見えませんが・・・) そしてここにソフトウェアリセットを割り当てています。
LPC1114FN28のDP24をL印加した状態で電源投入またはリセットをかけると、ISPモードに入ります。よく訓練されたmbedユーザーなら常識ですよね。
つまりこうすると、プログラムが正しく動作する限りという条件がつきますが、スイッチを押すだけでISPモードに入ることができ、プログラムの書き換えが楽になります。
そしてISPモードの時、DP23はノーマル状態になりリセット端子として働きますので、通常のリセット(ハードウェアリセット)をかけるときは、DP24→DP23と2回スイッチを押します。
逆にリセットが多少面倒になる・・・というのは、この際我慢ということで。