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

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

initial

File size: 10.3 KB
Line 
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-2007 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.7 2007/03/23 07:58:33 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#include <h8_sil.h>
73
74#ifndef _MACRO_ONLY
75
76/*
77 * シリアルポートの初期化ブロック
78 */
79typedef struct sio_port_initialization_block {
80 UB *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#define INDEX_SIO(sioid) ((UINT)(sioid) - 1u)
104
105Inline SIOPCB*
106get_siopcb(ID sioid)
107{
108 UINT index = INDEX_SIO(sioid);
109
110 assert(index < TNUM_PORT);
111
112 return(&(siopcb_table[index]));
113}
114
115/*
116 * コールバックルーチンの識別番号
117 */
118#define SIO_ERDY_SND 1u /* 送信可能コールバック */
119#define SIO_ERDY_RCV 2u /* 受信通知コールバック */
120
121/*
122 * SCI 関数の参ç…
123§
124 */
125extern void SCI_initialize (ID sioid); /* SCI の初期化 */
126extern void SCI_cls_por(UB *base); /* SCI のクローズ */
127extern void SCI_in_handler(ID sioid); /* SCI å…
128¥åŠ›å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ© */
129extern void SCI_out_handler(ID sioid); /* SCI 出力割り込みハンドラ */
130extern void SCI_err_handler(ID sioid); /* SCI å…
131¥åŠ›ã‚¨ãƒ©ãƒ¼å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ© */
132extern void SCI_ierdy_snd(VP_INT exinf); /* シリアル I/O からの送信可能コールバック */
133extern void SCI_ierdy_rcv(VP_INT exinf); /* シリアル I/O からの受信通知コールバック */
134
135/*
136 * SCI レベルの関数
137 */
138
139/*
140 * SCI のオープン
141 */
142Inline SIOPCB *
143SCI_opn_por (ID sioid)
144{
145 SCI_initialize(sioid);
146 return get_siopcb(sioid);
147}
148
149/*
150 * SCI_putchar -- 送信する文字の書き込み
151 */
152Inline void
153SCI_putchar(const SIOPCB *p, UB c)
154{
155 UB *base_addr = p->inib->base;
156
157 sil_wrb_mem((VP)(base_addr + H8TDR), (VB)c);
158 bitclr(base_addr + H8SSR, (UB)H8SSR_TDRE_BIT);
159}
160
161
162/*
163 * 低レベル出力に用いるシリアルポートを
164 * 制御するレジスタ群のå…
165ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
166 */
167#if SCI_LOW_PORTID == SCI_PORTID1
168#define SCI_LOW_BASE SCI_PORT1_BASE
169#else /* SCI_LOW_PORTID == SCI_PORTID1 */
170#define SCI_LOW_BASE SCI_PORT2_BASE
171#endif
172
173/*
174 * SCI_putchar_pol -- ポーリング方式による低レベル出力
175 */
176Inline void
177SCI_putchar_pol(UB c)
178{
179 UB *base = (UB*)SCI_LOW_BASE;
180 UB *addr = base + H8SSR;
181 UB tdre = 0;
182
183 /* TDREがセットされるまで待
184つ */
185 while (tdre == 0) {
186 /* コンパイラの警告を抑制するため、キャストしている */
187 tdre = (UB)((UB)sil_reb_mem((VP)addr) & H8SSR_TDRE);
188 }
189 sil_wrb_mem((VP)(base + H8TDR), (VB)c);
190 bitclr(addr, (UB)H8SSR_TDRE_BIT);
191}
192
193/*
194 * SCI_getchar -- 受信した文字の読み出し
195 */
196Inline INT
197SCI_getchar(const SIOPCB *p)
198{
199 UB *base_addr = p->inib->base;
200 INT ch = (UB)sil_reb_mem((VP)(base_addr + H8RDR));
201 /* UB のキャストは、符号拡張を防止するため */
202
203 bitclr(base_addr + H8SSR, (UB)H8SSR_RDRF_BIT);
204 return ch;
205}
206
207/*
208 * SCI_putready -- 送信可能か
209 */
210Inline BOOL
211SCI_putready(const SIOPCB *pcb)
212{
213 BOOL ret = TRUE;
214 UB ssr = sil_reb_mem((VP)(pcb->inib->base + H8SSR));
215
216 ssr &= (UB)H8SSR_TDRE;
217 if (ssr == 0) {
218 ret = FALSE;
219 }
220 return(ret);
221}
222
223/*
224 * SCI_getready -- 受信可能か
225 */
226Inline BOOL
227SCI_getready(const SIOPCB *pcb)
228{
229 BOOL ret = TRUE;
230 UB ssr = sil_reb_mem((VP)(pcb->inib->base + H8SSR));
231
232 ssr &= (UB)H8SSR_RDRF;
233 if (ssr == 0) {
234 ret = FALSE;
235 }
236 return(ret);
237}
238
239/*
240 * 送信割り込み制御関数
241 */
242Inline void
243SCI_enable_send(const SIOPCB *p)
244{
245 UB *addr = p->inib->base + H8SCR;
246 bitset(addr, (UB)H8SCR_TIE_BIT);
247}
248
249Inline void
250SCI_disable_send(const SIOPCB *p)
251{
252 UB *addr = p->inib->base + H8SCR;
253 bitclr(addr, (UB)H8SCR_TIE_BIT);
254}
255
256/*
257 * 受信割り込み制御関数
258 */
259Inline void
260SCI_enable_recv(const SIOPCB *p)
261{
262 UB *addr = p->inib->base + H8SCR;
263 bitset(addr, (UB)H8SCR_RIE_BIT);
264}
265
266Inline void
267SCI_disable_recv(const SIOPCB *p)
268{
269 UB *addr = p->inib->base + H8SCR;
270 bitclr(addr, (UB)H8SCR_RIE_BIT);
271}
272
273/*
274 * SIO 関数の参ç…
275§
276 */
277 /* SCI の初期化 */
278extern void sio_initialize(void);
279 /* シリアル I/O からのコールバック許可 */
280extern void sio_ena_cbr(SIOPCB *pcb, UINT cbrtn);
281 /* シリアル I/O からのコールバック禁止 */
282extern void sio_dis_cbr(SIOPCB *pcb, UINT cbrtn);
283
284/*
285 * 関数シミュレーションマクロ
286 */
287 /* シリアル I/O からの送信可能コールバック */
288#define sio_ierdy_snd(e) SCI_ierdy_snd(e)
289 /* シリアル I/O からの受信通知コールバック */
290#define sio_ierdy_rcv(e) SCI_ierdy_rcv(e)
291
292/*
293 * SIO レベルの関数
294 */
295
296extern void sio_in_handler (void);
297extern void sio_out_handler (void);
298
299#ifdef H8_CFG_SCI_ERR_HANDLER
300extern void sio_err_handler (void);
301#endif /* of #ifdef H8_CFG_SCI_ERR_HANDLER */
302
303#if TNUM_PORT >= 2u
304extern void sio_in2_handler (void);
305extern void sio_out2_handler (void);
306
307#ifdef H8_CFG_SCI_ERR_HANDLER
308extern void sio_err2_handler (void);
309#endif /* of #ifdef H8_CFG_SCI_ERR_HANDLER */
310
311#endif /* of #if TNUM_PORT >= 2u */
312
313/*
314 * sio_opn_por -- ポートのオープン
315 */
316Inline SIOPCB *
317sio_opn_por(ID sioid, VP_INT exinf)
318{
319 SIOPCB *pcb = SCI_opn_por(sioid);
320
321 pcb->exinf = exinf;
322 pcb->openflag = TRUE;
323 return pcb;
324}
325
326/*
327 * sio_cls_por -- ポートのクローズ
328 */
329Inline void
330sio_cls_por(SIOPCB *pcb)
331{
332 SCI_cls_por(pcb->inib->base);
333 pcb->openflag = FALSE;
334}
335
336/*
337 * sio_snd_chr -- 文字送信
338 */
339Inline BOOL
340sio_snd_chr(const SIOPCB *pcb, char chr)
341{
342 BOOL ret = FALSE;
343 if (SCI_putready(pcb) == TRUE) {
344 SCI_putchar(pcb, (UB)chr);
345 ret = TRUE;
346 }
347 return ret;
348}
349
350/*
351 * sio_rcv_chr -- 文字受信
352 */
353Inline INT
354sio_rcv_chr(const SIOPCB *pcb)
355{
356 INT ret = 0;
357 if (SCI_getready(pcb) == TRUE) {
358 ret = SCI_getchar(pcb);
359 } else {
360 ret = -1;
361 }
362 return(ret);
363}
364
365#endif /* of #ifndef _MACRO_ONLY */
366
367#endif /* _HW_SERIAL_H_ */
Note: See TracBrowser for help on using the repository browser.