Ignore:
Timestamp:
Jul 23, 2017, 2:29:40 PM (7 years ago)
Author:
coas-nagasima
Message:

SVNプロパティを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rubycfg_asp/trunk/asp_dcre/pdic/rx600/rx630_uart.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=UTF-8
    r313 r315  
    77 *  Copyright (C) 2013      by Mitsuhiro Matsuura
    88 *
    9  *  上記著作権è€
    10 ã¯ï¼Œä»¥ä¸‹ã®(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    11  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
    12  *  変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
    14  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    15  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    16  *      スコード中に含まれていること.
    17  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    18  *      用できる形で再é
    19 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    20 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    21  *      è€
    22 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    23  *      の無保証規定を掲載すること.
    24  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    25  *      用できない形で再é
    26 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    27  *      と.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *    (b) 再é
    33 å¸ƒã®å½¢æ
    34 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    35  *        報告すること.
    36  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    37  *      害からも,上記著作権è€
    38 ãŠã‚ˆã³TOPPERSプロジェクトをå
    39 è²¬ã™ã‚‹ã“と.
    40  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
    41  *      由に基づく請求からも,上記著作権è€
    42 ãŠã‚ˆã³TOPPERSプロジェクトを
    43  *      å
    44 è²¬ã™ã‚‹ã“と.
     9 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     11 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     21 *      と.
     22 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     23 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     24 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     25 *        報告すること.
     26 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     27 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     28 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     29 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     30 *      免責すること.
    4531 *
    46  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    47 ãŠ
    48  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    49  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    50  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    51  *  の責任を負わない.
     32 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36 *  の責任を負わない.
    5237 *
    5338 *  @(#) $Id$
     
    5641
    5742/*
    58  * UART用 簡易SIOドライバ
     43 * UART用 簡易SIOドライバ
    5944 */
    6045
     
    6550#include "rx630_uart.h"
    6651
    67 /* シリアルモードレジスタ(SMR) */
     52/* シリアルモードレジスタ(SMR) */
    6853#define CKS                     UINT_C(0x03)
    6954#define STOP            UINT_C(0x08)
     
    7560#define ASYNC_8BIT      UINT_C(0x40)
    7661
    77 /* シリアルコントロールレジスタ(SCR) */
     62/* シリアルコントロールレジスタ(SCR) */
    7863#define CKE                     UINT_C(0x03)
    7964#define TEIE            UINT_C(0x04)
     
    8368#define TIE                     UINT_C(0x80)
    8469
    85 /* シリアルステータスレジスタ(SSR) */
     70/* シリアルステータスレジスタ(SSR) */
    8671#define TEND            UINT_C(0x04)
    8772#define PER                     UINT_C(0x08)
     
    8974#define ORER            UINT_C(0x20)
    9075
    91 /* シリアル拡張モードレジスタ(SEMR) */
     76/* シリアル拡張モードレジスタ(SEMR) */
    9277#define ACS0            UINT_C(0x01)
    9378#define ABCS            UINT_C(0x10)
     
    9782
    9883/*
    99  *  シリアルI/Oポート初期化ブロックの定義
     84 *  シリアルI/Oポート初期化ブロックの定義
    10085 */
    10186typedef struct sio_port_initialization_block {
    102         volatile uint8_t        *ctlreg;                /* シリアルコントロールレジスタ(SCR) */
    103         volatile uint8_t        *modereg;               /* シリアルモードレジスタ(SMR) */
    104         volatile uint8_t        *extmodereg;    /* シリアル拡張モードレジスタ(SEMR) */   
    105         volatile uint8_t        *statusreg;             /* シリアルステータスレジスタ(SSR) */
    106         volatile uint8_t        *tdreg;                 /* トランスミットデータレジスタ(TDR)*/
    107         volatile uint8_t        *rdreg;                 /* レシーブデータレジスタ(RDR) */
    108         volatile uint8_t        *bitratereg;    /* ビットレートレジスタ(BRR) */
    109         volatile uint32_t       *mstpcrreg;             /* モジュールストップコントロールレジスタ(MSTPCR) */
    110         volatile uint8_t        *ssrreg;                /* ステータスレジスタ */
    111         volatile uint8_t        *rxiirreg;              /* RXI用割込み要求レジスタ */
    112         uint8_t                         tx_intno;               /* 送信(データエンプティ)割り込み番号 */
    113         uint8_t                         rx_intno;               /* 受信(データフル)割り込み番号 */
    114         uint8_t                         te_intno;               /* 送信(終了)割り込み番号 */
    115         uint8_t                         sci_no;                 /* SCIの番号(SCI0~SCI6) */
    116         uint32_t                        mstpcr_offset;  /* MSTPCRの対応するビットオフセット */
     87        volatile uint8_t        *ctlreg;                /* シリアルコントロールレジスタ(SCR) */
     88        volatile uint8_t        *modereg;               /* シリアルモードレジスタ(SMR) */
     89        volatile uint8_t        *extmodereg;    /* シリアル拡張モードレジスタ(SEMR) */       
     90        volatile uint8_t        *statusreg;             /* シリアルステータスレジスタ(SSR) */
     91        volatile uint8_t        *tdreg;                 /* トランスミットデータレジスタ(TDR)*/
     92        volatile uint8_t        *rdreg;                 /* レシーブデータレジスタ(RDR) */
     93        volatile uint8_t        *bitratereg;    /* ビットレートレジスタ(BRR) */
     94        volatile uint32_t       *mstpcrreg;             /* モジュールストップコントロールレジスタ(MSTPCR) */
     95        volatile uint8_t        *ssrreg;                /* ステータスレジスタ */
     96        volatile uint8_t        *rxiirreg;              /* RXI用割込み要求レジスタ */
     97        uint8_t                         tx_intno;               /* 送信(データエンプティ)割り込み番号 */
     98        uint8_t                         rx_intno;               /* 受信(データフル)割り込み番号 */
     99        uint8_t                         te_intno;               /* 送信(終了)割り込み番号 */
     100        uint8_t                         sci_no;                 /* SCIの番号(SCI0~SCI6) */
     101        uint32_t                        mstpcr_offset;  /* MSTPCRの対応するビットオフセット */
    117102} SIOPINIB;
    118103
    119104/*
    120  *  シリアルI/Oポート管理ブロックの定義
     105 *  シリアルI/Oポート管理ブロックの定義
    121106 */
    122107struct sio_port_control_block {
    123         const SIOPINIB  *p_siopinib;                            /* シリアルI/Oポート初期化ブロック */
    124         intptr_t        exinf;                                                  /* 拡張æƒ
    125 å ± */
    126         bool_t          openflag;                                               /* オープン済みフラグ */
    127         bool_t          sendflag;                                               /* 送信割込みイネーブルフラグ */
    128         bool_t          getready;                                               /* 文字を受信した状æ
    129 ‹ */
    130         bool_t          putready;                                               /* 文字を送信できる状æ
    131 ‹ */
    132         bool_t          is_initialized;                                 /* デバイス初期化済みフラグ */
     108        const SIOPINIB  *p_siopinib;                            /* シリアルI/Oポート初期化ブロック */
     109        intptr_t        exinf;                                                  /* 拡張情報 */
     110        bool_t          openflag;                                               /* オープン済みフラグ */
     111        bool_t          sendflag;                                               /* 送信割込みイネーブルフラグ */
     112        bool_t          getready;                                               /* 文字を受信した状態 */
     113        bool_t          putready;                                               /* 文字を送信できる状態 */
     114        bool_t          is_initialized;                                 /* デバイス初期化済みフラグ */
    133115};
    134116
    135117/*
    136  *  シリアルI/Oポート管理ブロックのエリア
     118 *  シリアルI/Oポート管理ブロックのエリア
    137119 */
    138120static SIOPCB   siopcb_table[TNUM_SIOP];
    139121
    140 /* レジスタテーブル */
     122/* レジスタテーブル */
    141123static const SIOPINIB siopinib_table[TNUM_SIOP] =
    142124{
     
    180162
    181163/*
    182  *  シリアルI/OポートIDから管理ブロックを取り出すためのマクロ
     164 *  シリアルI/OポートIDから管理ブロックを取り出すためのマクロ
    183165 */
    184166#define INDEX_SIOP(siopid)       ((uint_t)((siopid) - 1))
     
    188170
    189171/*
    190  *  SIOドライバのシリアルモードレジスタ(SMR)
     172 *  SIOドライバのシリアルモードレジスタ(SMR)
    191173 */
    192174static void
     
    196178
    197179        /*
    198          *  SCIドライバの初期化ルーチン
    199          */
    200 
    201         /*
    202          *  割り込み要求å
    203 ˆãƒ¬ã‚¸ã‚¹ã‚¿ã®è¨­å®š(ISELRi)
     180         *  SCIドライバの初期化ルーチン
     181         */
     182
     183        /*
     184         *  割り込み要求先レジスタの設定(ISELRi)
    204185         *
    205          *  リセット値と同じ値を設定することになるため,
    206          *  処理は省略する.
    207          */
    208 
    209         /*
    210          *  モジュールストップ機能の設定
    211          */
    212         sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);        /* 書込み許可 */
     186         *  リセット値と同じ値を設定することになるため,
     187         *  処理は省略する.
     188         */
     189
     190        /*
     191         *  モジュールストップ機能の設定
     192         */
     193        sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502);        /* 書込み許可 */
    213194        sil_wrw_mem(p_siopinib->mstpcrreg,
    214195                sil_rew_mem(p_siopinib->mstpcrreg) & ~p_siopinib->mstpcr_offset);
    215         sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);        /* 書込み禁止 */
    216 
    217         /* 送受信禁止, SCKn端子はå
    218 ¥å‡ºåŠ›ãƒãƒ¼ãƒˆã¨ã—て使用 */
     196        sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500);        /* 書込み禁止 */
     197
     198        /* 送受信禁止, SCKn端子は入出力ポートとして使用 */
    219199        sil_wrb_mem(p_siopinib->ctlreg, 0x00U);
    220200
    221         /* クロック選択ビット(SMR.CKS[1:0]ビットを設定) */
     201        /* クロック選択ビット(SMR.CKS[1:0]ビットを設定) */
    222202        sil_wrb_mem(p_siopinib->modereg,
    223203                                        sil_reb_mem(p_siopinib->modereg) | clksrc);
    224204
    225         /* SMRに送信/ 受信フォーマットを設定) */
     205        /* SMRに送信/ 受信フォーマットを設定) */
    226206        sil_wrb_mem(p_siopinib->modereg,
    227207                        sil_reb_mem(p_siopinib->modereg) & (~SCI_SMR_FLG_ENABLE));
    228208
    229         /* ビットレートを設定 */
     209        /* ビットレートを設定 */
    230210        sil_wrb_mem(p_siopinib->bitratereg, bitrate);
    231211
    232         /* ビット期間(基本クロック16サイクルの期間が1ビット期間となる) */
     212        /* ビット期間(基本クロック16サイクルの期間が1ビット期間となる) */
    233213        for(i = 0; i < 16; i++) { }
    234214
    235         /* 送受信許可 */
     215        /* 送受信許可 */
    236216        sil_wrb_mem(p_siopinib->ctlreg,
    237217                (sil_reb_mem(p_siopinib->ctlreg) | SCI_SCR_FLG_ENABLE));
     
    240220
    241221/*
    242  *  SIOドライバの初期化ルーチン
     222 *  SIOドライバの初期化ルーチン
    243223 */
    244224void
     
    249229
    250230        /*
    251          *  シリアルI/Oポート管理ブロックの初期化
     231         *  シリアルI/Oポート管理ブロックの初期化
    252232         */
    253233        for (p_siopcb = siopcb_table, i = 0; i < TNUM_SIOP; p_siopcb++, i++){
     
    259239
    260240/*
    261  *  カーネル起動時のバナー出力用の初期化
     241 *  カーネル起動時のバナー出力用の初期化
    262242 */
    263243void
     
    266246        SIOPCB          *p_siopcb   = get_siopcb(siopid);
    267247        const SIOPINIB  *p_siopinib = get_siopinib(siopid);
    268         /*  この時点では、p_siopcb->p_siopinibは初期化されていない  */
    269 
    270         /*  二重初期化の防止  */
     248        /*  この時点では、p_siopcb->p_siopinibは初期化されていない  */
     249
     250        /*  二重初期化の防止  */
    271251        p_siopcb->is_initialized = true;
    272252
    273         /*  ハードウェアの初期化処理と送信許可  */
     253        /*  ハードウェアの初期化処理と送信許可  */
    274254        rx630_uart_setmode(p_siopinib , bitrate, clksrc);
    275255        sil_wrb_mem(p_siopinib->ctlreg,
     
    278258
    279259/*
    280  *  シリアルI/Oポートへのポーリングでの出力
     260 *  シリアルI/Oポートへのポーリングでの出力
    281261 */
    282262void
     
    288268
    289269        /*
    290          *  送信レジスタが空になるまでå¾
    291 ã¤
     270         *  送信レジスタが空になるまで待つ
    292271         */
    293272        while((sil_reb_mem(p_siopinib->ssrreg) & SCI_SSR_TEND_BIT) == 0U);
     
    297276
    298277/*
    299  *  シリアルI/Oポートのオープン
     278 *  シリアルI/Oポートのオープン
    300279 */
    301280SIOPCB *
     
    310289
    311290        /*
    312          *  ハードウェアの初期化
     291         *  ハードウェアの初期化
    313292         *
    314          *  既に初期化している場合は, 二重に初期化しない.
     293         *  既に初期化している場合は, 二重に初期化しない.
    315294         */
    316295        if(!(p_siopcb->is_initialized)){
     
    327306
    328307/*
    329  *  シリアルI/Oポートのクローズ
     308 *  シリアルI/Oポートのクローズ
    330309 */
    331310void
     
    333312{
    334313        /*
    335          *  UART停止
     314         *  UART停止
    336315         */
    337316        sil_wrh_mem((volatile uint16_t *)p_siopcb->p_siopinib->ctlreg, 0x00U);
     
    341320
    342321/*
    343  *  シリアルI/Oポートへの文字送信
     322 *  シリアルI/Oポートへの文字送信
    344323 */
    345324bool_t
     
    357336
    358337/*
    359  *  シリアルI/Oポートからの文字受信
     338 *  シリアルI/Oポートからの文字受信
    360339 */
    361340int_t
     
    365344
    366345        /*
    367          *  受信フラグがONのときのみ受信バッファから文字を取得する.
    368          *  これは, ポーリング受信に対応するためである.
    369          *  しかし, RX600シリーズでは受信フラグがないこと, システムサービス
    370          *  では受信割込みの中からしかデータを受信しに来ないことから, 常に
    371          *  受信バッファから文字を取得する.
     346         *  受信フラグがONのときのみ受信バッファから文字を取得する.
     347         *  これは, ポーリング受信に対応するためである.
     348         *  しかし, RX600シリーズでは受信フラグがないこと, システムサービス
     349         *  では受信割込みの中からしかデータを受信しに来ないことから, 常に
     350         *  受信バッファから文字を取得する.
    372351         */
    373352        c = (int)(sil_reb_mem(p_siopcb->p_siopinib->rdreg));
     
    377356
    378357/*
    379  *  シリアルI/Oポートからのコールバックの許可
     358 *  シリアルI/Oポートからのコールバックの許可
    380359 */
    381360void
     
    398377
    399378/*
    400  *  シリアルI/Oポートからのコールバックの禁止
     379 *  シリアルI/Oポートからのコールバックの禁止
    401380 */
    402381void
     
    419398
    420399/*
    421  *  SIOの割込みサービスルーチン
     400 *  SIOの割込みサービスルーチン
    422401 */
    423402void
     
    429408                (void *)p_siopcb->p_siopinib->ssrreg) & SCI_SSR_TEND_BIT) != 0U){
    430409                /*
    431                  *  送信可能コールバックルーチンを呼び出す.
     410                 *  送信可能コールバックルーチンを呼び出す.
    432411                 */
    433412                rx630_uart_irdy_snd(p_siopcb->exinf);
     
    441420
    442421        /*
    443          *  受信フラグがONのときのみ受信通知コールバックルーチンを呼び出す.
    444          *  しかし, RX600シリーズでは受信フラグがないため, 常に受信通知
    445          *  コールバックルーチンを呼び出す.
    446          *  ここでは受信割込みの発生を信じる.
    447          */
    448         /*
    449          *  受信通知コールバックルーチンを呼び出す.
     422         *  受信フラグがONのときのみ受信通知コールバックルーチンを呼び出す.
     423         *  しかし, RX600シリーズでは受信フラグがないため, 常に受信通知
     424         *  コールバックルーチンを呼び出す.
     425         *  ここでは受信割込みの発生を信じる.
     426         */
     427        /*
     428         *  受信通知コールバックルーチンを呼び出す.
    450429         */
    451430        rx630_uart_irdy_rcv(p_siopcb->exinf);
     
    454433
    455434/*
    456  *  ポート番号から管理ブロックのå
    457 ˆé ­ç•ªåœ°ã¸ã®å¤‰æ›
     435 *  ポート番号から管理ブロックの先頭番地への変換
    458436 */
    459437SIOPCB *
     
    464442
    465443/*
    466  * 管理ブロックのå
    467 ˆé ­ç•ªåœ°ã‹ã‚‰å—信割込み番号への変換
     444 * 管理ブロックの先頭番地から受信割込み番号への変換
    468445 */
    469446INTNO
     
    474451
    475452/*
    476  * 管理ブロックのå
    477 ˆé ­ç•ªåœ°ã‹ã‚‰é€ä¿¡å‰²è¾¼ã¿ç•ªå·ã¸ã®å¤‰æ›
     453 * 管理ブロックの先頭番地から送信割込み番号への変換
    478454 */
    479455INTNO
Note: See TracChangeset for help on using the changeset viewer.