===================================================================== EP93XX依存部 Last Modified: XX Oct 2008 ===================================================================== ○概要 EP93XX依存部では,Cirrus Logic製の EP9307 と EP9315 をサポー トする.本カーネルではチップ内蔵の周辺回路のタイマやUARTを使用する.実 行は,フラッシュメモリに書き込み実行することを基本とする.RAM上での実 行は現状サポートしない. ○開発環境 ソフトウェア開発環境は,GNU環境を用いる.動作確認を行った.コンパイラ は,GCC 4.2.3 で,Cygwin用のバイナリを以下のサイトからダウンロードして 用いた. http://www.codesourcery.com/gnu_toolchains/arm/download.html デバッグ開発環境は,ハードウェアにOLIMEX製 ARM-USB-OCDを用い,OpenOCD を経由して GDBによりデバッグする.なお,単に実行するだけなら,フラッ シュ書き込みツールにより書き込み可能である. ○割り込みハンドラ番号と割込み番号 割込みハンドラ番号(inhno)と割込み番号(intno)には,以下を使用. COMMRX 2 COMMTX 3 TC1UI 4 TC2UI 5 AACINTR 6 DMAM2P0 7 DMAM2P1 8 DMAM2P2 9 DMAM2P3 10 DMAM2P4 11 DMAM2P5 12 DMAM2P6 13 DMAM2P7 14 DMAM2P8 15 DMAM2P9 16 DMAM2M0 17 DMAM2M1 18 UART1RXINTR1 23 UART1TXINTR1 24 UART2RXINTR2 25 UART2TXINTR2 26 UART3RXINTR3 27 UART3TXINTR3 28 INT_KEY 29 INT_TOUCH 30 INT_EXT0 32 INT_EXT1 33 INT_EX2 34 TINTR 35 WEINT 36 INT_RTC 37 INT_IRDA 38 INT_MAC 39 INT_PROG 41 CLK1HZ 42 V_SYNC 43 INT_VIDEO_FIFO 44 INT_SSP1RX 45 INT_SSP1TX 46 TC3UI 51 INT_UART1 52 SSPINTR 53 INT_UART2 54 INT_UART3 55 USHINTR 56 INT_PME 57 INT_DSP 58 GPIOINTR 59 I2SINTR 60 ・GPIOの割込み設定について  GPIOの割込みを設定する場合,GPIOINTRの割込みハンドラを定義し,割込み  有効にする前に,GPIO用割込みレジスタを設定する.  GPIO用レジスタ(x: A,B,F)   GPIOxIntEn ・・・・・・ 割込みの有効無効(0:無効/1:有効)   GPIOxIntType1 ・・・ 割込みタイプ1(0:レベル/1:エッジ)   GPIOxIntType2 ・・・ 割込みタイプ2(0:立上りエッジ or ハイレベル/                     1:立下りエッジ or ローレベル) ○割込み優先度 割込み優先度としては,-1 から -8 までの値を設定可能である. ○割込み属性 IRQ割込みに関しては,TA_POSEDGE/TA_LOWLEVELE/TA_HIGHLEVELの属性を設定 可能である. ○ターゲット依存部での定義事項 なし ○タイムドライバ カーネルでは,タイムティック用にTimer/Counter Channel 0 を用いる.タイ ムティック周期は1msecであり,変更するためには,chip_kernel.h の TIC_NUME と TIC_DENO を変更すること. ○シリアルインタフェースドライバ シリアルインタフェースドライバでは,Debug Unit を用いてシリアル出力を 行う.通信パラメータは次の通りである. 115200bps, 8bit, Non-Parity, 1 Stop bit ボーレートは,ep93xx.h 内の BAUDRATE の定義で変更可能である. ○開発環境のインストール方法 ●OpenOCDのインストールと実行 YAGARTO(http://www.yagarto.de/index.html)のホームページからバイナリを ダウンロードして展開する. ターゲット実機用のコンフィグレーションファイルを用意する. (ファイル名をARM920T_USB_OCD_Debug.cfgとする) 次のオプションで opencd.exe を実行する $openocd-ftd2xx.exe -f ARM920T_USB_OCD_Debug.cfg ●フラッシュメモリへの書き込み 以下のコマンドでASPカーネルをビルドして,バイナリファイルを生成する. make asp.bin Armdllo付属のフラッシュ書き込みツールで0x6000000に書き込む. ●GDBによるデバッグ GDBの動作確認したバージョンは(6.6) ○変更履歴 ===================================================================== TOPPERS標準割込み処理モデル対応のための情報 ===================================================================== ○割込みコントローラの仕様 AT91SAM7Sの割込みコントローラ(AIC)の仕様は次のようになっている. ・32個の割込みをサポート ・個別の禁止許可が可能 Interrupt Enable Command Register(IECR),Interrupt Disable Command Register(IDCR)の各ビットにより禁止/許可する. ・8レベルの割込み優先度をサポート 0が最低優先度7が最高優先度 ・割込みを受け付けると受け付けた割込み優先度がAIC内にセットされ,その 割込み優先度以下の割込みは受け付けなくなる.ただし,AICが保持する割 込み優先度は,ソフトウェア側は設定できない. ・内部割込みはレベルにもエッジにも設定可能 ・各割込みのSource Mode Register(SMR)に,Vector(アドレス)を設定する ことができ,割込みを受け付けると,受け付けた割込みの Vector がInterrupt Vector Register(IVR)に設定される. ・プロセッサでIVRを読み込むと,AICは割込みハンドラが開始されたとみなす. ・プロセッサで End of Interrupt Command Register(EOICR)を書き込むと, 割込みハンドラが終了したとみなす ○割込み要求禁止フラグ 割込み要求禁止フラグは,AICの持つ,割り込みの個別の禁止/許可機能を用い て実現する. ○割込み優先度及び割込み優先度マスク(IPM) 割込み受付時の調停と,割込み受付後のそれ以下の優先度を受け付けないよう にする,AIC内部の割込み優先度マスクはAICの機能で実現可能である.ただし, AIC内部の割込み優先度マスクはソフトウェア的にアクセス不可能であるため, AIC内部の割込み優先度マスクを(モデル上の)割込み優先度マスクとして使 用することは不可能である. そのため,優先度毎に,その優先度以下の割込みを禁止するビットパターンを コンフィギュレータで用意し,ソフトウェア的に割込み優先度マスクを変更す る場合は,この値を使い割込みを禁止することで,(モデル上の)割込み優先 度マスクを実現する. ただし,割込み受付後は,AICが自動的に受け付けた割込みの割込み優先度を AIC内部にセットするため,カーネルの割込みの入り口では,ビットパターン による割込みの禁止は行わない. ○IVRの使用方法 SMRに割込みハンドラのアドレスをセットし,割込み受付時は,割込みエント リの共有ルーチンで,IVRを読み込んで読み込んだアドレスにジャンプするの が本来の使い方である.しかしながら,本カーネルでは,共有の割込みのエン トリで割込み要因を判断して,(モデル上の)割込み優先度マスクをセットす る必要がある.そのため,IVRにはハンドラのアドレスではなく,割込み番号 をセットして使用する. ○コンフィギュレータによる生成データ コンフィギュレータでは,以下のデータを生成する. 割込み優先度テーブル.各割込みの優先度を保持する.値は内部表現で,外部 表現の絶対値. const uint8_t _kernel_inh_ipm_tbl[TNUM_INH]; 割込みマスクテーブル.各割込み優先度で禁止する割り込みのビットパターン を保持する. const uint32_t _kernel_ipm_mask_tbl[(TMAX_INTPRI - TMIN_INTPRI + 1)]; 割込みハンドラテーブル.割込みハンドラのアドレスを保持する. const FP _kernel_inh_tbl[TNUM_INH];