LPC810M021FN8 (1) -- シリアル ISP (1)

以前から発表されていたものの、やっと最近になって容易に入手できるようになった NXP 社の 8 ピン DIP の Cortex-M0+ マイコン LPC810M021FN8 を手に入れました。
当面の主な用途としては、MIDI 入力のみの「無限音階オルガン」を考えていますが、LPC1114FN28/102 となるべく共通化してプログラムを開発したいと思っています。
実際に触ってみると、当初思っていたより LPC1114 の周辺モジュールと差があるので、LPC1114 用のプログラムの流用が難しいことが分かりました。
そのため、当面は「無限音階オルガン」のカテゴリーに入れずに、LPC8xx のカテゴリーとして独立させることにしました。
LPC8xx には独立した PWM モジュールや、タイマの PWM モードがなく、SCT (State Configurable Timer) を使って PWM を実現します。
実際に「Edge Aligned PWM」と「Edge Centered PWM」を実現するプログラムを組んで確認しました。
PWM の実現には SCT の「ウリ」である「ステート」を使用する必要はなく、単に「イベント」定義を使うだけです。
そのプログラムは次回以降に掲載します。
LPC8xx では、フラッシュ書き込み方法として、SWD (Serial Wire Debug) およびシリアル・ブートローダ (シリアル ISP) に対応しています。
JTAG 接続もサポートしていますが、これはバウンダリ・スキャンの目的のためで、フラッシュ書き込みおよびデバッグには対応していません。
8 ピン DIP である LPC810M021FN8 では、JTAG 接続すると、JTAG 信号の TRST / TCK / TMS / TDI / TDO の 5 本と、ハードウェア・リセット信号の RESET 1 本の計 6 本を消費してしまい、VDD / VSS の電源ピンを除く 6 ピンすべてが JTAG のために使われてしまいます。
「コード・プロテクション」がかかっていない場合のみ SWD 接続が可能です。
LPC-Link や、CMSIS-DAPバイスなどの NXP 社の Cortex-M マイコンで使える SWD プローブを持っていないので、シリアル接続によるブートローダを利用することにしました。
製作の手間を省くために、LPC810 を LPC1114 + PIC32MX ボードに同居させ、 LPC1114 側の RS232C インターフェース回路をジャンパ・ピンで切り換えて使っています。
ジャンパ・ピン切り換えおよび PIC32MX 側の回路を省略した回路図を下に示します。
(2013 年 12 月 19 日追記: 12/19 の記事の内容に合わせ、当初の回路からクリスタル・オシレータ回路部分を変更しました。)

LPC810 の内蔵 12 MHz RC オシレータの周波数精度はスペック上 1.5 % となっていますが、実際のチップ 1 個を測定した結果では、約 -0.2 % の誤差でした。
MIDI to CV のように、シリアル接続が主な用途では十分な精度ですが、「音程」を発生させる「楽器」の用途では、外部クロック入力にクリスタル・オシレータを接続して正確な周波数のクロックを使う必要があります。
上の回路図では、外部クリスタル・オシレータとして 5 V 定格の SG531P を 3.3 V 電源で使っています。
LPC810 を外部クロックで使用すると、ISP との兼ね合いで少し問題があるのですが、その話は次回に回します。