LPC1114FN28/102 (1)

現在、VCF の実験は一時中断して「トランジスタ技術」誌 2012 年 10 月号付属の LPC1114FN28/102 (NXP 製、Cortex-M0 コア、600 mil 幅 28 pin DIP、最大クロック 50 MHz、フラッシュ ROM 32 KB、SRAM 4 KB) の実験をしています。
フラッシュ・メモリの書き込み方法としては、

  • 内蔵 ROM を利用したシリアル入力からの書き込み
  • いわゆる「JTAG プローブ」を利用した SWD 接続での書き込み

の 2 種がありますが、ここでは簡単および追加費用なしでできる、「積み基板」と化している CQ 出版の雑誌の付属基板の USB-シリアル・インターフェース部のみを利用したシリアル書き込みを行っています。
詳細については次回の記事に回します。
インターフェース誌の付属基板で、ARM7TDMI コアの LPC2388 は使ったことがありますが、NXP 製の Cortex-M コアのプロセッサは、mbed にしろ LPCXpresso にしろ、少し「割高」なので今まで使ったことはありませんでした。
Cortex-M0 コアを触るのは初めてではなく、実は 2011 年の秋ごろ Nuvoton の NuMicro NUC120 プロセッサ (フラッシュ 128 KB、SRAM 16 KB) のボード (SDK-NUC120、秋月の通販コード: M-05028) を購入して、FM 音源プログラムを移植していました。
しかし、その当時は期待したような性能が得られず、プログラムも公開しませんでした。
その後、FM3 用の FM 音源プログラムを作成する過程で、elf/eabi のストラクチャのアライメント/パッキングの問題にぶつかり、NUC120 用のプログラムも見直したところ、性能劣化の原因が「アライメント」にあることが判明しました。
Cortex-M0 プロセッサではアライメント・エラーは即例外となるので、リンク時に 4 バイト・アライメントとなる場合でも gcc コンパイル時に 4 バイトや 2 バイトのアライメントが (__attribute__ などで) 保証されていないと、1 バイトアライメントを仮定して 1 バイトずつアクセスしていくようなコードが生成されます。
これが原因で、32 ビット・プロセッサなのに 8 ビット・プロセッサのようなデータ・ロード/ストアのコードとなり性能を低下させていました。
アライメントを明示してコンパイルすると、ほぼ期待通りの性能となりました。
CPU のクロック周波数 48 MHz で、サンプリング周波数 15.625 kHz、同時発音数 9 です。 (比較表は→こちら)
LPC1114FN28 の場合にはフラッシュが 32 KB しかなく、FM 音源プログラムをそのまま動作させることはできません。
動作させるにはプログラム/テーブル・データを相当削らなければならず、やるかどうかは未定です。
MIDI2CV などの用途には十分だと思われます。
また、32 ビット・カウンタ/タイマを持っているので、オーディオ帯域程度の入力周波数でゲートタイム 1 s 程度のレシプロカル・カウンタ (周期カウンタ) を容易に実現できます。