mbedにLPC4337のCMSIS Driverを移植してみた

以前作ったmbedアカウントがClassic Developer Siteと呼ばれていることに戸惑いつつ、LPC4337の環境向けにCMSIS Driverを移植しました。

CMSIS Driverに関しては、mbedはかなり混乱している印象です。まず、誰がコードの配布に責任を持っているのかはっきり明示されていません。ただ、ARMが「CMSISはいいぞ!」とぶち上げ、githubにCMSISリポジトリを公開し、KEILも最新リリースに基づいた文書を公開しています。その傍らで、NXPは独自版を配布しています。

LPC176xに関して調べてみると、NXPによるドライバ公開は2013年初頭で、CMSIS 2.0ベースです。一方、ARMがリポジトリで公開しているNXP用ドライバはCMSIS 4.5対応のようで、コピーライトは2013年からとなっています。両者の構造は別物で、ARMとNXPの間にある不連続は不可解です。いずれにせよ、ARM版はRETコンフィグレーションと呼ばれるヘッダーファイルの一部が欠落しており、リポジトリからとってきてもそのままでは動きません。また、mbedライブラリは古いCMSISがベースのようです。従って、作業にはLPC43xx向けにNXPが公開しているドライバを使いました。

今回、I2SとNVICが使える最小の構成をmbed向けのライブラリとしてインポートしました。

image

移植に当たっては問題が全く無いわけではありませんでした。

一番困ったのは、標準のmbedライブラリの中に、中途半端にCMSISが使われていることです。特にLPC43xx.hには頭を抱えました。CMSIS DriverのNXP公開版はwindowsで試験されているらしく、ファイル名が大文字小文字入り乱れています。一方、mbedのサーバー環境はUnix互換環境なのか、大文字小文字を区別します。

仕方ないのでlpc43xx.hの中からLPC43xx.hをインクルードする事でこの場をしのいでいます。これに従って両者の微妙な違いがDriverでビルドエラーを引き起こしますのでひとつひとつエラーメッセージを確認しながら潰していきました。

ビルドが終わっただけなので、動くかどうかは別の話です。上のエラーつぶしで何らかのバグが紛れ込んでいても、なんの不思議もありません。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください