アプリケーション・プログラム用のコア・イベント管理名前空間。 Blackfinコアの各イベントに対応するイベント・ハンドラをこの名前空間 におく。通常は割込みに対応するイベント・ハンドラを置く。
cecの中のイベント・ハンドラ内部には処理の実体をおかず、各デバイスの サービス・ルーチンを呼ぶようにする。サービス・ルーチン内部は 呼び出されたら自分が担当する割り込みが発生しているかを調べ、 発生しているなら処理を行って真を返す。発生していないなら 偽を返す。 cec内部のイベント・ハンドラ内部では
if ( デバイス1の割り込みサービス・ルーチン() ) return; if ( デバイス2の割り込みサービス・ルーチン() ) return; if ( デバイス3の割り込みサービス・ルーチン() ) return;
また、cecinit()ではSIC_IARxの初期化も行う。この部分もユーザーが必要に応じて書き換える。 詳細は cec::init()のコメントを参照。
関数 | |
| void | spuriousIRQ (void) |
| 未定義割り込みの処理 | |
| void | ivg14 (int sig) |
| IVG14イベントの処理 | |
| void | ivg13 (int sig) |
| IVG13イベントの処理 | |
| void | ivg12 (int sig) |
| IVG12イベントの処理 | |
| void | ivg11 (int sig) |
| IVG11イベントの処理 | |
| void | ivg10 (int sig) |
| IVG10イベントの処理 | |
| void | ivg9 (int sig) |
| IVG9イベントの処理 | |
| void | ivg8 (int sig) |
| IVG8イベントの処理 | |
| void | ivg7 (int sig) |
| IVG7イベントの処理 | |
| void | init (void) |
| コア・イベント・ハンドラの登録 | |
| void | start (void) |
| 処理の開始 | |
| void cec::init | ( | void | ) |
コア・イベント・ハンドラの登録
cec内部のイベントハンドラをシステムに登録する
参照先 ivg10(), ivg11(), ivg12(), ivg13(), ivg14(), ivg7(), ivg8(), と ivg9().
参照元 main().
00119 { 00120 // 割込みの順位設定。必要に応じて各デバイスにIVG7..15を設定する。 00121 // コメント欄の[]内はデフォルト順位 00122 // ()内はDMAにデフォルトで割り当てられているデバイス 00123 *pSIC_IAR0 = 00124 P0_IVG(7) //[7] PLL Wakeup 00125 | P1_IVG(7) //[7] DMA Error 00126 | P2_IVG(7) //[7] Peripheral Error 00127 | P3_IVG(8) //[8] RTC 00128 | P4_IVG(8) //[8] DMA0 (PPI) 00129 | P5_IVG(9) //[9] DMA3 (SPORT0 RX) 00130 | P6_IVG(9) //[9] DMA4 (SPORT0 TX) 00131 | P7_IVG(9); //[9] DMA5 (SPORT1 RX) 00132 00133 *pSIC_IAR1 = 00134 P8_IVG(9) //[9] DMA6 (SPORT1 RTX) 00135 | P9_IVG(8) //[10] TWI. **** IVG8に割り当てなおしている *** 00136 | P10_IVG(10) //[10] DMA7 (SPI) 00137 | P11_IVG(10) //[10] DMA8 (UART0 RX) 00138 | P12_IVG(10) //[10] DMA9 (UART0 TX) 00139 | P13_IVG(10) //[10] DMA10 (UART1 RX) 00140 | P14_IVG(10) //[10] DMA11 (UART1 TX) 00141 | P15_IVG(11); //[11] CAN RX 00142 00143 *pSIC_IAR2 = 00144 P16_IVG(11) //[11] CAN TX 00145 | P17_IVG(11) //[11] DMA1 (MAC RX), PORTH IRQ A 00146 | P18_IVG(11) //[11] DMA2 (MAC TX), PORTH IRQ B 00147 | P19_IVG(12) //[12] TIMER0 00148 | P20_IVG(12) //[12] TIMER1 00149 | P21_IVG(12) //[12] TIMER2 00150 | P22_IVG(12) //[12] TIMER3 00151 | P23_IVG(12); //[12] TIMER4 00152 00153 *pSIC_IAR3 = 00154 P24_IVG(12) //[12] TIMER5 00155 | P25_IVG(12) //[12] TIMER6 00156 | P26_IVG(12) //[12] TIMER7 00157 | P27_IVG(12) //[12] PORTF IRQ A, PORTG IRQ A 00158 | P28_IVG(12) //[12] PORTG IRQ B 00159 | P29_IVG(13) //[13] MDMA 0 00160 | P30_IVG(13) //[13] MDMA 1 00161 | P31_IVG(13); //[13] Watchdog, PORTF IRQ B 00162 00163 interrupt( SIGIVG14, ivg14 ); // IVG14ハンドラの登録 00164 interrupt( SIGIVG13, ivg13 ); // IVG13ハンドラの登録 00165 interrupt( SIGIVG12, ivg12 ); // IVG12ハンドラの登録 00166 interrupt( SIGIVG11, ivg11 ); // IVG11ハンドラの登録 00167 interrupt( SIGIVG10, ivg10 ); // IVG10ハンドラの登録 00168 interrupt( SIGIVG9, ivg9 ); // IVG9ハンドラの登録 00169 interrupt( SIGIVG8, ivg8 ); // IVG8ハンドラの登録 00170 interrupt( SIGIVG7, ivg7 ); // IVG7ハンドラの登録 00171 };
| void cec::ivg10 | ( | int | sig | ) |
IVG10イベントの処理
BlackfinコアのIVG10イベントの処理を行う。
参照先 spuriousIRQ().
参照元 init().
00078 { 00079 spuriousIRQ(); // 未定義割り込みの処理 00080 }
| void cec::ivg11 | ( | int | sig | ) |
IVG11イベントの処理
BlackfinコアのIVG11イベントの処理を行う。
参照先 spuriousIRQ().
参照元 init().
00069 { 00070 spuriousIRQ(); // 未定義割り込みの処理 00071 }
| void cec::ivg12 | ( | int | sig | ) |
IVG12イベントの処理
BlackfinコアのIVG12イベントの処理を行う。
参照先 spuriousIRQ().
参照元 init().
00060 { 00061 spuriousIRQ(); // 未定義割り込みの処理 00062 }
| void cec::ivg13 | ( | int | sig | ) |
IVG13イベントの処理
BlackfinコアのIVG13イベントの処理を行う。
参照先 spuriousIRQ().
参照元 init().
00051 { 00052 spuriousIRQ(); // 未定義割り込みの処理 00053 }
| void cec::ivg14 | ( | int | sig | ) |
IVG14イベントの処理
BlackfinコアのIVG14イベントの処理を行う。通常、このイベントはソフトウェア・割り込みに割り当てる。
参照先 spuriousIRQ().
参照元 init().
00042 { 00043 spuriousIRQ(); // 未定義割り込みの処理 00044 }
| void cec::ivg7 | ( | int | sig | ) |
IVG7イベントの処理
BlackfinコアのIVG7イベントの処理を行う。
参照先 spuriousIRQ().
参照元 init().
00113 { 00114 spuriousIRQ(); // 未定義割り込みの処理 00115 }
| void cec::ivg8 | ( | int | sig | ) |
IVG8イベントの処理
BlackfinコアのIVG8イベントの処理を行う。このイベントには、 初期化時にTWIの割り込みを割り当て直している。 twi::ISR() を呼び出す。
参照先 twi::ISR(), と spuriousIRQ().
参照元 init().
00102 { 00103 if ( twi::ISR() ) // TWI割り込み 00104 return; // 処理が行われたら即リターン 00105 spuriousIRQ(); // 未定義割り込みの処理 00106 }
| void cec::ivg9 | ( | int | sig | ) |
IVG9イベントの処理
BlackfinコアのIVG9イベントの処理を行う。このイベントには、 オーディオ・フレームワークの割り込みが割り当てられているので afw::ISR() を呼び出す。
参照先 afw::ISR(), と spuriousIRQ().
参照元 init().
00089 { 00090 if ( afw::ISR() ) // オーディオ・フレームワーク割り込み 00091 return; // 処理が行われたら即リターン 00092 spuriousIRQ(); // 未定義割り込みの処理 00093 }
| void cec::spuriousIRQ | ( | void | ) |
1.5.2