SWM:スイッチ マトリクスは、LPC8xxに特徴的な機能です。
このSWMを上手く使うこと、これがLPC8xx使いこなしポイントです。パッケージの物理ピン数が少なくても、多くの周辺回路の入出力を割付けることができ、また、その自由度が高いことが普通のマイコンとの一番の違いです。
このSWM設定手順を、LPC824を例に、解説します。LPC812は、以前の記事を参照してください。
周辺回路とパッケージ物理ピンを割付けるSWM
デフォルトピン、固定ピン、可動ピン
パッケージ物理ピンにSWMで設定可能なピンは、デフォルトピン、固定ピン、可動ピンがあります。
固定ピン一覧:Fixed Pins List
![SWM Fixed Pins List(swm_8xx.hより抜粋)](http://happytech.jp/wordpress/wp-content/uploads/2015/04/4fb688438593c29ce639135b4f12101d.png)
RESETなどの専用ピンの物理ピン位置は、SWMでも変更できません。これら専用ピンは、「固定ピン」と呼ばれ「SWM_FIXED_機能」で示されます。例えば、SWM_FIXED_ADC1は、ADCチャネル1の固定ピンで、LPCXpresso824-MAX評価ボードならば、#23:PIO0_6ピンです。
#23ピンは、データシートでは“PIO0_6/ADC_1/VDDCMP”の名称がついています。PIO0_6は、GPIOを示します。全てのGPIOは、デフォルトで「入力方向の固定ピン」です。SWMでこれらGPIOの有効/無効が設定でき、デフォルトでは、「全て有効」になっています。
つまり、#23ピン:“PIO0_6/ADC_1/VDDCMP”に対してデフォルト時は、GPIO入力のPIO0_6として機能します。このピンをADC1として使うには、SWM_FIXED_ADC1固定ピンの有効化処理が必要です。
デフォルトピン一覧:LPC824M201JHI33
LPCXpresso824-MAX評価ボード実装パッケージ:LPC824M201JHI33の、デフォルトピン割付けが下記です。
![LPC824M201JHI33パッケージデフォルトピン割付け](http://happytech.jp/wordpress/wp-content/uploads/2015/04/160c96fa79dffff626ff4aa841654bdc.png)
可動ピン一覧:Movable Pins List
![SWM Movable Pins List(swm_8xx.hより抜粋)](http://happytech.jp/wordpress/wp-content/uploads/2015/04/ee9a14528c5cd6017233e50a53f2d7ab.png)
USART、SPI、 SCT、I2Cなどの通信機能やアナログコンパレータ出力などは、パッケージの物理ピン割付けをSWMで設定します。これらは、「可動ピン」と呼ばれ、「SWM_機能」で示されます。これら可動ピンは、割付ける固定ピン機能が無効になっている場合にのみ、そこへ可動ピンを割り当てることができます。
可動ピン種類が多く、割当て可能なピン位置も多いので、パッケージの少ないピンを状況に応じて有効に活用できます。
LPC824使用ピン設定手順
以上から、LPC824のピン設定手順は下記になります。
![LPC824ピン設定手順](http://happytech.jp/wordpress/wp-content/uploads/2015/04/246eb334d962affaf87900b364c0356c.png)
LPCXpresso824-MAX評価ボード実例
評価ボード実装済みの3色LEDに対してGPIO出力へ設定した例です。Chip_XYZ()は、LPCOpenライブラリ提供のAPIです。
![ボード実装済みLEDのGPIO出力設定](http://happytech.jp/wordpress/wp-content/uploads/2015/04/ad609f9ad25e914aed77727d23afbce3.png)
可動ピン:UART1のTXD_OとRDX_Iを、P0_7とP0_18へ設定した例です。UART1は、評価ボードUSB経由のVirtual COMとして機能します。
![可動ピン:UART1機能の設定](http://happytech.jp/wordpress/wp-content/uploads/2015/04/2bd081c669180a05eee957cf5d4cf4f7.png)
WebベースのSWMツール
パッケージピンと周辺回路の接続をGUIで設定し、これ対応のSWMソースコードを出力するWebツールがあります。前述のピン設定手順は、ピン毎に設定が必要ですが、一括でSWMを設定するソースが生成されます。
割付け済み機能のみが、GUIパッケージピンに表示されるので重宝します。ピンリストなども出力可能です。
※個人的には、このツールと逆方向、つまり、ソフト設定に応じたパッケージ割付けを自動出力する検証ツールがあればと思いますが…。
![Web SWMツールのGUI設定とソース出力例](http://happytech.jp/wordpress/wp-content/uploads/2015/04/dc0c34c9d8cf812302366cf8a4b19498.png)
LPC8xxテンプレートの対応
SWM出力ソースは、一括設定のため可読性が低くなります。弊社LPC8xxテンプレートは、LED出力やSW入力などの機能毎にソース分けて作成し、必要に応じて組合せて使います。そこで、このツールは使わずに、LPCXpresso824-MAX実例と同様、それぞれのソースで「必要ピン設定のみを行う」方法を採用しています。
* * *
LPC824対応のLPC8xxテンプレートは、2015年4Eを目標に開発してまいりました。しかし、LPCOpenライブラリv2.15、2015/01/08のGPIOのAPIに不具合がありますので、テンプレート開発を「一時停止」し、ライブラリ不具合の改版後に再開いたします。
LPC824対応テンプレートのリリース時期などは、今後掲載予定です。