2012年8月2日木曜日

TNKernel for RX

https://github.com/msalov/TNKernel-RX
TNkernel の RX62N移植作業をやっているのを発見。
さっそく、RX621でためしたら、動作確認できた。
ボードは http://akizukidenshi.com/catalog/g/gK-05763/ これ。
気をよくして、RX63Nではどうか?

ボードは http://japan.renesas.com/products/promotion/gr/index.jsp これ。
結構はまった。
RX62NからRX63Nの違い
1) SYSTEM.SCKCR の下位bitは仕様書では 00000000bなのだが、その値ではクロックが動作しない
そこで、FreeRTOSの RX63Nのソースを見ると、00010001bにしているではないか。

2) クロック関連レジスタを触る際は SYSTEM.PRCR レジスタでアクセス解除が必要。
MSTP(RTC)などの箇所の前後にアクセス解除と禁止をいれる必要あり。
(RX63N UM 表13.1 PRCRレジスタと保護されるレジスタの対応 参照)

3) MPC ポート機能設定の前後で、MPC.PWPRでのアクセス解除が必要、具体的には PxnPFSレジスタの設定時。
(RX63N UM 22.4.2 MPCレジスタ設定する場合の注意事項 参照)

4) RTC関連レジスタでIODEFINE.H でビットフィールド定義されているレジスタをそのまま、アクセスは危険。
たとえば
RTC.RCR1.BIT.PES = 6; /* Set periodic interrupts frequency to 256 Hz */
RTC.RCR1.BIT.PIE = 1; /* Enable periodic interrupts */
ではなく
RTC.RCR1.BYTE = 0x64;
while(0x64 != RTC.RCR1.BYTE) ;
と書く。
要は、書いた値が反映されるまでは、新しい値を書いたらダメということ。

(RX63N UM 29.2.17 RTCコントロールレジスタ1(RCR1)
...
AIE、PIE、PES[3:0]ビットは、カウントソースに同期して更新されます。RCR1レジスタを書き換えた場 合は、全ビットの値が更新されたことを確認してから次の処理を実行してください
...
RX62Nにはそんな制限なかった)

コンパイラは nahitechさんのと、kpit gnu toolで確認。
あっ、IODEFINE.H は GR-SAKURA のWEBコンパイル環境から落としました。

0 件のコメント:

コメントを投稿