脱公務員電子回路設計エンジニア

ピン割込み入力を使ってみる

回路図

 回路図です。 ここら辺りから難しくなってくる感じでした。
 プログラムも長くなってきてます。SW3が新たに付け加わりました。

補足説明

 ちょっとここはハマりました。
なのでメモを残しておきます。

PINTSELのレジスタの設定に関して

 この理解に苦しみました。一度理解してしまえばなんてことはないのですが、ユーザーマニュアルの説明だけだと理解しにくかったです。
改めてまとめるとLPC810は,NVICのベクタテーブルにピン割込みに対応する割込み番号24~31の8レジスタ存在する(PINT0_IRQHandler()~PINT7_IRQHandler()が使用できる)。
 ピン割込みに使用できるIOはマニュアルでは。PIO0_0~PIO0_17までですが、LPC810は、実際にI/Oとして存在するのがPIO0_0~PIO0_5までしか存在しないのでPINTSEL[]に設定する値自体は0~5までしかありえません。
 ここでPINTSEL[]に何番を使用するかですが、PINTSEL[0]~PINTSEL[7]までどれでも使用できます。
 例えば、IRQ番号31番を使用して、PIO0_1をピン割込みに使用したいなら、以下のように設定すれば割込みがかかります。  もちろん、使用する割込み関数は、void PININT7_IRQHandler(void)です。

後で気づいたことですが

I/Oに値を設定したり、読み出したりするのに毎回ビットシフトを市よ応して読み出すようなプログラムが今回参考にしている本やトランジスタ技術の記事では紹介されておりますが、私自身この記述方法がかなり分かりに杭と感じており、なんか他に良い記述方法がないかと思っておりましたが、こんなレジスタがあるようです。