Ignore:
Timestamp:
Jun 2, 2015, 3:39:53 PM (9 years ago)
Author:
nmir-saito
Message:

ファイルの mime-type 変更

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ssp_qb_r5f100le_cs/trunk/target/qb_r5f100le_cs/target_serial.c

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    1010 *             Nagoya Municipal Industrial Research Institute, JAPAN
    1111 *
    12  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    13  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    14  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    15  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    16  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    17  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    18  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    19  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    20 ƒƒ“ƒgi—˜—p
    21  *      ŽÒƒ}ƒjƒ
    22 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    23  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    24  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    25  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    26  *      ‚ƁD
    27  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    28 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    29 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    30  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    31  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    32  *        •ñ‚·‚邱‚ƁD
    33  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    34  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    35  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    36  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    37  *      –Ɛӂ·‚邱‚ƁD
     12 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     13 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     14 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     15 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     16 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     17 *      スコード中に含まれていること.
     18 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     19 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     20 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     21 *      の無保証規定を掲載すること.
     22 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     23 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     24 *      と.
     25 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     26 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     27 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     28 *        報告すること.
     29 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     30 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     31 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     32 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     33 *      免責すること.
    3834 *
    39  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    40  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    41  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    42  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    43  *  ‚̐ӔC‚𕉂í‚È‚¢D
     35 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     36 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     37 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     38 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     39 *  の責任を負わない.
    4440 *
    4541 */
    4642
    4743/*
    48  * ƒVƒŠƒAƒ‹ƒhƒ‰ƒCƒoiQB-R5F100LE—pj
     44 * シリアルドライバ(QB-R5F100LE用)
    4945 */
    5046#pragma sfr
     
    5652
    5753/*
    58  * ƒVƒŠƒAƒ‹I/Oƒ|[ƒgŠÇ—ƒuƒƒbƒNƒGƒŠƒA
     54 * シリアルI/Oポート管理ブロックエリア
    5955 */
    6056static SIOPCB siopcb_table[TNUM_SIOP];
     
    6258
    6359/*
    64  * ƒŒƒWƒXƒ^Ý’è’l
     60 * レジスタ設定値
    6561 */
    6662#define PORT2SIOPID(x)  ((x) + 1)
     
    7167
    7268/*
    73  * ’჌ƒxƒ‹ƒVƒŠƒAƒ‹‰Šú‰»
     69 * 低レベルシリアル初期化
    7470 */
    7571void target_sau_init(ID siopid)
    7672{
    77         /* ‰Šú‰»Ï‚݂̏ꍇ‚Í‚·‚®‚ɃŠƒ^[ƒ“ */
     73        /* 初期化済みの場合はすぐにリターン */
    7874        if(PER0 & TBIT_PER0_SAU0EN) {
    7975                return;
    8076        }
    8177
    82         /* ƒNƒƒbƒN‹Ÿ‹‹‹–‰Â  */
     78        /* クロック供給許可  */
    8379        PER0 |= TBIT_PER0_SAU0EN;
    8480
    85         // ­‚µ‘Ò‚Â
     81        // 少し待つ
    8682        NOP();
    8783        NOP();
    8884        NOP();
    8985       
    90         // CKm0 ‚ð‘I‘ðDŽü”g”‚Í fclk/8 (=2.5MHz)
     86        // CKm0 を選択.周波数は fclk/8 (=2.5MHz)
    9187        SPS0 = UINT16_C(0x0033);
    9288
    93         // ƒ†ƒjƒbƒg0Cƒ`ƒƒƒlƒ‹{0,1} ‚Ì“®ì’âŽ~
     89        // ユニット0,チャネル{0,1} の動作停止
    9490        ST0 |= UINT16_C(0x0003);
    9591       
    96         // ƒ‚[ƒhÝ’è
    97         // “®ìƒNƒƒbƒNFSPS0ƒŒƒWƒXƒ^‚Őݒ肵‚½“®ìƒNƒƒbƒN‚Ì‚¤‚¿CCK00 ‚Ì•û‚ðŽg‚¤
    98         // “]‘—ƒNƒƒbƒNFCKS00, CKS01 ƒrƒbƒg‚ÅŽw’肵‚½“®ìƒNƒƒbƒN(‚‚܂èCK00)‚Ì•ªŽüƒNƒƒbƒN
    99         // ƒXƒ^[ƒgƒgƒŠƒK—vˆöF‘—M-->ƒ\ƒtƒgƒEƒFƒAƒgƒŠƒK‚Ì‚Ý, ŽóM-->RxD0’[Žq
    100         // —§‰º‚è‚ðƒXƒ^[ƒgƒrƒbƒg‚Æ‚µ‚ÄŒŸo
    101         // UARTƒ‚[ƒhCŠ„‚荞‚Ý‚Í“]‘—Š®—¹Š„ž‚Ý
     92        // モード設定
     93        // 動作クロック:SPS0レジスタで設定した動作クロックのうち,CK00 の方を使う
     94        // 転送クロック:CKS00, CKS01 ビットで指定した動作クロック(つまりCK00)の分周クロック
     95        // スタートトリガ要因:送信-->ソフトウェアトリガのみ, 受信-->RxD0端子
     96        // 立下りをスタートビットとして検出
     97        // UARTモード,割り込みは転送完了割込み
    10298        SMR00 = UINT16_C(0x0022);
    10399        SMR01 = UINT16_C(0x0122);
    104100       
    105         // ƒ`ƒƒƒlƒ‹0: ‘—M‚Ì‚Ý‹–‰ÂCƒ`ƒƒƒlƒ‹1: ŽóM‚Ì‚Ý‹–‰Â
    106         // ƒGƒ‰[Š„ž‚ÝINTSREx‚Ì”­¶‚ð‹ÖŽ~
    107         // ƒpƒŠƒeƒB‚È‚µCLSBƒtƒ@[ƒXƒgC1ƒXƒgƒbƒvƒrƒbƒgC8ƒrƒbƒgƒf[ƒ^’·
     101        // チャネル0: 送信のみ許可,チャネル1: 受信のみ許可
     102        // エラー割込みINTSRExの発生を禁止
     103        // パリティなし,LSBファースト,1ストップビット,8ビットデータ長
    108104        SCR00 = UINT16_C(0x8097);
    109105        SCR01 = UINT16_C(0x4097);
    110106
    111         // [ƒrƒbƒg15:9] = 0x40 --> 64
    112         // ƒVƒŠƒAƒ‹‚Ö‚Ì‹Ÿ‹‹ƒNƒƒbƒN‚Í 2.5MHz(=20/8)
    113         // •ªŽü”ä‚Í (64+1)*2 = 130
     107        // [ビット15:9] = 0x40 --> 64
     108        // シリアルへの供給クロックは 2.5MHz(=20/8)
     109        // 分周比は (64+1)*2 = 130
    114110        // 2.5[MHz]/130 = 19.23[kHz]
    115111        SDR00 = UINT16_C(0x8000);
    116112        SDR01 = UINT16_C(0x8000);
    117113
    118         // ŽóMƒ|[ƒg‚̃mƒCƒYƒtƒBƒ‹ƒ^ON
     114        // 受信ポートのノイズフィルタON
    119115        NFEN0 |= UINT8_C(0x01);
    120116
    121         // ƒGƒ‰[ƒtƒ‰ƒO‚̃NƒŠƒA(ŽóM‘¤‚̃`ƒƒƒlƒ‹1‚Ì‚Ý)
     117        // エラーフラグのクリア(受信側のチャネル1のみ)
    122118        SIR01 |= UINT16_C(0x0007);
    123119       
    124         // ƒVƒŠƒAƒ‹ƒf[ƒ^o—Í’l‚ðƒ`ƒƒƒlƒ‹0‚Ì‚Ý1‚Æ‚·‚éD
     120        // シリアルデータ出力値をチャネル0のみ1とする.
    125121        SO0 |= UINT16_C(0x0001);
    126122       
    127         // ’ʐMƒf[ƒ^‚Í”½“]‚¹‚¸‚»‚̂܂܏o—Í
     123        // 通信データは反転せずそのまま出力
    128124        SOL0 = UINT16_C(0x0000);
    129125
    130126        /*
    131          * ƒVƒŠƒAƒ‹ƒ`ƒƒƒlƒ‹0ŠJŽn
     127         * シリアルチャネル0開始
    132128         */
    133         // ƒVƒŠƒAƒ‹o—Í‹–‰Â
     129        // シリアル出力許可
    134130        SOE0 |= UINT16_C(0x0001);
    135131
    136         // ƒ`ƒƒƒlƒ‹{0,1}‚ÌŠJŽn
     132        // チャネル{0,1}の開始
    137133        SS0 |= UINT16_C(0x0003);
    138134}
    139135
    140136/*
    141  *  SIO‰Šú‰»
     137 *  SIO初期化
    142138 */
    143139void sio_initialize(intptr_t exinf)
     
    146142
    147143/*
    148  *  ƒVƒŠƒAƒ‹ƒI[ƒvƒ“
     144 *  シリアルオープン
    149145 */
    150146SIOPCB *sio_opn_por(ID siopid, intptr_t exinf)
     
    162158        p_siopcb->exinf = exinf;
    163159       
    164         // Š„ž‚݂̃}ƒXƒN
     160        // 割込みのマスク
    165161        dis_int(INTNO_INTST0);
    166162        dis_int(INTNO_INTSR0);
    167         // Š„ž‚Ý—v‹ƒNƒŠƒA
     163        // 割込み要求クリア
    168164        x_clear_int(INTNO_INTST0);
    169165        x_clear_int(INTNO_INTSR0);
    170166
    171         // ƒn[ƒhƒEƒFƒA‚̏‰Šú‰»
     167        // ハードウェアの初期化
    172168        target_sau_init(siopid);       
    173169
     
    176172
    177173/*
    178  *  ƒVƒŠƒAƒ‹ƒNƒ[ƒY
     174 *  シリアルクローズ
    179175 */
    180176void sio_cls_por(SIOPCB *p_siopcb)
    181177{
    182         /* ‘—ŽóM‹ÖŽ~ */
    183 
    184         // ƒ`ƒƒƒlƒ‹{0,1}‚Ì’âŽ~
     178        /* 送受信禁止 */
     179
     180        // チャネル{0,1}の停止
    185181        ST0 |= UINT16_C(0x0003);
    186182
    187         /* ƒVƒŠƒAƒ‹ƒ‚ƒWƒ
    188 [ƒ‹‚𖳌ø‚É‚·‚é */
     183        /* シリアルモジュールを無効にする */
    189184        PER0 &= ~TBIT_PER0_SAU0EN;
    190185}
     
    192187
    193188/*
    194  *  1•¶Žš‘—M
     189 *  1文字送信
    195190 */
    196191bool_t
    197192sio_snd_chr(SIOPCB *p_siopcb, char c)
    198193{
    199         // ‘—Mƒoƒbƒtƒ@‚ª‹ó‚È‚ç‚΁C1•¶Žš‘—M
     194        // 送信バッファが空ならば,1文字送信
    200195        if((SSR00L & TBIT_SSRmnL_TSF) == UINT16_C(0)) {
    201196                SDR00 = (uint16_t)c;
     
    208203
    209204/*
    210  *  1•¶ŽšŽóM
     205 *  1文字受信
    211206 */
    212207int_t
     
    215210        int_t c = -1;
    216211
    217         // ŽóMƒoƒbƒtƒ@‚Ƀf[ƒ^‚ª‚ ‚ê‚΁C1•¶ŽšŽóM
     212        // 受信バッファにデータがあれば,1文字受信
    218213        if((SSR01L & TBIT_SSRmnL_BFF) != 0) {
    219214                c = (int_t)SDR01;
     
    224219
    225220/*
    226  *  ƒR[ƒ‹ƒoƒbƒN‚Ì‹–‰Â
     221 *  コールバックの許可
    227222 */
    228223void
     
    246241
    247242/*
    248  *  ƒR[ƒ‹ƒoƒbƒN‚Ì‹ÖŽ~
     243 *  コールバックの禁止
    249244 */
    250245void
     
    269264
    270265/*
    271  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“
    272  */
    273 
    274 /*
    275  *  ŽóMŠ„ž‚Ý
     266 *  割込みサービスルーチン
     267 */
     268
     269/*
     270 *  受信割込み
    276271 */
    277272void
     
    282277        if((p_siopcb->enacb & TBIT_ENACB_RCV) != 0) {
    283278                /*
    284                  *  ŽóM’Ê’mƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·D
     279                 *  受信通知コールバックルーチンを呼び出す.
    285280                 */
    286281                sio_irdy_rcv(p_siopcb->exinf);
     
    289284
    290285/*
    291  *  ‘—MŠ„ž‚Ý
     286 *  送信割込み
    292287 */
    293288void
     
    298293        if((p_siopcb->enacb & TBIT_ENACB_SND) != 0) {
    299294                /*
    300                  *  ‘—M’Ê’mƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·D
     295                 *  送信通知コールバックルーチンを呼び出す.
    301296                 */
    302297                sio_irdy_snd(p_siopcb->exinf);
     
    305300
    306301/*
    307  *  1•¶Žšo—́iƒ|[ƒŠƒ“ƒO‚ł̏o—́j
     302 *  1文字出力(ポーリングでの出力)
    308303 */
    309304void
    310305sio_pol_snd_chr(char c, ID siopid)
    311306{
    312         /* ‘—Mƒoƒbƒtƒ@‚ª‹ó‚É‚È‚é‚Ü‚Å‘Ò‚Â(—LŒÀŽžŠÔ“à‚ÌðŒ¬—§‚ð‰¼’è) */
     307        /* 送信バッファが空になるまで待つ(有限時間内の条件成立を仮定) */
    313308        while((SSR00L & TBIT_SSRmnL_TSF) != 0){}
    314309
    315         // 1•¶Žš‘—M   
     310        // 1文字送信       
    316311        SDR00 = (uint16_t)c;
    317312}
Note: See TracChangeset for help on using the changeset viewer.