Changeset 429 for EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/tSCIF.c
- Timestamp:
- Jul 3, 2020, 7:19:17 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/rza1/tSCIF.c
r321 r429 1 1 /* 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 5 4 * 6 * Copyright (C) 2006-201 6by Embedded and Real-Time Systems Laboratory5 * Copyright (C) 2006-2019 by Embedded and Real-Time Systems Laboratory 7 6 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 7 * … … 133 132 uint_t brr; 134 133 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), 147 143 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), 157 154 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), 159 156 SCIF_SCSCR_TE|SCIF_SCSCR_RE|SCIF_SCSCR_INTCLK); 160 157 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 } 168 168 } 169 169 … … 176 176 CELLCB *p_cellcb = GET_CELLCB(idx); 177 177 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 } 179 183 } 180 184 … … 284 288 } 285 289 } 290 291 /* 292 * SIOドライバの終了処理 293 */ 294 void 295 eTerminate_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.