mathjax

2018年4月30日月曜日

LPC810 - ROM I2C API

挿すだけ! ARM32ビット・マイコンのはじめ方」に従い進めているのだが、飽きてきた。「そうか、レジスタの使い方を読んで書けばいいんだな。後はその繰り返しじゃないか。」と思ったからだ。

少し先にページを進めてみると、69ページにROM I2C APIなる文言が。これを使う為には、図110に示すromi2c.hが必要ですよと。なんでもLPC810はRAMサイズが小さいこともあり、ROM上に幾つかの機能が実装されているのだとか。ユーザー・マニュアルの1.2 Feturesにも確かに下記のように書いてある。
ROM API support:– Boot loader.– USART drivers.– I2C drivers.– Power profiles.– Flash In-Application Programming (IAP) and In-System Programming (ISP).

 2.2.1 Memory mappingのFig 2. LPC81x Memory mappingを見ると、0x1FFF 0000h~0x1FFF 2000hが8kB boot ROMとなっていて、21.5.2 ROM-based APIsのFig 43. Boot ROM structureを見ると、Ptr to ROM Driver table 0x1FFF 1FFF8のOffset 0x14のところにPtr to I2C driver routine function tableがあると書いてある。

そして、boot romの構造は次のようにincludeしなさい。
typedef struct _ROM_API {
const uint32_t unused[3];
const PWRD_API_T *pPWRD;
const uint32_t p_dev1;
const I2CD_API_T *pI2CD;
const uint32_t p_dev3;
const uint32_t p_dev4;
const uint32_t p_dev5;
const UARTD_API_T *pUARTD;
} ROM_API_T;
#define ROM_DRIVER_BASE (0x1FFF1FF8UL)
と書かれている。ユーザー・マニュアルの方々に、定義の仕方が散りばめられていて、中村先生(著者)はそれを一生懸命にromi2c.hにまとめて下さっているのだ。。。何してるんだNXP。ちょっとしかないAPI群なんだし、SDKに入れておけ。romi2c.hの写経は辛いだけなので行わない。LPCOpenになったら改善しているのだろうか?

0 件のコメント:

コメントを投稿