実装 ==== 「[[develop:rtk_kernel:rtk_kernel-rpi:start]]」の実装関係の情報。 メモリマップ ------------ 実装仕様書`doc/T-Kernel2.0/doc/impl-tef_em1d.txt`からの差分 ``` (2) ROM 詳細(Raspberry PiではD-RAMでu-bootでロード) 0x00004000 +-----------------------+ |ROM 情報(config) | 0x00004080 +-----------------------+ |(予約) | 0x00008000 +-----------------------+ |例外分岐処理 | |T-Monitor | 0x00030000 +-----------------------+ |T-Kernel | +-----------------------+ |(ユーザーエリア) | +-----------------------+ |(u-bootは起動時に | | このあたりに移動) | 0x08000000 +-----------------------+ ``` ``` (3) RAM 詳細 0x10000000 +-----------------------+ |第1レベル | |ページテーブル | 0x10004000 +-----------------------+ |例外ベクターテーブル | 0x10004400 +-----------------------+ |システム共有情報 | 0x10004440 +-----------------------+ |T-Monitor | |データ/スタック | 0x10006000 +-----------------------+ ← RAM_TOP |OS 用 | 0x20000000 +-----------------------+ ← RAM_END ``` 例外ベクターテーブル -------------------- ``` 2.4 例外ベクターテーブル ベクター番号 0x10004000 +-----------------------+ |デフォルトハンドラ | 0 |未定義命令 | 1 |プリフェッチアボート | 2 |データアボート | 3 0x10004010 +-----------------------+ |スーパーバイザ SVC 4 | 4 |コール : | | | SVC 28 | 28 0x10004074 +-----------------------+ |デバッグアボート 命令| 29 | データ| 30 0x1000407c +-----------------------+ |高速割込 FIQ | 31 0x10004080 +-----------------------+ |割込 IRQ 0 | 32 | : | | | IRQ 95 | 127 0x10004200 +-----------------------+ |予備 IRQ 96 | 128 | : | | | IRQ 127| 255 0x10004400 +-----------------------+ ``` * デフォルトハンドラは、ハンドラが登録されていない例外・割込が発生した場合に呼び出されるハンドラ。NULL を未登録とする。 * ベクター番号は、tk_def_int() の割込定義番号(dintno)として使用する。 * ベクター番号は、SVC 命令の番号(イミディエート値)として使用する。 * IRQ 0〜95 は、割込コントローラ(INT)の INT 0〜95 に対応する シリアルポート割り当て ---------------------- T-Kernel/T-Monitorではシリアルポートは、Raspberry Piでは下記を利用 ^ モデル ^ TYPE_RPI ^ UART# ^ 備考 ^ | Pi Zero | 1 | 0 | PL011 | | Pi 1 Model B+ | 1 | 0 | PL011 | | Pi 2 Model B | 2 | 0 | PL011 | | Pi 3 Model B | 3 | 1 | mini UART | タイマー -------- システムタイマーとしてTimer(ARM side)を使用。割り込み周期はconfigで変更できるが、デフォルトでは1msecに設定。 LED割り当て ----------- T-MonitorのcpuLED()関数で、LED操作ができる。LED表示の為に下記のGPIOポートを割り当てている。 ### Raspberry Pi Zero/1/2 ^ bit番号 ^ GPIO番号 ^ 備考 ^ | 0 | 47 | ACT(緑) | | 1 | 35 | PWR(赤),Raspberry Pi Zeroは無し | ### Raspberry Pi 3 Raspberry Pi 3ではACT/PWRはARM CPUから操作できない。 ^ bit番号 ^ GPIO番号 ^ 備考 ^ | 0 | 17 | コネクタの11ピン | JTAGピン -------- JTAGデバッグ可能なように、T-Monitorの初期化時に、Raspberry PiのJTAGピンを有効にしている。Raspberry PiコネクタのJTAGピンの割り当ては下記。 ^ ピン番号 ^ GPIO番号 ^ GPIOモード ^ 機能(JTAG) ^ | 15 | GPIO22 | ALT4 | TRST | | 7 | GPIO4 | ALT5 | TDI | | 13 | GPIO27 | ALT5 | TMS | | 22 | GPIO25 | ALT5 | TCK | | 18 | GPIO24 | ALT5 | TDO | * Raspberry Pi Zero/2ではJTAGデバッガ接続できるは確認したが、Raspberry Pi 3では未確認。 関連記事 --------- * [[myblog>2016/09/04/raspberrypi-document/|【Raspberry Pi】参考になるベアメタルなドキュメント]] * [[myblog>2016/08/23/raspberrypi-jtag/|【Raspberry Pi】u-bootでJTAGピンを有効にする]] 参考 ---- 1. [[wpjp>Raspberry_Pi]] {{tag>rtk_kernel}}