| 1 | = GR-SAKURA向けTOPPERS/ASP3 = |
| 2 | |
| 3 | GR-SAKURA(Renesas RX63N)向けにTOPPERS/ASP3 Ver.3.2.0のターゲット依存部を実装しました。[[br]] |
| 4 | ASP3は動的生成版にオーバーランハンドラを組み込んだものになりますので、ターゲット依存部はOSタイマーとオーバーランタイマーの両方の実装があります。[[br]] |
| 5 | ターゲット依存部はGR-SAKURA向けのASPを元に、対応が必要な箇所をGR-PEACHのASPとASP3との差分などで作成しました。[[br]] |
| 6 | |
| 7 | == OSタイマー == |
| 8 | |
| 9 | ASP3からティックレスになりタイマーの単位がマイクロ秒になりました。[[br]] |
| 10 | GR-PEACHのターゲット依存部では32bitのタイマーを使用して、33.33MHzで0x00000000から0xFFFFFFFFまでカウントするタイマーで、約2分で一巡するのでティックレス化が可能になりました。[[br]] |
| 11 | GR-SAKURAでは6MHzの16bitタイマーを使用したため、約11ミリ秒で一巡してしまいティックレスとは言いにくいですが、マイクロ秒単位のタイマーは実現しました。[[br]] |
| 12 | |
| 13 | GR-SAKURAでは、OSタイマーに16bitタイマーを2つ使用します。一つは6MHzで0x0000から0xFFFFまでカウントするタイマーで、一巡した時の割り込みで16bitのカウンターをインクリメントします。このカウンターとタイマーのカウント値で32bitのフリーランタイマーを疑似的に作ります。もう一つは、コンペアマッチ用のタイマーで、下位16bit分のタイムアウトの割り込みに使用します。GR-SAKURAのコンペアモードではカウンターは設定値になると0に戻ってしまうので、ワンショットタイマーとして使用します。[[br]] |
| 14 | |
| 15 | 割り込み禁止中に疑似32bitタイマー値を読む場合、上位のカウンターが更新されていないことがあるので、割り込みフラグを確認して上位のカウンター値を補正(+1)して32bitタイマー値を作ります。 |
| 16 | |
| 17 | == オーバーランハンドラタイマー == |
| 18 | |
| 19 | オーバーランハンドラタイマーでは、更にもう一つのタイマーを使用します。OSタイマーのワンショットタイマーと同じように使用し、下位16bitのタイマーとして使用します。[[br]] |
| 20 | 割り込み処理の入り口で、タスクの処理時間のカウントを読むため疑似32bitタイマーを読みこみますが、フリーランタイマーの割り込みかどうかを確認する必要があります。それは、上位のカウンターの補正をする必要があるかどうかの判断に必要になります。割り込み処理の入り口で、ターゲット非依存部の{{{ovrtimer_stop}}}関数を呼び出し、ターゲット依存部の{{{target_ovrtimer_stop}}}を呼びますが、フリーランタイマーの割り込みかどうかを確認するため、割り込み番号を渡せるよう引数を追加しています。 |
| 21 | |
| 22 | == RX63N依存部 == |
| 23 | |
| 24 | ディスパッチャーの実装のあるRX63N依存部では、ASPにあった{{{reqflg}}}と{{{dspflg}}}はASP3で削除されたので対応しました。{{{reqflg}}}は{{{p_schedtsk}}}と{{{p_runtsk}}}が同じかどうかの比較で置き換え、{{{dspflg}}}周りの処理は削除した。[[br]] |
| 25 | また、タスク例外処理もASP3で削除されたので対応部分を削除した。 |
| 26 | その他、ASP3の「doc/version.txt」ファイルの「○ターゲット依存部の主な要修正箇所(1.9.0 → 3.A.0)」に書かれている内容を適用した。 |
| 27 | |
| 28 | == シリアルドライバ == |
| 29 | |
| 30 | シリアルドライバを含むsyslog関連がTECS化されているので、RZ/A1依存部のファイル「scif.h」「tSCIF.cdl」「tSCIF.c」とGR-PEACH依存部のファイル「tSIOPortGRPeachMain_inline.h」「tPutLogGRPeach.c」「tPutLogGRPeach.cdl」「tSIOPortGRPeach.cdl」をコピーして使用し、レジスタの定義や関数内の処理をASPの「target_serial.c」「target_serial.h」を元に変更した。 |
| 31 | |
| 32 | == TINET == |
| 33 | |
| 34 | TINET 1.7を含んでいますが、タイマー値と思われる個所をミリ秒からマイクロ秒に変更しただけで、動作は未確認です。 |
| 35 | |
| 36 | == その他 == |
| 37 | |
| 38 | GR-SAKURA向けASPでRuby版CFGに対応しておいたため、ASP3へのポーティングではRuby版CFGを流用することで対応できた。 |