TOPPERS
TOPPERS関係まとめスレ
TOPPERS/ASP kernelのSH7144ポーティングを機にコンテンツ化します.別ターゲットのポーティング作業や,kernel理解の備忘録とするつもりです.
反響があれば,アクションを増やすかもしれません:)
ビッグサイトロンでのサークル参加を止めて久しいですが,この冬は帝都にも向かいません...
少々私用で忙しかったのと,現状のタスクで手一杯なので,これ以上ネタを仕入れないようにしたかったてのもあります(笑
さておき,先日のFatFsの件,NEEKに持ってきて,サンプルプログラムも持ってきてみたのだけれど,SD初期化処理をミスします(Idleへの遷移要求に対してOK返ってこない).
SDの端子に出ている波形を観測していないので,どこまでが正しいのかも不明瞭です.シミュレーションしようにもVHDLという罠が(笑.VerilogHDLに移植しようと誓ったところで止まっています..
借り物だけに勝手にハンダを盛るのも申し訳ないですしネ☆
そして周りの年末大掃除の話題に吊られて,PC部屋の片付けに着手してしまいました.数ヶ月で取り込みたい書類もそれなりに増えるもんですなぁ.保管書類もゴタゴタになっているので,一度本腰を入れてファイリングしてタグを打ってしまおうと思います.部品在庫リストは... ある程度進んで,コーナン箱1つちょっとと工作机まわりの部品が残といったところですね.
作業時間にすると結構なボリュームだと認識しております...ということで,実家への帰省も考慮すると,年内にFatFs動いたーってのはなさそうです.申し訳ございません...
年末の挨拶には少し早いので,また後日...
日記更新の頻度が落ちておりますが,wikiコンテンツは伸ばしております.ALTERAのNiosIIをいじろうとして,思った以上にいろんなところでハマってしまい,これは時間が作れないとつらいんじゃないか,ということで,なんとなく訳した資料を残しておきます.
まぁ,成果物としてのまとめも兼ねていますけれど(ぉ
FPGAをまともに使うのも初めてであり,ALTERAデバイス自体も初めてだったりします.
CycloneIII評価キット(EEK)を使っていこうとしましたが,付録のプロジェクトはQuartus v7.2のものでした.
v8.1が新しいもので,これに乗せ変えようと考えました.特に自分で基板を起こす場合など,QuartusIIのプロジェクトを起こすのがつらいと判断したためです.
まぁ,案の定ハマってしまってえらいことになってますが…('A`
こんな感じでグダグダですが,NiosIIいじくっている間はコンテンツが伸びていきます.まとめページとか作る気力がないので,adiaryのwiki機能を使うことにしています.コンテンツ階層がうまくないかもしれません.これも修正したいけれど放置になる予感.
C74 special editionはアレゲで好きだったんですが,表や長ったらしい文章が多いので,少しでも横長に見せられるものに変更しました.サイドバーが延びすぎている感もありますが,ちょっと調整する気力が….
TOPPERS/ASP kernelのSH7144ポーティングを機にコンテンツ化します.別ターゲットのポーティング作業や,kernel理解の備忘録とするつもりです.
反響があれば,アクションを増やすかもしれません:)
日記タイトルとしてはコッチが正解.wiki titleにも生ってしまうので,タイトル名はソレらしいものへ修正.
表題のモノをリリースいたします.個別パッケージのみのリリースとさせていただきます.
当方ではROM化した環境でのみ確認しております.内蔵RAMだけでの動作も未確認です.
RAM上にコードを置いた場合,微微小時間待ちのチューニングができておりませんので,実時間に対して待ちすぎてしまうことが予想されます.
ターゲット略称 | CQsh2_gcc |
target H/W | CQ出版,Interface誌 2006年 6月号付録 SH7144ボード(※1) |
ターゲット非依存部 | asp-1.3.2 |
他必要な個別リリース物 | asp_arch_sh12a_gcc-1.3.1.tar.gz(※2) |
言語処理系 | binutils-2.18, GCC 4.3.2, newlib-1.16.0, (gmp-4.2.3, mpfr-2.3.2) |
※1ただし,付録基板は以下の改修済みであることを条件とする.
※2SH1/2Aアーキテクチャ・GCC依存部パッケージ(released at 2008-05-13)
ある程度前提条件を用意しないと作りこめない((ざっと修正しようとしたけれども,target依存の仕様定義なしでは無理だったので,追記.))ので,付録についている使える部分にあわせて実装する.
asp/target/cq7144/を作成し,asp/target/apsh2a_gccのファイルをコピーする.
target_user.txt は,逐次修正していく.port.txtに従い,推奨されている情報を記載する(ように気をつける).
また,各ファイルのヘッダ部分については,確認が必要だろう.
"DEFAULT_STK_TOP"は,R15(SP)にセットしたいアドレスをおいておくと良い.gccがgenerateしてくれるスタック操作は "mov.l hoge, @-r15"だったので,ケツからつかうならゼロで良さそう.
(修正不要)
(修正不要)
target_initialize()にて,依存部の初期化処理を入れる.主にPFC設定となるだろう.
prc_initialize()でどの程度の初期化をしているのか,気にしておくこと.
★ペリフェラルの初期化がどんどん後ろに行くなぁ.でも,最低限度の初期化だけにとどめるべきだろうな...
以下のシンボルに注意.SCIFのIDとは相関が無い気がする.【未検証】
* ターゲット依存の文字出力に使用するポートの定義 #define TARGET_PUTC_PORTID 2
DEFAULT_ISTKSZの変更.メモリ容量を見て調整する.【要調整】→とりあえず3kしかないので1kにする.
* 微少時間待ちのための定義(本来はSILのターゲット依存部) #define SIL_DLY_TIM1 75 #define SIL_DLY_TIM2 21 これらも使用している場所で,どの程度の時間を期待しているか,を確認して修正すること.【要】 >asp/doc/porting.txt (870,1): > (4-2-1) void sil_dly_nse(ulong_t dlytim) 仕様について記述がある.2つある理由も記載されている. SH7144においては,cacheがないため,値のload/codeのfetchに時間を要するため, 簡単には導出できない. 内蔵ROM/内蔵RAM/BSC配下のRAMにコード/データをおく場合によって,値が変わるだろう. ROM化とそれ以外,の例のままおいておくので,テストコードで実測してつめていこう.【要調整】 参考:[http://www.apnet.co.jp/toppers/cbbs/cbbs.cgi?mode=res&namber=65&page=&no=0:TOPPERS掲示板~sil_dly_nse()に与えるパラメータについて] >|| 算出したステート数から以下の条件で処理時間を計算します。 1ステート = 1クロック CPU周波数 = 49.152MHz ・1つ目の処理時間 7 / 49152000 * 1000000000 = 142.415 [ns] ・2つ目の処理時間 10 / 49152000 * 1000000000 = 203.450 [ns]
load直後のr4を演算に使っているので, state表どおりにはならない. memoryアクセスのwaitもここでは考慮されていないように見える.実測から測定するのが妥当だろう...
(修正不要)
(修正不要)
(修正不要)
SCIFのIDを固めてから修正する.あまりいじるところは無いだろう【要】
kernel configurationファイル.静的な割込みハンドラ登録,初期化関数登録を行う.
INTNOに番号が振られていないのが気になる→target_serial.hで,定義している.
使用するSCIFに依存したベクタ値や割込み優先度の値を定義する.割込みレベルを含めたシステム設計が必要.問題になるまで放置かな.-4でok.(上から4番目/16段階)
コンパイル時に問題になった(ぉ
(修正不要)注:リトルエンディアンで使用する場合は,シンボル定義を変更すること.
* アサーションの失敗時の実行中断処理(T.B.D) TOPPERS_assert_abort(void)
_hardware_init_hook:
少なくともバスコントローラ・クロックまわりのペリフェラル初期化処理はココに記述する.ひとまず下記の設定とした.CS0は本来不要だが,FPGAを接続する予定なので有効にしておき,バス衝突が生じないようにする対策である.
→ここではまった.こうは書いたものの,実際にはどちらでも実装せずに抜け落ちていた. SH7144のデータシートを見る限りでは,function設定を行えばIO directionも強制的に切り替わるロジックになっている.
割込み番号を追加(たぶん使わないだろうけれども)
#define SCIF3_RXI_INTNO SCIF3_RXI_VECTOR #define SCIF3_TXI_INTNO SCIF3_TXI_VECTOR
SCIFサポート数を3にした.CQはSCIF2を使用しており,0,1,2の順に定義しているため.管理番号とSCIFxとの対応を変えれば,必要最小限に抑えることができるでしょう.
#define TNUM_SIOP 3
(修正不要)
アドレスエラー生成は,適当な基数アドレスへintアクセスをさせることで行っている.右辺式のみなのだが,消えないのだろうか.(volatile変数として扱ってはいるけれど).
(修正不要)
(修正不要)
CMT.CMCSR.CKS = 0 (8分周)
(修正不要)
今回の修正終了後に,書式にあわせて修正する【未】
asp/arch/sh12a_gcc/ 配下
SH2Aとは少しつくりが異なるのか,シンボル名が異なるだけなのか不明だが,sh2a_config.hでは所望の動作にならない.
SH7144.hで定義するICRのシンボル名をマニュアルと異なる名称とすれば,エッヂ検出設定を x_config_intatr()で行うことは可能になるけれども,美しくない.
コンパイル時に不整合が発覚.
#define CMI0_VECTOR CMT_CMI0_VECTOR /* for prc_timer.h */ #define CMI1_VECTOR CMT_CMI1_VECTOR /* for prc_timer.h */
レベルセンスと両エッヂにも対応.(勝手に拡張)
TA_POSEDGE,TA_NEGEDGE を用いて,両方の論理和を渡すと両エッヂ,どちらのビットもたっていなければ,レベルセンスとなる.
オリジナルを参考にして,割込みベクタ・priorityの縛りを記述する.*.tfファイルの位置づけや仕様,コンフィギュレータとの絡みについて調査を要す.vectorコードが肥大化しているので,コンフィギュレータに対してコードを自動生成する部分でもあることは確からしい.【要資料集め・調査】
i_begin_int()にて,SH2A依存コードが記述されている.関数の移動もしくは,[bf:sh[12[A]?]_config.h]でのシンボル定義による切り替えを行う必要があるだろう.
今回はオリジナルを尊重し*3,シンボルによる切り替えで実装する.
SH2のSCIとSH2のSCIFとはモノが異なる.そもそも内蔵ペリフェラルのSIOドライバであり,target依存と考える.
ただし,SH2として共通であればPDIC配下に戻すことも考慮する.
CQ7144としてportingする場合においては,ベースとして拝借し,target依存部へと移動する.
なお,includeしているのは,target_serial.[ch]と,target_config.hである.
→リリース時には,pdicへ戻すことにする.
内蔵デバイスなので,arch依存と考えるのが妥当な気もしますけれどね...
一発で動かなかった.改変した箇所の詳細を反映させる必要があるが,ガッツリと作業にハマってしまい,履歴が残っていない….
debug時にもソースコードを改変/修正したので,更新情報もあわせて出したいと思う.
[ToDo]