LPC810のROM APIのI2Cを理解した

LPC810のROM APIのI2Cのスレーブを割り込みで動かす方法を理解した。とはいえ今日は理解していても明日になったら忘るかもしれないので、ソースを切り分け、ライブラリ風にまとめた。以前、LPCOpen2.01のサンプルを編集した「何はともあれ動くプログラム」を公開したが(LPC810のROM APIのI2C参照)、これはサンプルのバグがそのまま残っていて、動いたことがむしろ不思議なシロモノだった。それをダウンロードした人がソースを解析してもどうして動くのかぜんぜんわからないと思う。ほうっておいたら申し訳ないので、あらためてちゃんとしたやつを公開する。

下のアーカイブにはLPCXpresso IDEのプロジェクトがふたつ含まれる。ひとつはlpcopen_2_01_lpcxpresso_lpc812max.zipの中のライブラリlpc_chip_8xx_libのバグを修正したもの、もうひとつはLPC810を周波数カウンタとして動かすfrq810。そのfrq810のほうにROM APIのI2Cのスレーブを割り込みで動かすソースi2cs.cとヘッダi2cs.hがある。関数の仕様はi2cs.hにコメントで書いてある。使い方の具体例は周波数カウンタの本体frq810.cをご覧いただきたい。

frq810は4バイトを読み出すと32ビット長の周波数が得られる。1バイトを書き込むとサンプリング期間を変更できる。サンプリング期間にあわせてLEDが点滅する。もしI2Cでエラーが発生するとブザーが鳴る。その他の細かいことはソースで理解してもらいたい。動作確認した様子を下に示す(ちゃんと動いた証明にはならないだろうけど)。Arduinoでサンプリング期間を変えながら周波数を読み出している。周波数はもうひとつのLPC810が生成。これでARMのデュアルコアである。

LPC810Freq

現在、PICやArduinoで成功したことを順次LPC810でもやってみているところ。LPC810ならではの働きが実現するのはもう少し先になりそう。

広告
カテゴリー: LPC810 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中