source: azure_iot_hub/trunk/asp3_dcre/mbed/tMbedSerial.c@ 389

Last change on this file since 389 was 389, checked in by coas-nagasima, 5 years ago

ビルドが通るよう更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 5.5 KB
Line 
1/*
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
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 *
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 * 免責すること.
31 *
32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
36 * の責任を負わない.
37 *
38 * $Id$
39 */
40
41/*
42 * FIFO内蔵シリアルコミュニケーションインタフェース用 簡易SIOドライバ
43 */
44
45#include <sil.h>
46#include "tMbedSerial_tecsgen.h"
47#include "serial_api.h"
48
49static void mbed_serial_irq_handler(uint32_t id, SerialIrq event);
50
51/*
52 * シリアルI/Oポートのオープン
53 */
54void
55eSIOPort_open(CELLIDX idx)
56{
57 CELLCB *p_cellcb = GET_CELLCB(idx);
58 serial_t *obj = &p_cellcb->serial;
59 uint_t brr;
60
61 if (VAR_initialized) {
62 /*
63 * 既に初期化している場合は、二重に初期化しない.
64 */
65 return;
66 }
67
68 serial_init(obj, ATTR_tx, ATTR_rx);
69 serial_baud(obj, ATTR_baudRate);
70 serial_format(obj, 8, ParityNone, 1);
71
72 serial_irq_handler(obj, mbed_serial_irq_handler, idx);
73
74 VAR_initialized = true;
75}
76
77/*
78 * シリアルI/Oポートのクローズ
79 */
80void
81eSIOPort_close(CELLIDX idx)
82{
83 CELLCB *p_cellcb = GET_CELLCB(idx);
84 serial_t *obj = &p_cellcb->serial;
85
86 serial_free(obj);
87}
88
89/*
90 * シリアルI/Oポートへの文字送信
91 */
92bool_t
93eSIOPort_putChar(CELLIDX idx, char c)
94{
95 CELLCB *p_cellcb = GET_CELLCB(idx);
96 serial_t *obj = &p_cellcb->serial;
97
98 if (serial_writable(obj)){
99 serial_putc(obj, c);
100 return(true);
101 }
102 return(false);
103}
104
105/*
106 * シリアルI/Oポートからの文字受信
107 */
108int_t
109eSIOPort_getChar(CELLIDX idx)
110{
111 CELLCB *p_cellcb = GET_CELLCB(idx);
112 serial_t *obj = &p_cellcb->serial;
113 char c;
114
115 if (serial_readable(obj)) {
116 return serial_getc(obj);
117 }
118 return(-1);
119}
120
121/*
122 * シリアルI/Oポートからのコールバックの許可
123 */
124void
125eSIOPort_enableCBR(CELLIDX idx, uint_t cbrtn)
126{
127 CELLCB *p_cellcb = GET_CELLCB(idx);
128 serial_t *obj = &p_cellcb->serial;
129
130 switch (cbrtn) {
131 case SIOSendReady:
132 serial_irq_set(obj, TxIrq, true);
133 break;
134 case SIOReceiveReady:
135 serial_irq_set(obj, RxIrq, true);
136 break;
137 }
138}
139
140/*
141 * シリアルI/Oポートからのコールバックの禁止
142 */
143void
144eSIOPort_disableCBR(CELLIDX idx, uint_t cbrtn)
145{
146 CELLCB *p_cellcb = GET_CELLCB(idx);
147 serial_t *obj = &p_cellcb->serial;
148
149 switch (cbrtn) {
150 case SIOSendReady:
151 serial_irq_set(obj, TxIrq, false);
152 break;
153 case SIOReceiveReady:
154 serial_irq_set(obj, RxIrq, false);
155 break;
156 }
157}
158
159/*
160 * シリアルI/Oポートに対する受信割込み処理
161 */
162void
163eiRxISR_main(CELLIDX idx)
164{
165 CELLCB *p_cellcb = GET_CELLCB(idx);
166 serial_t *obj = &p_cellcb->serial;
167
168 if (serial_readable(obj)) {
169 /*
170 * 受信通知コールバックルーチンを呼び出す.
171 */
172 ciSIOCBR_readyReceive();
173 }
174}
175
176/*
177 * シリアルI/Oポートに対する送信割込み処理
178 */
179void
180eiTxISR_main(CELLIDX idx)
181{
182 CELLCB *p_cellcb = GET_CELLCB(idx);
183 serial_t *obj = &p_cellcb->serial;
184
185 if (serial_writable(obj)) {
186 /*
187 * 送信可能コールバックルーチンを呼び出す.
188 */
189 ciSIOCBR_readySend();
190 }
191}
192
193void
194mbed_serial_irq_handler(uint32_t id, SerialIrq event)
195{
196 switch (event) {
197 case TxIrq:
198 eiTxISR_main(id);
199 break;
200 case RxIrq:
201 eiRxISR_main(id);
202 break;
203 }
204}
Note: See TracBrowser for help on using the repository browser.