- メインページ
- ネームスペース
- クラス
- ファイル

- ファイル一覧
- ファイルメンバ

# cec.cpp

説明を見る。

    00001 /** \file cec.cpp
    00002  *  \brief コア・イベント管理ライブラリ
    00003  *  \author アナログ・デバイセズ株式会社
    00004  *
    00005  * コア・イベント・ハンドラ管理用のファイルである。内部はスケルトンになっているので
    00006  * 必要に応じてユーザーが改変して使う。関数ivg7()からivg14()まではユーザー定義の割り込み
    00007  * ハンドラである。 cec::ivg9()の説明を参照。 cec::init()はSIC_IARxを初期化し、すべての
    00008  * 割り込みハンドラを登録する。SIC_IARxは必要に応じてユーザーが変更する。イベントの処理方法については \ref cecを参照。
    00009  */
    00010 /*
    00011 * 共通インクルードファイル
    00012 */
    00013 #include <signal.h>
    00014 #include <cdefBF53x.h>
    00015 #include "cec.h"
    00016
    00017 /*
    00018 * アプリケーション固有のインクルードファイル
    00019 */
    00020 #include "afw.h"
    00021 #include "twi.h"
    00022
    00023 namespace cec{
    00024
    00025 /** 未定義割り込みの処理
    00026 *
    00027 * 割り込みが発生したにもかかわらず規定の割り込み処理ルーチン
    00028 * で処理しなかった場合には、このルーチンで受け止める。
    00029 */
    00030     void spuriousIRQ(void)
    00031     {
    00032         while(1)
    00033             ;
    00034     }
    00035
    00036 /** IVG14イベントの処理
    00037 *
    00038 * BlackfinコアのIVG14イベントの処理を行う。通常、このイベントはソフトウェア・割り込みに割り当てる。イベントの処理方法については \ref cecを参照。
    00039 */
    00040     void ivg14( int sig )
    00041     {
    00042         spuriousIRQ();           // 未定義割り込みの処理
    00043     }
    00044
    00045 /** IVG13イベントの処理
    00046 *
    00047 * BlackfinコアのIVG13イベントの処理を行う。イベントの処理方法については \ref cecを参照。
    00048 */
    00049     void ivg13( int sig )
    00050     {
    00051         spuriousIRQ();           // 未定義割り込みの処理
    00052     }
    00053
    00054 /** IVG12イベントの処理
    00055 *
    00056 * BlackfinコアのIVG12イベントの処理を行う。イベントの処理方法については \ref cecを参照。
    00057 */
    00058     void ivg12( int sig )
    00059     {
    00060         spuriousIRQ();           // 未定義割り込みの処理
    00061     }
    00062
    00063 /** IVG11イベントの処理
    00064 *
    00065 * BlackfinコアのIVG11イベントの処理を行う。イベントの処理方法については \ref cecを参照。
    00066 */
    00067     void ivg11( int sig )
    00068     {
    00069         spuriousIRQ();           // 未定義割り込みの処理
    00070     }
    00071
    00072 /** IVG10イベントの処理
    00073 *
    00074 * BlackfinコアのIVG10イベントの処理を行う。イベントの処理方法については \ref cecを参照。
    00075 */
    00076     void ivg10( int sig )
    00077     {
    00078         spuriousIRQ();           // 未定義割り込みの処理
    00079     }
    00080
    00081 /** IVG9イベントの処理
    00082 *
    00083 * BlackfinコアのIVG9イベントの処理を行う。このイベントには、
    00084 * オーディオ・フレームワークの割り込みが割り当てられているので
    00085 * afw::ISR() を呼び出す。イベントの処理方法については \ref cecを参照。
    00086 */
    00087     void ivg9( int sig )
    00088     {
    00089         if ( afw::ISR() )       // オーディオ・フレームワーク割り込み
    00090             return;             // 処理が行われたら即リターン
    00091         spuriousIRQ();           // 未定義割り込みの処理
    00092     }
    00093
    00094 /** IVG8イベントの処理
    00095 *
    00096 * BlackfinコアのIVG8イベントの処理を行う。このイベントには、
    00097 * 初期化時にTWIの割り込みを割り当て直している。
    00098 * twi::ISR() を呼び出す。イベントの処理方法については \ref cecを参照。
    00099 */
    00100     void ivg8( int sig )
    00101     {
    00102         if ( twi::ISR() )                   // TWI割り込み
    00103             return;                         // 処理が行われたら即リターン
    00104         spuriousIRQ();           // 未定義割り込みの処理
    00105     }
    00106
    00107 /** IVG7イベントの処理
    00108 *
    00109 * BlackfinコアのIVG7イベントの処理を行う。イベントの処理方法については \ref cecを参照。
    00110 */
    00111     void ivg7( int sig )
    00112     {
    00113         spuriousIRQ();           // 未定義割り込みの処理
    00114     }
    00115
    00116
    00117     void init(void)
    00118     {
    00119             // 割込みの順位設定。必要に応じて各デバイスにIVG7..15を設定する。
    00120             // コメント欄の[]内はデフォルト順位
    00121             // ()内はDMAにデフォルトで割り当てられているデバイス
    00122         *pSIC_IAR0 =
    00123                   P0_IVG(7)     //[7] PLL Wakeup
    00124                 | P1_IVG(7)     //[7] DMA Error
    00125                 | P2_IVG(7)     //[7] Peripheral Error
    00126                 | P3_IVG(8)     //[8] RTC
    00127                 | P4_IVG(8)     //[8] DMA0 (PPI)
    00128                 | P5_IVG(9)     //[9] DMA3 (SPORT0 RX)
    00129                 | P6_IVG(9)     //[9] DMA4 (SPORT0 TX)
    00130                 | P7_IVG(9);    //[9] DMA5 (SPORT1 RX)
    00131
    00132         *pSIC_IAR1 =
    00133                   P8_IVG(9)     //[9] DMA6 (SPORT1 RTX)
    00134                 | P9_IVG(8)     //[10] TWI. **** IVG8に割り当てなおしている ***
    00135                 | P10_IVG(10)   //[10] DMA7 (SPI)
    00136                 | P11_IVG(10)   //[10] DMA8 (UART0 RX)
    00137                 | P12_IVG(10)   //[10] DMA9 (UART0 TX)
    00138                 | P13_IVG(10)   //[10] DMA10 (UART1 RX)
    00139                 | P14_IVG(10)   //[10] DMA11 (UART1 TX)
    00140                 | P15_IVG(11);  //[11] CAN RX
    00141
    00142         *pSIC_IAR2 =
    00143                   P16_IVG(11)   //[11] CAN TX
    00144                 | P17_IVG(11)   //[11] DMA1 (MAC RX), PORTH IRQ A
    00145                 | P18_IVG(11)   //[11] DMA2 (MAC TX), PORTH IRQ B
    00146                 | P19_IVG(12)   //[12] TIMER0
    00147                 | P20_IVG(12)   //[12] TIMER1
    00148                 | P21_IVG(12)   //[12] TIMER2
    00149                 | P22_IVG(12)   //[12] TIMER3
    00150                 | P23_IVG(12);  //[12] TIMER4
    00151
    00152         *pSIC_IAR3 =
    00153                   P24_IVG(12)   //[12] TIMER5
    00154                 | P25_IVG(12)   //[12] TIMER6
    00155                 | P26_IVG(12)   //[12] TIMER7
    00156                 | P27_IVG(12)   //[12] PORTF IRQ A, PORTG IRQ A
    00157                 | P28_IVG(12)   //[12] PORTG IRQ B
    00158                 | P29_IVG(13)   //[13] MDMA 0
    00159                 | P30_IVG(13)   //[13] MDMA 1
    00160                 | P31_IVG(13);  //[13] Watchdog, PORTF IRQ B
    00161
    00162         interrupt( SIGIVG14, ivg14 );     // IVG14ハンドラの登録
    00163         interrupt( SIGIVG13, ivg13 );     // IVG13ハンドラの登録
    00164         interrupt( SIGIVG12, ivg12 );     // IVG12ハンドラの登録
    00165         interrupt( SIGIVG11, ivg11 );     // IVG11ハンドラの登録
    00166         interrupt( SIGIVG10, ivg10 );     // IVG10ハンドラの登録
    00167         interrupt( SIGIVG9, ivg9 );     // IVG9ハンドラの登録
    00168         interrupt( SIGIVG8, ivg8 );     // IVG8ハンドラの登録
    00169         interrupt( SIGIVG7, ivg7 );     // IVG7ハンドラの登録
    00170     };
    00171
    00172     void start(void)
    00173     {
    00174     }
    00175 };
    00176
    00177