Ignore:
Timestamp:
Mar 8, 2016, 8:37:45 PM (8 years ago)
Author:
coas-nagasima
Message:

MIMEにSJISを設定

Location:
UsbWattMeter/trunk/asp_dcre/pdic/rx600
Files:
2 edited

Legend:

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

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    77 *  Copyright (C) 2013      by Mitsuhiro Matsuura
    88 *
    9  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    10  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    11  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18  *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    23  *      ‚ƁD
    24  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    25 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    26 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    27  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    28  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    29  *        •ñ‚·‚邱‚ƁD
    30  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    31  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    32  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    33  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    34  *      –Ɛӂ·‚邱‚ƁD
     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 *      免責すること.
    3531 *
    36  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    37  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    38  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    39  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    40  *  ‚̐ӔC‚𕉂í‚È‚¢D
     32 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36 *  の責任を負わない.
    4137 *
    4238 *  @(#) $Id$
     
    4541
    4642/*
    47  * UART—p ŠÈˆÕSIOƒhƒ‰ƒCƒo
     43 * UART用 簡易SIOドライバ
    4844 */
    4945
     
    5450#include "rx630_uart.h"
    5551
    56 /* ƒVƒŠƒAƒ‹ƒ‚[ƒhƒŒƒWƒXƒ^iSMR) */
     52/* シリアルモードレジスタ(SMR) */
    5753#define CKS                     UINT_C(0x03)
    5854#define STOP            UINT_C(0x08)
     
    6460#define ASYNC_8BIT      UINT_C(0x40)
    6561
    66 /* ƒVƒŠƒAƒ‹ƒRƒ“ƒgƒ[ƒ‹ƒŒƒWƒXƒ^iSCR) */
     62/* シリアルコントロールレジスタ(SCR) */
    6763#define CKE                     UINT_C(0x03)
    6864#define TEIE            UINT_C(0x04)
     
    7268#define TIE                     UINT_C(0x80)
    7369
    74 /* ƒVƒŠƒAƒ‹ƒXƒe[ƒ^ƒXƒŒƒWƒXƒ^iSSRj */
     70/* シリアルステータスレジスタ(SSR) */
    7571#define TEND            UINT_C(0x04)
    7672#define PER                     UINT_C(0x08)
     
    7874#define ORER            UINT_C(0x20)
    7975
    80 /* ƒVƒŠƒAƒ‹Šg’£ƒ‚[ƒhƒŒƒWƒXƒ^iSEMR) */
     76/* シリアル拡張モードレジスタ(SEMR) */
    8177#define ACS0            UINT_C(0x01)
    8278#define ABCS            UINT_C(0x10)
     
    8682
    8783/*
    88  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‰Šú‰»ƒuƒƒbƒN‚Ì’è‹`
     84 *  シリアルI/Oポート初期化ブロックの定義
    8985 */
    9086typedef struct sio_port_initialization_block {
    91         volatile uint8_t        *ctlreg;                /* ƒVƒŠƒAƒ‹ƒRƒ“ƒgƒ[ƒ‹ƒŒƒWƒXƒ^iSCR) */
    92         volatile uint8_t        *modereg;               /* ƒVƒŠƒAƒ‹ƒ‚[ƒhƒŒƒWƒXƒ^iSMR) */
    93         volatile uint8_t        *extmodereg;    /* ƒVƒŠƒAƒ‹Šg’£ƒ‚[ƒhƒŒƒWƒXƒ^iSEMR) */
    94         volatile uint8_t        *statusreg;             /* ƒVƒŠƒAƒ‹ƒXƒe[ƒ^ƒXƒŒƒWƒXƒ^iSSRj */
    95         volatile uint8_t        *tdreg;                 /* ƒgƒ‰ƒ“ƒXƒ~ƒbƒgƒf[ƒ^ƒŒƒWƒXƒ^iTDR)*/
    96         volatile uint8_t        *rdreg;                 /* ƒŒƒV[ƒuƒf[ƒ^ƒŒƒWƒXƒ^iRDR) */
    97         volatile uint8_t        *bitratereg;    /* ƒrƒbƒgƒŒ[ƒgƒŒƒWƒXƒ^iBRR) */
    98         volatile uint32_t       *mstpcrreg;             /* ƒ‚ƒWƒ
    99 [ƒ‹ƒXƒgƒbƒvƒRƒ“ƒgƒ[ƒ‹ƒŒƒWƒXƒ^iMSTPCRj */
    100         volatile uint8_t        *ssrreg;                /* ƒXƒe[ƒ^ƒXƒŒƒWƒXƒ^ */
    101         volatile uint8_t        *rxiirreg;              /* RXI—pŠ„ž‚Ý—v‹ƒŒƒWƒXƒ^ */
    102         uint8_t                         tx_intno;               /* ‘—Miƒf[ƒ^ƒGƒ“ƒvƒeƒBjŠ„‚荞‚ݔԍ† */
    103         uint8_t                         rx_intno;               /* ŽóMiƒf[ƒ^ƒtƒ‹jŠ„‚荞‚ݔԍ† */
    104         uint8_t                         te_intno;               /* ‘—MiI—¹jŠ„‚荞‚ݔԍ† */
    105         uint8_t                         sci_no;                 /* SCI‚̔ԍ†(SCI0`SCI6) */
    106         uint32_t                        mstpcr_offset;  /* MSTPCR‚̑Ήž‚·‚éƒrƒbƒgƒIƒtƒZƒbƒg */
     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の対応するビットオフセット */
    107102} SIOPINIB;
    108103
    109104/*
    110  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒgŠÇ—ƒuƒƒbƒN‚Ì’è‹`
     105 *  シリアルI/Oポート管理ブロックの定義
    111106 */
    112107struct sio_port_control_block {
    113         const SIOPINIB  *p_siopinib;                            /* ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‰Šú‰»ƒuƒƒbƒN */
    114         intptr_t        exinf;                                                  /* Šg’£î•ñ */
    115         bool_t          openflag;                                               /* ƒI[ƒvƒ“Ï‚݃tƒ‰ƒO */
    116         bool_t          sendflag;                                               /* ‘—MŠ„ž‚݃Cƒl[ƒuƒ‹ƒtƒ‰ƒO */
    117         bool_t          getready;                                               /* •¶Žš‚ðŽóM‚µ‚½ó‘Ô */
    118         bool_t          putready;                                               /* •¶Žš‚𑗐M‚Å‚«‚éó‘Ô */
    119         bool_t          is_initialized;                                 /* ƒfƒoƒCƒX‰Šú‰»Ï‚݃tƒ‰ƒO */
     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;                                 /* デバイス初期化済みフラグ */
    120115};
    121116
    122117/*
    123  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒgŠÇ—ƒuƒƒbƒN‚̃GƒŠƒA
     118 *  シリアルI/Oポート管理ブロックのエリア
    124119 */
    125120static SIOPCB   siopcb_table[TNUM_SIOP];
    126121
    127 /* ƒŒƒWƒXƒ^ƒe[ƒuƒ‹ */
     122/* レジスタテーブル */
    128123static const SIOPINIB siopinib_table[TNUM_SIOP] =
    129124{
     
    167162
    168163/*
    169  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒgID‚©‚çŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     164 *  シリアルI/OポートIDから管理ブロックを取り出すためのマクロ
    170165 */
    171166#define INDEX_SIOP(siopid)       ((uint_t)((siopid) - 1))
     
    175170
    176171/*
    177  *  SIOƒhƒ‰ƒCƒo‚̃VƒŠƒAƒ‹ƒ‚[ƒhƒŒƒWƒXƒ^(SMR)
     172 *  SIOドライバのシリアルモードレジスタ(SMR)
    178173 */
    179174static void
     
    183178
    184179        /*
    185          *  SCIƒhƒ‰ƒCƒo‚̏‰Šú‰»ƒ‹[ƒ`ƒ“
    186          */
    187 
    188         /*
    189          *  Š„‚荞‚Ý—v‹æƒŒƒWƒXƒ^‚̐ݒè(ISELRi)
     180         *  SCIドライバの初期化ルーチン
     181         */
     182
     183        /*
     184         *  割り込み要求先レジスタの設定(ISELRi)
    190185         *
    191          *  ƒŠƒZƒbƒg’l‚Æ“¯‚¶’l‚ðÝ’è‚·‚邱‚ƂɂȂ邽‚ß,
    192          *  ˆ—‚͏ȗª‚·‚é.
    193          */
    194 
    195         /*
    196          *  ƒ‚ƒWƒ
    197 [ƒ‹ƒXƒgƒbƒv‹@”\‚̐ݒè
    198          */
    199         sil_wrh_mem((uint16_t *)SYSTEM_PRCR_ADDR, (uint16_t)0xA502);    /* ‘ž‚Ý‹–‰Â */
     186         *  リセット値と同じ値を設定することになるため,
     187         *  処理は省略する.
     188         */
     189
     190        /*
     191         *  モジュールストップ機能の設定
     192         */
     193        sil_wrh_mem((uint16_t *)SYSTEM_PRCR_ADDR, (uint16_t)0xA502);    /* 書込み許可 */
    200194        sil_wrw_mem((uint32_t *)p_siopinib->mstpcrreg,
    201195                sil_rew_mem((uint32_t *)p_siopinib->mstpcrreg) & ~p_siopinib->mstpcr_offset);
    202         sil_wrh_mem((uint16_t *)SYSTEM_PRCR_ADDR, (uint16_t)0xA500);    /* ‘ž‚Ý‹ÖŽ~ */
    203 
    204         /* ‘—ŽóM‹ÖŽ~, SCKn’[Žq‚Í“üo—̓|[ƒg‚Æ‚µ‚ÄŽg—p */
     196        sil_wrh_mem((uint16_t *)SYSTEM_PRCR_ADDR, (uint16_t)0xA500);    /* 書込み禁止 */
     197
     198        /* 送受信禁止, SCKn端子は入出力ポートとして使用 */
    205199        sil_wrb_mem((uint8_t *)p_siopinib->ctlreg, 0x00U);
    206200
    207         /* ƒNƒƒbƒN‘I‘ðƒrƒbƒg(SMR.CKS[1:0]ƒrƒbƒg‚ðÝ’è) */
     201        /* クロック選択ビット(SMR.CKS[1:0]ビットを設定) */
    208202        sil_wrb_mem((uint8_t *)p_siopinib->modereg,
    209203                                        sil_reb_mem((uint8_t *)p_siopinib->modereg) | clksrc);
    210204
    211         /* SMR‚É‘—M^ ŽóMƒtƒH[ƒ}ƒbƒg‚ðÝ’è) */
     205        /* SMRに送信/ 受信フォーマットを設定) */
    212206        sil_wrb_mem((uint8_t *)p_siopinib->modereg,
    213207                        sil_reb_mem((uint8_t *)p_siopinib->modereg) & (~SCI_SMR_FLG_ENABLE));
    214208
    215         /* ƒrƒbƒgƒŒ[ƒg‚ðÝ’è */
     209        /* ビットレートを設定 */
    216210        sil_wrb_mem((uint8_t *)p_siopinib->bitratereg, bitrate);
    217211
    218         /* ƒrƒbƒgŠúŠÔ(Šî–{ƒNƒƒbƒN16ƒTƒCƒNƒ‹‚ÌŠúŠÔ‚ª1ƒrƒbƒgŠúŠÔ‚Æ‚È‚é) */
     212        /* ビット期間(基本クロック16サイクルの期間が1ビット期間となる) */
    219213        for(i = 0; i < 16; i++) { }
    220214
    221         /* ‘—ŽóM‹–‰Â */
     215        /* 送受信許可 */
    222216        sil_wrb_mem((uint8_t *)p_siopinib->ctlreg,
    223217                (sil_reb_mem((uint8_t *)p_siopinib->ctlreg) | SCI_SCR_FLG_ENABLE));
     
    226220
    227221/*
    228  *  SIOƒhƒ‰ƒCƒo‚̏‰Šú‰»ƒ‹[ƒ`ƒ“
     222 *  SIOドライバの初期化ルーチン
    229223 */
    230224void
     
    235229
    236230        /*
    237          *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒgŠÇ—ƒuƒƒbƒN‚̏‰Šú‰»
     231         *  シリアルI/Oポート管理ブロックの初期化
    238232         */
    239233        for (p_siopcb = siopcb_table, i = 0; i < TNUM_SIOP; p_siopcb++, i++){
     
    245239
    246240/*
    247  *  ƒJ[ƒlƒ‹‹N“®Žž‚̃oƒi[o—Í—p‚̏‰Šú‰»
     241 *  カーネル起動時のバナー出力用の初期化
    248242 */
    249243void
     
    252246        SIOPCB          *p_siopcb   = get_siopcb(siopid);
    253247        const SIOPINIB  *p_siopinib = get_siopinib(siopid);
    254         /*  ‚±‚ÌŽž“_‚ł́Ap_siopcb->p_siopinib‚͏‰Šú‰»‚³‚ê‚Ä‚¢‚È‚¢  */
    255 
    256         /*  “ñd‰Šú‰»‚Ì–hŽ~  */
     248        /*  この時点では、p_siopcb->p_siopinibは初期化されていない  */
     249
     250        /*  二重初期化の防止  */
    257251        p_siopcb->is_initialized = true;
    258252
    259         /*  ƒn[ƒhƒEƒFƒA‚̏‰Šú‰»ˆ—‚Æ‘—M‹–‰Â  */
     253        /*  ハードウェアの初期化処理と送信許可  */
    260254        rx630_uart_setmode(p_siopinib , bitrate, clksrc);
    261255        sil_wrb_mem((uint8_t *)p_siopinib->ctlreg,
     
    264258
    265259/*
    266  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚ւ̃|[ƒŠƒ“ƒO‚ł̏o—Í
     260 *  シリアルI/Oポートへのポーリングでの出力
    267261 */
    268262void
     
    274268
    275269        /*
    276          *  ‘—MƒŒƒWƒXƒ^‚ª‹ó‚É‚È‚é‚Ü‚Å‘Ò‚Â
     270         *  送信レジスタが空になるまで待つ
    277271         */
    278272        while((sil_reb_mem((uint8_t *)p_siopinib->ssrreg) & SCI_SSR_TEND_BIT) == 0U);
     
    282276
    283277/*
    284  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚̃I[ƒvƒ“
     278 *  シリアルI/Oポートのオープン
    285279 */
    286280SIOPCB *
     
    295289
    296290        /*
    297          *  ƒn[ƒhƒEƒFƒA‚̏‰Šú‰»
     291         *  ハードウェアの初期化
    298292         *
    299          *  Šù‚ɏ‰Šú‰»‚µ‚Ä‚¢‚éê‡‚Í, “ñd‚ɏ‰Šú‰»‚µ‚È‚¢.
     293         *  既に初期化している場合は, 二重に初期化しない.
    300294         */
    301295        if(!(p_siopcb->is_initialized)){
     
    312306
    313307/*
    314  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚̃Nƒ[ƒY
     308 *  シリアルI/Oポートのクローズ
    315309 */
    316310void
     
    318312{
    319313        /*
    320          *  UART’âŽ~
     314         *  UART停止
    321315         */
    322316        sil_wrh_mem((uint16_t *)p_siopcb->p_siopinib->ctlreg, 0x00U);
     
    326320
    327321/*
    328  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚Ö‚Ì•¶Žš‘—M
     322 *  シリアルI/Oポートへの文字送信
    329323 */
    330324bool_t
     
    343337
    344338/*
    345  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚Ì•¶ŽšŽóM
     339 *  シリアルI/Oポートからの文字受信
    346340 */
    347341int_t
     
    351345
    352346        /*
    353          *  ŽóMƒtƒ‰ƒO‚ªON‚Ì‚Æ‚«‚Ì‚ÝŽóMƒoƒbƒtƒ@‚©‚當Žš‚ðŽæ“¾‚·‚é.
    354          *  ‚±‚ê‚Í, ƒ|[ƒŠƒ“ƒOŽóM‚ɑΉž‚·‚邽‚ß‚Å‚ ‚é.
    355          *  ‚µ‚©‚µ, RX600ƒVƒŠ[ƒY‚Å‚ÍŽóMƒtƒ‰ƒO‚ª‚È‚¢‚±‚Æ, ƒVƒXƒeƒ€ƒT[ƒrƒX
    356          *  ‚Å‚ÍŽóMŠ„ž‚Ý‚Ì’†‚©‚炵‚©ƒf[ƒ^‚ðŽóM‚µ‚É—ˆ‚È‚¢‚±‚Æ‚©‚ç, í‚É
    357          *  ŽóMƒoƒbƒtƒ@‚©‚當Žš‚ðŽæ“¾‚·‚é.
     347         *  受信フラグがONのときのみ受信バッファから文字を取得する.
     348         *  これは, ポーリング受信に対応するためである.
     349         *  しかし, RX600シリーズでは受信フラグがないこと, システムサービス
     350         *  では受信割込みの中からしかデータを受信しに来ないことから, 常に
     351         *  受信バッファから文字を取得する.
    358352         */
    359353        c = (int)(sil_reb_mem((uint8_t *)p_siopcb->p_siopinib->rdreg));
     
    363357
    364358/*
    365  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚̃R[ƒ‹ƒoƒbƒN‚Ì‹–‰Â
     359 *  シリアルI/Oポートからのコールバックの許可
    366360 */
    367361void
     
    384378
    385379/*
    386  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚̃R[ƒ‹ƒoƒbƒN‚Ì‹ÖŽ~
     380 *  シリアルI/Oポートからのコールバックの禁止
    387381 */
    388382void
     
    405399
    406400/*
    407  *  SIO‚ÌŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“
     401 *  SIOの割込みサービスルーチン
    408402 */
    409403void
     
    415409                (void *)p_siopcb->p_siopinib->ssrreg) & SCI_SSR_TEND_BIT) != 0U){
    416410                /*
    417                  *  ‘—M‰Â”\ƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·D
     411                 *  送信可能コールバックルーチンを呼び出す.
    418412                 */
    419413                rx630_uart_irdy_snd(p_siopcb->exinf);
     
    427421
    428422        /*
    429          *  ŽóMƒtƒ‰ƒO‚ªON‚Ì‚Æ‚«‚Ì‚ÝŽóM’Ê’mƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·.
    430          *  ‚µ‚©‚µ, RX600ƒVƒŠ[ƒY‚Å‚ÍŽóMƒtƒ‰ƒO‚ª‚È‚¢‚½‚ß, í‚ÉŽóM’Ê’m
    431          *  ƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·.
    432          *  ‚±‚±‚Å‚ÍŽóMŠ„ž‚Ý‚Ì”­¶‚ðM‚¶‚é.
    433          */
    434         /*
    435          *  ŽóM’Ê’mƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·D
     423         *  受信フラグがONのときのみ受信通知コールバックルーチンを呼び出す.
     424         *  しかし, RX600シリーズでは受信フラグがないため, 常に受信通知
     425         *  コールバックルーチンを呼び出す.
     426         *  ここでは受信割込みの発生を信じる.
     427         */
     428        /*
     429         *  受信通知コールバックルーチンを呼び出す.
    436430         */
    437431        rx630_uart_irdy_rcv(p_siopcb->exinf);
     
    440434
    441435/*
    442  *  ƒ|[ƒg”ԍ†‚©‚çŠÇ—ƒuƒƒbƒN‚̐擪”Ô’n‚Ö‚Ì•ÏŠ·
     436 *  ポート番号から管理ブロックの先頭番地への変換
    443437 */
    444438SIOPCB *
     
    449443
    450444/*
    451  * ŠÇ—ƒuƒƒbƒN‚̐擪”Ô’n‚©‚çŽóMŠ„ž‚ݔԍ†‚Ö‚Ì•ÏŠ·
     445 * 管理ブロックの先頭番地から受信割込み番号への変換
    452446 */
    453447INTNO
     
    458452
    459453/*
    460  * ŠÇ—ƒuƒƒbƒN‚̐擪”Ô’n‚©‚ç‘—MŠ„ž‚ݔԍ†‚Ö‚Ì•ÏŠ·
     454 * 管理ブロックの先頭番地から送信割込み番号への変換
    461455 */
    462456INTNO
  • UsbWattMeter/trunk/asp_dcre/pdic/rx600/rx630_uart.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    77 *  Copyright (C) 2013      by Mitsuhiro Matsuura
    88 *
    9  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    10  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    11  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18  *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    23  *      ‚ƁD
    24  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    25 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    26 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    27  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    28  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    29  *        •ñ‚·‚邱‚ƁD
    30  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    31  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    32  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    33  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    34  *      –Ɛӂ·‚邱‚ƁD
     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 *      免責すること.
    3531 *
    36  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    37  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    38  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    39  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    40  *  ‚̐ӔC‚𕉂í‚È‚¢D
     32 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36 *  の責任を負わない.
    4137 *
    4238 *  @(#) $Id$
     
    4440
    4541/*
    46  *  UART—p ŠÈˆÕSIOƒhƒ‰ƒCƒo
     42 *  UART用 簡易SIOドライバ
    4743 */
    4844
     
    5046#define TOPPERS_RX630_UART_H
    5147
    52 /* Žw’è‰Â”\‚ȃNƒƒbƒNƒ\[ƒX */
     48/* 指定可能なクロックソース */
    5349#define CLK_F1  UINT_C(0x00)
    5450#define CLK_F4  UINT_C(0x01)
     
    5955
    6056/*
    61  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒgŠÇ—ƒuƒƒbƒN‚Ì’è‹`
     57 *  シリアルI/Oポート管理ブロックの定義
    6258 */
    6359typedef struct sio_port_control_block   SIOPCB;
    6460
    6561/*
    66  *  ƒR[ƒ‹ƒoƒbƒNƒ‹[ƒ`ƒ“‚ÌŽ¯•Ê”ԍ†
     62 *  コールバックルーチンの識別番号
    6763 */
    68 #define SIO_RDY_SND    (1U)        /* ‘—M‰Â”\ƒR[ƒ‹ƒoƒbƒN */
    69 #define SIO_RDY_RCV    (2U)        /* ŽóM’Ê’mƒR[ƒ‹ƒoƒbƒN */
     64#define SIO_RDY_SND    (1U)        /* 送信可能コールバック */
     65#define SIO_RDY_RCV    (2U)        /* 受信通知コールバック */
    7066
    7167/*
    72  *  SIOƒhƒ‰ƒCƒo‚̏‰Šú‰»ƒ‹[ƒ`ƒ“
     68 *  SIOドライバの初期化ルーチン
    7369 */
    7470extern void rx630_uart_initialize(void);
    7571
    7672/*
    77  * ƒJ[ƒlƒ‹‹N“®Žž‚̃oƒi[o—Í—p‚̏‰Šú‰»
     73 * カーネル起動時のバナー出力用の初期化
    7874 */
    7975extern void rx630_uart_init(ID siopid , uint8_t baud , uint8_t clksrc);
    8076
    8177/*
    82  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚ւ̃|[ƒŠƒ“ƒO‚ł̏o—Í
     78 *  シリアルI/Oポートへのポーリングでの出力
    8379 */
    8480extern void rx630_uart_pol_putc(char c, ID siopid);
    8581
    8682/*
    87  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚̃I[ƒvƒ“
     83 *  シリアルI/Oポートのオープン
    8884 */
    8985extern SIOPCB *rx630_uart_opn_por
     
    9187
    9288/*
    93  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚̃Nƒ[ƒY
     89 *  シリアルI/Oポートのクローズ
    9490 */
    9591extern void rx630_uart_cls_por(SIOPCB *p_siopcb);
    9692
    9793/*
    98  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚Ö‚Ì•¶Žš‘—M
     94 *  シリアルI/Oポートへの文字送信
    9995 */
    10096extern bool_t rx630_uart_snd_chr(SIOPCB *p_siopcb, char c);
    10197
    10298/*
    103  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚Ì•¶ŽšŽóM
     99 *  シリアルI/Oポートからの文字受信
    104100 */
    105101extern int_t rx630_uart_rcv_chr(SIOPCB *p_siopcb);
    106102
    107103/*
    108  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚̃R[ƒ‹ƒoƒbƒN‚Ì‹–‰Â
     104 *  シリアルI/Oポートからのコールバックの許可
    109105 */
    110106extern void  rx630_uart_ena_cbr(SIOPCB *p_siopcb, uint_t cbrtn);
    111107
    112108/*
    113  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚̃R[ƒ‹ƒoƒbƒN‚Ì‹ÖŽ~
     109 *  シリアルI/Oポートからのコールバックの禁止
    114110 */
    115111extern void rx630_uart_dis_cbr(SIOPCB *p_siopcb, uint_t cbrtn);
    116112
    117113/*
    118  *  SIO‚ÌŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“
     114 *  SIOの割込みサービスルーチン
    119115 */
    120116extern void rx630_uart_tx_isr(ID siopid);
     
    122118
    123119/*
    124  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚Ì‘—M‰Â”\ƒR[ƒ‹ƒoƒbƒN
     120 *  シリアルI/Oポートからの送信可能コールバック
    125121 */
    126122extern void rx630_uart_irdy_snd(intptr_t exinf);
    127123
    128124/*
    129  *  ƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚©‚ç‚ÌŽóM’Ê’mƒR[ƒ‹ƒoƒbƒN
     125 *  シリアルI/Oポートからの受信通知コールバック
    130126 */
    131127extern void rx630_uart_irdy_rcv(intptr_t exinf);
     
    133129
    134130/*
    135  *  ƒ|[ƒg”ԍ†‚©‚çŠÇ—ƒuƒƒbƒN‚̐擪”Ô’n‚Ö‚Ì•ÏŠ·
     131 *  ポート番号から管理ブロックの先頭番地への変換
    136132 */
    137133extern SIOPCB *rx630_uart_get_siopcb(ID siopid);
    138134
    139135/*
    140  * ŠÇ—ƒuƒƒbƒN‚̐擪”Ô’n‚©‚çŽóMŠ„ž‚ݔԍ†‚Ö‚Ì•ÏŠ·
     136 * 管理ブロックの先頭番地から受信割込み番号への変換
    141137 */
    142138extern INTNO rx630_uart_intno_rx(SIOPCB *p_siopcb);
    143139
    144140/*
    145  * ŠÇ—ƒuƒƒbƒN‚̐擪”Ô’n‚©‚ç‘—MŠ„ž‚ݔԍ†‚Ö‚Ì•ÏŠ·
     141 * 管理ブロックの先頭番地から送信割込み番号への変換
    146142 */
    147143extern INTNO rx630_uart_intno_tx(SIOPCB *p_siopcb);
Note: See TracChangeset for help on using the changeset viewer.