久しぶりにARM CORTEX-M3チップをいじりました。まだデバッグに取り掛かっていませんが、LPC1769からLPC1830へシステム依存部の移植が数時間ほどで完了しました。
CORTEX-M3に関しては、LPC1769をターゲットにしてRTOS移植、オーディオフレームワーク開発を行っていましたが、一年以上だらだらやった結果、どうしてもDMAの起こす例外の原因が分からずにゴールデンウィーク頃にいじるのをやめたのでした。例外が起きる原因がプログラマである私であろうことは予想がついているのですが、例外を起こしたDMAに一切のエラー・ステータスが残らないのでは手の打ちようがありません。おまけにICEを抜いた時だけクラッシュするとか、もう。仕事なら徹夜してでも、ということなのでしょうが、残念ながらこっちは遊びです。
実はLPC1769の後はLPC1800 -> LPC4300へのステップアップまで考えて基板を設計していたのですが、何しろLPC1769が上のような状況でした し、LPC4300もいつまでたってもFlashのバグが取れた版が出ないため、あきらめた次第です。LPC4300も発表されてからもうすぐ2年ですか。
そんなこんなでゴールデンウィーク以降は放置状態だったBlackfin関係に存分に取り組んでいたのでした。新しいリリースで対応プロセッサを広げ、いまやTOPPERS/JSP for BlackfinはBF50x, BF51x, BF533, BF537, BF54x, BF592と、ずいぶん多くのチップで動くようになりました。システム依存部から早いうちにチップ依存部を独立させたのが功を奏していると思います。また、長い間懸案だったデバッガからのブートの安定性問題も解決しました。TWIドライバも完成し、TalkthroughもBF592で動き出していますから、この後はリファクタリングを進めてコードを整えたら、存分にオーディオで遊べます。
とまぁ、CORTEX-Mx抜きで楽しくやっていたのですが、先日NXPから、LPC4330 Xplorer日本発売の発表がありました。このボード、ワンボードでI2Sオーディオ入出力まで持っているうえに、ピンがDIP配置なのでブレッドボードで遊べます。また、同じ構成のLPC1830 Xplorerも同時発売されました。現在同ボードはマルツで購入することができます。
さて、一度は投げ出したCortex-M3ですが、これほどオーディオ入出力の敷居が低くなるならいじってみようかなという気がしないでもありません。そういうわけで、オーディオフレームワークを載せるかどうかは別として、TOPPERS/ASPを移植してみることにしました。
手始めに買ったのはLPC1830 Xplorer基板です。LPC4330ではなくLPC1830版を購入した理由を説明するには、LPC1830とLPC4330の違いを説明しなければなりません。この二つのマイコンは次の点を除いて互換性があると言われています。
- LPC4300はCORTEX-M4FとCORTEX-M0のデュアルコアだが、LPC1830はCORTEX-M3のシングルコア
- LPC4330はプログラマブルのシリアル・コントローラを持っているが、LPC1830は持っていない
- LPC4330は204MHz、LPC1830は180MHz
つまり、こういった要素を抜きにすれば、両者はピン互換であり、ペリフェラル互換です。ですので、1年ほど前にはこんなことを考えていたのでした。まず、LPC1769からTOPPERS/ASPをLPC1830に移植します。これはCPUコアが同じで、かつタイマーやUARTの構成が同じですので、割り込みコントローラなどのわずかな修正で移植できるはずです。この規模の移植はTOPPERS/JSP for Blackfinでやっていますので作業量を見積もりやすいと考えました。次に、LPC1830からLPC4330にTOPPERS/ASPを移植します。この移植はペリフェラルの部分がほぼ完了しているため、CORTEX-M3からCORTEX-M4FへのCPU依存部の移植だけで済むはずです。両CPUはFPUの有無と、多少のインストラクションの追加のみの差しかありません。つまり、コンテキストスイッチと割り込みの出入り口の変更だけで対応できるはずです。
今回、1年間放置していた上のアイデアを実行するために、まずはLPC1830への移植に取り掛かった次第です。
一番の難関はというと、実はターゲットではなくて開発環境です。開発環境に関してはいくつか課題がありました。
- 以前使っていた開発環境設定スクリプトはUbuntu 10.04 LTS用だが、現在使っている環境はUbuntu 12.04 LTS。10.04 LTSは遠からずサポートが切れるので移行は必須。
- ARM開発ツールチェーンとして使っていたCodeSourceryがMentorに買収されたため、登録しないとツールをダウンロードできない。以前使っていたツールもCORTEX-M4F対応だが、いかんせん古いのでアップデートはしたい。
- ターゲットのJTAGポートは、ARMが最近推している狭ピッチ10ピンコネクタであり、手になじんだICEと物理的互換性がない。
- LPC-Link、Ulink meといった事実上無料といっていい格安ICEが出回っており、てもとにあるが、事実上ツールベンダーとひも付きなので、OpenOCDからは使えない。
立ち止まっている間に変革期に呑み込まれた感があります。結局これが原因でこの週末にはデバッグに取り掛かれませんでした。手元にないんですよ。ICEが。
仕方がないのでツールチェーンのみ手作業で設定した後、TOPPERS/ASP for LPCのソースに取り掛かりました。
以下、続きます。