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/common/tUartPL011.c

    r321 r429  
    11/*
    2  *  TOPPERS/ASP Kernel
    3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
    4  *      Advanced Standard Profile Kernel
    5  *
    6  *  Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
     2 *  TOPPERS Software
     3 *      Toyohashi Open Platform for Embedded Real-Time Systems
     4 *
     5 *  Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory
    76 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    87 *
     
    9594        CELLCB  *p_cellcb = GET_CELLCB(idx);
    9695
    97         /*
    98          *  UARTをディスエーブル
    99          */
    100         sil_wrw_mem(UART_CR(ATTR_baseAddress), 0U);
    101 
    102         /*
    103          *  エラーフラグをクリア
    104          */
    105         sil_wrw_mem(UART_ECR(ATTR_baseAddress), 0U);
    106 
    107         /*
    108          *  FIFOを空にする
    109          */
    110         while (uart_pl011_getready(p_cellcb)) {
    111                 (void) uart_pl011_getchar(p_cellcb);
    112         }
    113 
    114         /*
    115          *  ボーレートと通信規格を設定
    116          */
    117         sil_wrw_mem(UART_IBRD(ATTR_baseAddress), ATTR_ibrd);
    118         sil_wrw_mem(UART_FBRD(ATTR_baseAddress), ATTR_fbrd);
    119         sil_wrw_mem(UART_LCR_H(ATTR_baseAddress), ATTR_lcr_h);
    120                
    121         /*
    122          *  UARTをイネーブル
    123          */
    124         sil_wrw_mem(UART_CR(ATTR_baseAddress),
     96        if (!VAR_opened) {
     97                /*
     98                 *  既にオープンしている場合は、二重にオープンしない.
     99                 */
     100
     101                /*
     102                 *  UARTをディスエーブル
     103                 */
     104                sil_wrw_mem(UART_CR(ATTR_baseAddress), 0U);
     105
     106                /*
     107                 *  エラーフラグをクリア
     108                 */
     109                sil_wrw_mem(UART_ECR(ATTR_baseAddress), 0U);
     110
     111                /*
     112                 *  FIFOを空にする
     113                 */
     114                while (uart_pl011_getready(p_cellcb)) {
     115                        (void) uart_pl011_getchar(p_cellcb);
     116                }
     117
     118                /*
     119                 *  ボーレートと通信規格を設定
     120                 */
     121                sil_wrw_mem(UART_IBRD(ATTR_baseAddress), ATTR_ibrd);
     122                sil_wrw_mem(UART_FBRD(ATTR_baseAddress), ATTR_fbrd);
     123                sil_wrw_mem(UART_LCR_H(ATTR_baseAddress), ATTR_lcr_h);
     124
     125                /*
     126                 *  UARTをイネーブル
     127                 */
     128                sil_wrw_mem(UART_CR(ATTR_baseAddress),
    125129                                                UART_CR_UARTEN|UART_CR_TXE|UART_CR_RXE);
     130
     131                VAR_opened = true;
     132        }
    126133}
    127134
     
    134141        CELLCB  *p_cellcb = GET_CELLCB(idx);
    135142
    136         /*
    137          *  UARTをディスエーブル
    138          */
    139         sil_wrw_mem(UART_CR(ATTR_baseAddress), 0U);
     143        if (VAR_opened) {
     144                /*
     145                 *  UARTをディスエーブル
     146                 */
     147                sil_wrw_mem(UART_CR(ATTR_baseAddress), 0U);
     148
     149                VAR_opened = false;
     150        }
    140151}
    141152
     
    232243        }
    233244}
     245
     246/*
     247 *  SIOドライバの終了処理
     248 */
     249void
     250eTerminate_main(CELLIDX idx)
     251{
     252        eSIOPort_close(idx);
     253}
Note: See TracChangeset for help on using the changeset viewer.