CPU(NXP社LPC1114FN28)がICソケットで抜き差し可能になりました。 大きめのマイナスドライバーを隙間に差し込むと比較的簡単に取り外すことができます。 ファイル番号0に、プログラムを保存しておくと、BTNピンをGND接続で起動時に自動的に読み込まれ実行します。
その際、IchigoJam U用に書き込まれた外部クリスタル12MHz対応版の場合、クリスタルも別途付けておく必要がありましたが、 現在開発中の1.0.2β8では、外部クリスタルが付いてない時に、自動的に内蔵発振器を使って動作するように改良しました。 (開発中のファームウェアは、IchigoJam-FANのファイルからダウンロードできます)
IchigoJam-FANへ投稿いただいたWDT(ウォッチドッグタイマー)を使った方法を実装しました。
WDTとは、マイコンが自分自身がちゃんと動いていることを定期的に確認したり、自動的に再起動したりしてくれる便利な機能です。怪しいことが起きたら吠えて知らせてくれる、まさに番犬(=ウォッチドッグ)!
1. WDTによって再起動されたのであれば内蔵発振器で動かす
if (LPC_SYSCON->SYSRSTSTAT & (1 << 2)) { // IRC } else { // try XTAL }
2. 通常起動なら、WDTをまず動かす
int freqsel = 1; // 1:0.6MHz - 15:4.6MHz int divsel = 64; // 2(fast) - 64(slow) LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 15); // WDT on LPC_SYSCON->PDRUNCFG &= ~(1 << 6); // WDT on LPC_SYSCON->WDTOSCCTRL = (divsel / 2 - 1) | (freqsel << 5); // 1, 64 = 9.3kHz LPC_SYSCON->WDTCLKDIV = 1; LPC_SYSCON->WDTCLKSEL = 2; // WDT LPC_SYSCON->WDTCLKUEN = 0; LPC_SYSCON->WDTCLKUEN = 1; LPC_WDT->MOD |= (1 << 0) | (1 << 1); // enable、auto reset LPC_WDT->MOD &= ~(1 << 2); // clear timeout flg LPC_WDT->TC = 0xff; // min 0xff LPC_WDT->FEED = 0xaa; LPC_WDT->FEED = 0x55;
3. 外部クリスタルに切り替える(外部クリスタルがついてないとWDTが自動的に再起動して1へ)
LPC_SYSCON->SYSPLLCLKSEL = 1; // use XTAL LPC_SYSCON->SYSPLLCLKUEN = 0; LPC_SYSCON->SYSPLLCLKUEN = 1;
4. 外部クリスタルでちゃんと動いたら、WDTを止める
LPC_SYSCON->PDRUNCFG |= 1 << 6; // WDT off LPC_SYSCON->SYSAHBCLKCTRL &= ~(1 << 15); // WDT off
日常とコンピューターがどんどん近づけていきましょう!
(こちら、IchigoJam Uより小型なIchigoJam、クリスタルを挿しても挿さなくても動いて便利!)