source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/h8/hw_serial.h@ 26

Last change on this file since 26 was 26, checked in by ykominami, 12 years ago

initial

File size: 8.8 KB
RevLine 
[26]1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2001-2010 by Industrial Technology Institute,
9 * Miyagi Prefectural Government, JAPAN
10 * Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering
11 * Tomakomai National College of Technology, JAPAN
12 *
13 * 上記著作権者
14は,以下の (1)〜(4) の条件か,Free Software Foundation
15 * によってå…
16¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
17 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
18 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
19å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
20 * 利用と呼ぶ)することを無償で許諾する.
21 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
22 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
23 * スコード中に含まれていること.
24 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
25 * 用できる形で再é…
26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
27å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
28 * 者
29マニュアルなど)に,上記の著作権表示,この利用条件および下記
30 * の無保証規定を掲載すること.
31 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
32 * 用できない形で再é…
33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
34 * と.
35 * (a) 再é…
36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
37マニュアルなど)に,上記の著
38 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
39 * (b) 再é…
40å¸ƒã®å½¢æ…
41‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
42 * 報告すること.
43 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
44 * 害からも,上記著作権者
45およびTOPPERSプロジェクトをå…
46è²¬ã™ã‚‹ã“と.
47 *
48 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
51 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
52 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
53 *
54 * @(#) $Id: hw_serial.h,v 1.17 2007/03/23 07:22:15 honda Exp $
55 */
56
57#ifndef _HW_SERIAL_H_
58#define _HW_SERIAL_H_
59
60/*
61 * ターゲット依存シリアルI/Oモジュール(H8用)
62 * ・ポートが 1本の場合は HWPORT1_ADDRに指定されたポートを使用し、
63 * 2本の場合は、HWPORT1_ADDRをユーザ用、HWPORT2_ADDRをコンソール
64 * 出力として使用する。
65 * HWPORTx_ADDRは ターゲット依存の sys_config.h中で指定する。
66 * ・å…
67±é€šéƒ¨ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ã€XON/XOFFフロー制御が行わ
68 * れているので、信号線はTxDとRxDの2本でよい
69 */
70
71#include <s_services.h>
72
73#ifndef _MACRO_ONLY
74
75/*
76 * シリアルポートの初期化ブロック
77 */
78
79typedef struct sio_port_initialization_block {
80 UW base; /* SCI のベースアドレス */
81 UW baudrate; /* ボーレート */
82 IRC irc; /* 割込みレベル設定情
83å ± */
84 UB smr_init; /* SMR の設定値 */
85} SIOPINIB;
86
87/*
88 * シリアルポートの制御ブロック
89 */
90
91typedef struct sio_port_control_block {
92 const SIOPINIB *inib; /* 初期化ブロック */
93 VP_INT exinf; /* 拡張情
94å ± */
95 BOOL openflag; /* オープン済みフラグ */
96} SIOPCB;
97
98extern SIOPCB siopcb_table[TNUM_PORT];
99
100/*
101 * SIO ID から管理ブロックへの変換マクロ
102 */
103
104#define INDEX_SIO(sioid) ((UINT)((sioid) - 1))
105#define get_siopcb(sioid) (&(siopcb_table[INDEX_SIO(sioid)]))
106
107/*
108 * コールバックルーチンの識別番号
109 */
110
111#define SIO_ERDY_SND 1u /* 送信可能コールバック */
112#define SIO_ERDY_RCV 2u /* 受信通知コールバック */
113
114/*
115 * SCI 関数の参ç…
116§
117 */
118
119extern void SCI_initialize (ID sioid); /* SCI の初期化 */
120extern void SCI_cls_por(UW base); /* SCI のクローズ */
121extern void SCI_in_handler(ID sioid); /* SCI å…
122¥åŠ›å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ© */
123extern void SCI_out_handler(ID sioid); /* SCI 出力割り込みハンドラ */
124extern void SCI_err_handler(ID sioid); /* SCI å…
125¥åŠ›ã‚¨ãƒ©ãƒ¼å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ© */
126extern void SCI_ierdy_snd(VP_INT exinf); /* シリアル I/O からの送信可能コールバック */
127extern void SCI_ierdy_rcv(VP_INT exinf); /* シリアル I/O からの受信通知コールバック */
128
129/*
130 * SCI レベルの関数
131 */
132
133/*
134 * SCI のオープン
135 */
136
137Inline SIOPCB *
138SCI_opn_por (ID sioid)
139{
140 SCI_initialize(sioid);
141 return get_siopcb(sioid);
142}
143
144/*
145 * SCI_putchar -- 送信する文字の書き込み
146 */
147
148Inline void
149SCI_putchar(SIOPCB *p, UB c)
150{
151 UW addr = p->inib->base + H8SSR;
152
153 sil_wrb_mem((VP)(p->inib->base + H8TDR), c);
154 bitclr((UB *)addr, H8SSR_TDRE_BIT);
155}
156
157/*
158 * SCI_wait_putchar -- 直接出力 (待
159ちあり)
160 */
161
162Inline void
163SCI_wait_putchar (int base, char c)
164{
165 UW addr = base + H8SSR;
166
167 /* TDRE が 1 になるまで待
168つ */
169 while ((sil_reb_mem((VP)addr) & H8SSR_TDRE) == 0)
170 ;
171 sil_wrb_mem((VP)(base + H8TDR), c);
172 bitclr((UB *)addr, H8SSR_TDRE_BIT);
173}
174
175/*
176 * SCI_getchar -- 受信した文字の読み出し
177 */
178
179Inline INT
180SCI_getchar(SIOPCB *p)
181{
182 INT ch;
183 UW addr = p->inib->base + H8SSR;
184
185 ch = (INT)(UB)sil_reb_mem((VP)(p->inib->base + H8RDR));
186 /* UB型へのキャストは、符号拡張を防ぐため */
187
188 bitclr((UB *)addr, H8SSR_RDRF_BIT);
189 return ch;
190}
191
192/*
193 * SCI_putready -- 送信可能か
194 */
195
196Inline BOOL
197SCI_putready(SIOPCB *pcb)
198{
199 UB ssr = sil_reb_mem((VP)(pcb->inib->base + H8SSR));
200 return ((ssr & H8SSR_TDRE) != 0);
201}
202
203/*
204 * SCI_getready -- 受信可能か
205 */
206
207Inline BOOL
208SCI_getready(SIOPCB *pcb)
209{
210#ifndef HEW_SIMULATOR
211 UB ssr = sil_reb_mem((VP)(pcb->inib->base + H8SSR));
212 return ((ssr & H8SSR_RDRF) != 0);
213#else /* HEW_SIMULATOR */
214 return TRUE;
215#endif /* HEW_SIMULATOR */
216}
217
218/*
219 * 送信割り込み制御関数
220 */
221
222Inline void
223SCI_enable_send(SIOPCB *p)
224{
225 UW addr = p->inib->base + H8SCR;
226
227 bitset((UB *)addr, H8SCR_TIE_BIT);
228}
229
230Inline void
231SCI_disable_send(SIOPCB *p)
232{
233 UW addr = p->inib->base + H8SCR;
234
235 bitclr((UB *)addr, H8SCR_TIE_BIT);
236}
237
238/*
239 * 受信割り込み制御関数
240 */
241
242Inline void
243SCI_enable_recv(SIOPCB *p)
244{
245 UW addr = p->inib->base + H8SCR;
246
247 bitset((UB *)addr, H8SCR_RIE_BIT);
248}
249
250Inline void
251SCI_disable_recv(SIOPCB *p)
252{
253 UW addr = p->inib->base + H8SCR;
254
255 bitclr((UB *)addr, H8SCR_RIE_BIT);
256}
257
258/*
259 * SIO 関数の参ç…
260§
261 */
262
263extern void sio_initialize(void); /* SCI の初期化 */
264extern void sio_ena_cbr(SIOPCB *pcb, UINT cbrtn); /* シリアル I/O からのコールバック許可 */
265extern void sio_dis_cbr(SIOPCB *pcb, UINT cbrtn); /* シリアル I/O からのコールバック禁止 */
266
267/*
268 * 関数シミュレーションマクロ
269 */
270 /* SCI からの文字受信 */
271#ifdef HEW_SIMULATOR
272extern BOOL hew_io_sim_snd_chr(char c);
273#define sio_snd_chr(siopcb, c) hew_io_sim_snd_chr(c)
274
275#else /* HEW_SIMULATOR */
276#define sio_snd_chr(p,c) SCI_snd_chr(p,c)
277#endif /* HEW_SIMULATOR */
278 /* SCI からの文字受信 */
279#ifdef HEW_SIMULATOR
280extern INT hew_io_sim_rcv_chr(void);
281#define sio_rcv_chr(siopcb) hew_io_sim_rcv_chr( )
282
283#else /* HEW_SIMULATOR */
284#define sio_rcv_chr(p) SCI_rcv_chr(p)
285#endif /* HEW_SIMULATOR */
286
287#define sio_ierdy_snd(e) SCI_ierdy_snd(e) /* シリアル I/O からの送信可能コールバック */
288#define sio_ierdy_rcv(e) SCI_ierdy_rcv(e) /* シリアル I/O からの受信通知コールバック */
289
290/*
291 * SIO レベルの関数
292 */
293
294/*
295 * sio_opn_por -- ポートのオープン
296 */
297
298Inline SIOPCB *
299sio_opn_por(ID sioid, VP_INT exinf)
300{
301 SIOPCB *pcb;
302
303 pcb = SCI_opn_por(sioid);
304 pcb->exinf = exinf;
305 pcb->openflag = TRUE;
306 return pcb;
307}
308
309/*
310 * sio_cls_por -- ポートのクローズ
311 */
312
313Inline void
314sio_cls_por(SIOPCB *pcb)
315{
316 SCI_cls_por(pcb->inib->base);
317 pcb->openflag = FALSE;
318}
319
320/*
321 * sio_snd_chr -- 文字送信
322 */
323
324#ifndef HEW_SIMULATOR
325Inline BOOL
326sio_snd_chr(SIOPCB *pcb, INT chr)
327{
328 if (SCI_putready(pcb)) {
329 SCI_putchar(pcb, (UB)chr);
330 return TRUE;
331 } else {
332 return FALSE;
333 }
334}
335#endif /* HEW_SIMULATOR */
336
337/*
338 * sio_rcv_chr -- 文字受信
339 */
340
341#ifndef HEW_SIMULATOR
342Inline INT
343sio_rcv_chr(SIOPCB *pcb)
344{
345 if (SCI_getready(pcb)) {
346 return SCI_getchar(pcb);
347 } else {
348 return -1;
349 }
350}
351#endif /* HEW_SIMULATOR */
352
353#endif /* of #ifndef _MACRO_ONLY */
354
355#endif /* _HW_SERIAL_H_ */
Note: See TracBrowser for help on using the repository browser.