LPC810の省電力モードでいろいろハマった

d.hatena.ne.jp
こちらの記事を参考にしながら、Deep-sleep modeに入ったり、Deep power-down modeに入ったりしてみた。
gist.github.com
とりあえず、main以外は、こんな感じ。
gist.github.com
最初はこんな感じだったと思う。
これだと、割り込みでWAKEUPした後、Deep-sleepに入ると、タイマーで復帰しなくなる。

	    	// Needed?
NVIC_ClearPendingIRQ(WKT_IRQn);
NVIC_DisableIRQ(WKT_IRQn);
LPC_PMU->DPDCTRL = 0;
SCB->SCR = 0;
LPC_WKT->CTRL |= (1 << 1) | (1 << 2);

Needed?のところがまずかったらしい。
あと、LPC810メモ:deep power-downモード(Self wake-up timerで復帰) - みっかぼログにある、次のサンプルコードも原因の一つだった。

        // DPDFLAG(11)が立ってるので、deep power-downからの復帰である。
//	同フラグをクリア
LPC_PMU->PCON &= ~(1 << 11);

正しくは次の通りだ。

LPC_PMU->PCON |= (0x1<<11);

この修正を加えることで、ピン入力でWAKEUPしたあと、Deep-sleepに入ってもタイマーでちゃんと復帰するようになる。
しかし、これではDeep power-downに入った後、復帰後Deep-sleepに入ろうとすると一瞬で処理が終わる。
スリープしていない。
Needed?の部分は、LPC812, WKT, deep power down mode: working only once... | www.LPCware.comにあったのを持ってきたり、Deep power-downで消し忘れたレジスタがあるのでは無いか疑惑を払拭するために追加したのだが、これはまずかったみたい。
正しくは次の通りみたいだ。

	    	LPC_WKT->CTRL |= WKT_CLR;
NVIC_ClearPendingIRQ(WKT_IRQn);
NVIC_DisableIRQ(WKT_IRQn);

この修正を加えることで、ちゃんとスリープから復帰する。

しかし、フラグをクリアするのに、0を代入するんじゃ無くて、1を代入するとか罠だよな。
今年も残りわずかだが、なんとか年内に記事を公開できそうだ。

00:07追加
あけましておめでとうございました。
修正後のmainを貼り忘れた。
gist.github.com
直すと、こんな感じになるかと思う。

MADOSMAをWindows 10 Mobileにした

救済措置で送料分返金されたので、その分、何らかのお返しをすべく、マウスコンピューター秋葉原ダイレクトショップでアップグレードを依頼した。
Windows 10 Mobileにしたのはいいが、早速、不便な点が2点ほど
まず、ロック画面が天気予報にならない。
そして、メールアカウントごとに異なる着信音が設定できない。
というか、そもそも音が鳴らない模様…
これは不便だ。
既存のコードを捨ててスクラッチから書き直している部分が多いのかな。Edgeなんかはそうだよな。完全に作り直している。今まであった機能がなくなるというのは少し不便ですな。