LPCOpen2.01の功罪

LPC81x User manualで理解できなかったROM APIの割り込みハンドラi2c_isr_handler、割り込み受信用i2c_slave_receive_intr、割り込み送信用i2c_slave_transmit_intrの関係が、LPCOpen2.01のサンプルで理解できた。i2c_slave_receive_intrとi2c_slave_transmit_intrは非ブロッキング関数で、送受信のとき呼び出すのではなく、あらかじめ呼び出しておく。呼び出すと送受信を保留してすぐ戻る。保留した送受信は割り込みハンドラi2c_isr_handlerを呼び出したとき実行される。この重要な事実が、LPC81x User manualに説明されていない。理解できるわけがない。よく読んだら説明されていた。

LPC810のプログラムはLPC800-MAX board対応LPCOpenのライブラリlpc_chip_8xx_libだけを使って作るのが合理的。LPCOpen2.01のサンプルはソースで余計な関数の呼び出しを削除してもプロジェクトのプロパティに余計な設定があっていろいろなライブラリをリンクする。LPC810のROM APIのI2Cで紹介したプロジェクトは主としてサンプルのソースを編集しただけなので3700バイトあるが、新しいプロジェクトを作って書き直したら1496バイトに減った。これでI2Cに加えて役に立つ機能を作り込める。

現時点で最新のLPCOpen2.01は、ROM APIを使う場合、ライブラリlpc_chip_8xx_libのソースsysinit_8xx.cの関数Chip_SystemInitにやや問題がある。明らかな問題は、ROM APIの関数set-pllを呼び出すときcmd[3]に設定するべきパラメータをcmd[2]に設定していること。これはバグだから無条件に修正が必要。もうひとつの小さな問題は、この部分でクロックを24MHzに設定していること。LPC810は最高30MHzで動作するからそこまで引き上げたいが、それをやるとなぜか暴走する。ボクの修正の仕方が間違っているのかもしれない。ROM APIのソースがわからないから検討のしようがない。ブラックボックスというのは、ひとたび疑念が生じると、たいへん始末が悪い。

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

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中