富士通のFM3を搭載したCQ基板で遊んでいる。
まだ遊ばれているというところではあるが・・・。
LPC-2388は、まだなんかわかったような気がしている。
しかし、Cortex-M3になって複雑になったのか、FM3はなんかよくわかっていない。
ドキュメントは日本語があるのだ。
これは大きい!
でも・・なんかわかりにくい。
なんでだろう?
富士通マイコンのドキュメントを読むのが久しぶりなせいか、なんかわかりにくい。
ドキュメントの構成のせいなのか、Cortex-M3が複雑なのか、他に要素があるのか、そこらへんがわかっていない。
ただ、1つだけ。
1つだけ気になったことがあった。
外部割り込みのレジスタ名だ。
いや、レジスタをCソースで扱うためにビットフィールド定義したmb9b610t.hのフィールド名だ。
今回、FeliCa Plugからの割込を受け付けるために、FM3から2つの外部割り込みピンを使おうとしている。
FM3のつくりかCortex-M3のつくりかしらないけど、外部割り込みは0~7chと8~31chの2つに分かれている(アプリケーションノートには8~15chとあったけど、違うチップかしら?)。
0~7chはIRQ4に、8~31chはIRQ5に割り当てられている。
そこまではいい。
気になるのは、C定義だ。
IRQ4
typedef struct stc_intreq_irq04mon_field
{
__IO uint32_t EXTINT0 : 1;
__IO uint32_t EXTINT1 : 1;
__IO uint32_t EXTINT2 : 1;
__IO uint32_t EXTINT3 : 1;
__IO uint32_t EXTINT4 : 1;
__IO uint32_t EXTINT5 : 1;
__IO uint32_t EXTINT6 : 1;
__IO uint32_t EXTINT7 : 1;
} stc_intreq_irq04mon_field_t;
IRQ5
typedef struct stc_intreq_irq05mon_field
{
__IO uint32_t EXTINT0 : 1;
__IO uint32_t EXTINT1 : 1;
__IO uint32_t EXTINT2 : 1;
__IO uint32_t EXTINT3 : 1;
__IO uint32_t EXTINT4 : 1;
__IO uint32_t EXTINT5 : 1;
__IO uint32_t EXTINT6 : 1;
__IO uint32_t EXTINT7 : 1;
__IO uint32_t EXTINT8 : 1;
__IO uint32_t EXTINT9 : 1;
__IO uint32_t EXTINT10 : 1;
__IO uint32_t EXTINT11 : 1;
__IO uint32_t EXTINT12 : 1;
__IO uint32_t EXTINT13 : 1;
__IO uint32_t EXTINT14 : 1;
__IO uint32_t EXTINT15 : 1;
__IO uint32_t EXTINT16 : 1;
__IO uint32_t EXTINT17 : 1;
__IO uint32_t EXTINT18 : 1;
__IO uint32_t EXTINT19 : 1;
__IO uint32_t EXTINT20 : 1;
__IO uint32_t EXTINT21 : 1;
__IO uint32_t EXTINT22 : 1;
__IO uint32_t EXTINT23 : 1;
} stc_intreq_irq05mon_field_t;
どっちもEXTINT0からはじまるんかい!!
せめて、IRQ5はEXTINT8から始まるべきだろう。
そうしないと、私みたいにあまりよく見ずに「EXTINT0は1つしかないはずだから、間違ってたらコンパイルエラーになるだろう」と期待している人が馬鹿を見るではないか。
ああ、馬鹿を見たさ・・・。
You look a foolish guy in this site (?).
EXTINTという外部割り込みの先頭は0から始まるべきだろう、という思想なのかもしれないけど、わかりにくい。
(他にも、同じ名前のレジスタがよくある)
ここはビット番号ではなく、機能として表した方がいろいろとよかったんじゃなかろうかね。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。