Ignore:
Timestamp:
Jul 3, 2020, 7:19:17 PM (4 years ago)
Author:
coas-nagasima
Message:

ASP3, TINET, mbed を更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/tSCIF.c

    r321 r429  
    11/*
    2  *  TOPPERS/ASP Kernel
    3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
    4  *      Advanced Standard Profile Kernel
     2 *  TOPPERS Software
     3 *      Toyohashi Open Platform for Embedded Real-Time Systems
    54 *
    6  *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
     5 *  Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory
    76 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    87 *
     
    133132        uint_t  brr;
    134133
    135         if (VAR_initialized) {
    136                 /*
    137                  *  既に初期化している場合は、二重に初期化しない.
    138                  */
    139                 return;
    140         }
    141 
    142         brr = SCIF_CLK / (32 * ATTR_baudRate) - 1;
    143         assert(brr <= 255);
    144 
    145         sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), 0U);
    146         sil_wrh_mem(SCIF_SCFCR(ATTR_baseAddress),
     134        if (!VAR_opened) {
     135                /*
     136                 *  既にオープンしている場合は、二重にオープンしない.
     137                 */
     138                brr = SCIF_CLK / (32 * ATTR_baudRate) - 1;
     139                assert(brr <= 255);
     140
     141                sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), 0U);
     142                sil_wrh_mem(SCIF_SCFCR(ATTR_baseAddress),
    147143                                                        SCIF_SCFCR_TFRST|SCIF_SCFCR_RFRST);
    148         (void) sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress));
    149         (void) sil_reh_mem(SCIF_SCLSR(ATTR_baseAddress));
    150         sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), 0U);
    151         sil_wrh_mem(SCIF_SCLSR(ATTR_baseAddress), 0U);
    152         sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), SCIF_SCSCR_INTCLK);
    153         sil_wrh_mem(SCIF_SCSMR(ATTR_baseAddress), SCIF_SCSMR_CKS1);
    154         sil_wrh_mem(SCIF_SCEMR(ATTR_baseAddress), 0U);
    155         sil_wrb_mem(SCIF_SCBRR(ATTR_baseAddress), (uint8_t) brr);
    156         sil_wrh_mem(SCIF_SCFCR(ATTR_baseAddress),
     144                (void) sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress));
     145                (void) sil_reh_mem(SCIF_SCLSR(ATTR_baseAddress));
     146                sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), 0U);
     147                sil_wrh_mem(SCIF_SCLSR(ATTR_baseAddress), 0U);
     148                sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), SCIF_SCSCR_INTCLK);
     149                sil_wrh_mem(SCIF_SCSMR(ATTR_baseAddress),
     150                                                        SCIF_SCSMR_ASYNC|ATTR_mode|SCIF_SCSMR_CKS1);
     151                sil_wrh_mem(SCIF_SCEMR(ATTR_baseAddress), 0U);
     152                sil_wrb_mem(SCIF_SCBRR(ATTR_baseAddress), (uint8_t) brr);
     153                sil_wrh_mem(SCIF_SCFCR(ATTR_baseAddress),
    157154                                        SCIF_SCFCR_RSTRG_15|SCIF_SCFCR_RTRG_1|SCIF_SCFCR_TTRG_8);
    158         sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress),
     155                sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress),
    159156                                        SCIF_SCSCR_TE|SCIF_SCSCR_RE|SCIF_SCSCR_INTCLK);
    160157
    161         while ((sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress)) & SCIF_SCFSR_RDF) != 0U) {
    162                 (void) sil_reb_mem(SCIF_SCFRDR(ATTR_baseAddress));
    163                 sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), (uint16_t) ~(SCIF_SCFSR_RDF));
    164         }
    165         sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), 0U);
    166 
    167         VAR_initialized = true;
     158                while ((sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress)) & SCIF_SCFSR_RDF)
     159                                                                                                                                        != 0U) {
     160                        (void) sil_reb_mem(SCIF_SCFRDR(ATTR_baseAddress));
     161                        sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress),
     162                                                        (uint16_t) ~(SCIF_SCFSR_RDF));
     163                }
     164                sil_wrh_mem(SCIF_SCFSR(ATTR_baseAddress), 0U);
     165
     166                VAR_opened = true;
     167        }
    168168}
    169169
     
    176176        CELLCB  *p_cellcb = GET_CELLCB(idx);
    177177
    178         sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), 0U);
     178        if (VAR_opened) {
     179                sil_wrh_mem(SCIF_SCSCR(ATTR_baseAddress), 0U);
     180
     181                VAR_opened = false;
     182        }
    179183}
    180184
     
    284288        }
    285289}
     290
     291/*
     292 *  SIOドライバの終了処理
     293 */
     294void
     295eTerminate_main(CELLIDX idx)
     296{
     297        CELLCB  *p_cellcb = GET_CELLCB(idx);
     298
     299        if (VAR_opened) {
     300                /*
     301                 *  送信FIFOが空になるまで待つ
     302                 */
     303                while ((sil_reh_mem(SCIF_SCFSR(ATTR_baseAddress))
     304                                                                                        & SCIF_SCFSR_TEND) == 0U) ;
     305                /*
     306                 *  ポートのクローズ
     307                 */
     308                eSIOPort_close(idx);
     309        }
     310}
Note: See TracChangeset for help on using the changeset viewer.