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

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

initial

File size: 9.2 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-2002 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 *
9 * Copyright (C) 2005 by Freelines CO.,Ltd
10 *
11 * 上記著作権者
12は,以下の (1)〜(4) の条件か,Free Software Foundation
13 * によってå…
14¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
15 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
16 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
17å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
18 * 利用と呼ぶ)することを無償で許諾する.
19 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
20 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
21 * スコード中に含まれていること.
22 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
23 * 用できる形で再é…
24å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
25å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
26 * 者
27マニュアルなど)に,上記の著作権表示,この利用条件および下記
28 * の無保証規定を掲載すること.
29 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30 * 用できない形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
32 * と.
33 * (a) 再é…
34å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
35マニュアルなど)に,上記の著
36 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
37 * (b) 再é…
38å¸ƒã®å½¢æ…
39‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
40 * 報告すること.
41 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
42 * 害からも,上記著作権者
43およびTOPPERSプロジェクトをå…
44è²¬ã™ã‚‹ã“と.
45 *
46 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
47お
48 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
49 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
50 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
51 *
52 * @(#) $Id: hw_serial.h,v 1.5 2007/05/21 01:28:28 honda Exp $
53 */
54
55/*
56 * ターゲット依存シリアルI/Oモジュール(V850/KJ1+ 内
57蔵非同期シリアルch0/ch1用)
58 * ボーレート設定はSERIAL_COMPAREVALUEを変更する。
59 * データフォーマットは8bit data, non-parity, 1stop-bit固定
60 */
61
62#ifndef _HW_SERIAL_H_
63#define _HW_SERIAL_H_
64
65#include <s_services.h>
66
67/*
68 * シリアルポートの初期化ブロック
69 */
70
71typedef struct sio_port_initialization_block {
72} SIOPINIB;
73
74/*
75 * シリアルポートの制御ブロック
76 */
77typedef struct sio_port_control_block {
78 const SIOPINIB *inib; /* 初期化ブロック */
79 VP_INT exinf; /* 拡張情
80å ± */
81 BOOL openflag; /* オープン済みフラグ */
82 int port_id; /* ポート番号(0〜) */
83} SIOPCB;
84
85extern SIOPCB siopcb_table[TNUM_PORT];
86
87/*
88 * SIO ID から管理ブロックへの変換マクロ
89 */
90
91#define INDEX_SIO(sioid) ((UINT)((sioid) - 1))
92#define get_siopcb(sioid) (&(siopcb_table[INDEX_SIO(sioid)]))
93
94/*
95 * コールバックルーチンの識別番号
96 */
97
98#define SIO_ERDY_SND 1u /* 送信可能コールバック */
99#define SIO_ERDY_RCV 2u /* 受信通知コールバック */
100
101/*
102 * シリアルポートのハードウェア依存情
103報の定義
104 */
105
106#define SERIAL_PORT (CONSOLE_PORTID-1) /* システムのポート番号 */
107#define SERIAL_INT_PRIORITY 1 /* 割り込み優å…
108ˆåº¦ */
109#define SERIAL_CLKDIV 3 /* clk = fxx/8 */
110#define SERIAL_COMPAREVALUE 11 /* 9600bps=130, 19200bps=65, 38400bps=33, 57600bps=22, 115200bps=11 */
111
112/* シリアル関連レジスタ */
113#define ASIM(x) (ASIM0 + ((x) * 0x10))
114#define ASIS(x) (ASIS0 + ((x) * 0x10))
115#define ASIF(x) (ASIF0 + ((x) * 0x10))
116#define RXB(x) (RXB0 + ((x) * 0x10))
117#define TXB(x) (TXB0 + ((x) * 0x10))
118#define CKSR(x) (CKSR0 + ((x) * 0x10))
119#define BRGC(x) (BRGC0 + ((x) * 0x10))
120#define SRIC(x) (SRIC0 + ((x) * 8))
121#define STIC(x) (STIC0 + ((x) * 8))
122
123/*
124 * シリアルI/Oの割込みハンドラのベクタ番号
125 */
126#define INHNO_SERIAL_IN (0x19 + (SERIAL_PORT * 3))
127#define INHNO_SERIAL_OUT (0x1a + (SERIAL_PORT * 3))
128
129/*
130 * 低レベルポート情
131報管理ブロックの初期値
132 */
133
134#define NUM_PORT 1 /* サポートするシリアルポートの数 */
135
136#define FLG_RECEIVED 1
137#define FLG_TXRBUSY 2
138
139extern unsigned int _serial_flag[TNUM_PORT];
140
141/*
142 * シリアルI/Oポートの初期化
143 */
144Inline BOOL
145hw_port_initialize(int port_id)
146{
147 if( (sil_reb_mem((VP)ASIM(port_id)) & 0x80) == 0 )
148 {
149 /* 非同期シリアル通信路の初期化 */
150
151 /* ポートを開ける */
152 if (port_id == 0) {
153 sil_wrh_mem((VP)PMC3, sil_reh_mem((VP)PMC3) | 0x0003);
154 } else {
155 sil_wrh_mem((VP)PFC8, 0);
156 sil_wrh_mem((VP)PMC8, 3);
157 }
158 /* ボーレート発生器の初期化 */
159 sil_wrb_mem((VP)CKSR(port_id), SERIAL_CLKDIV);
160 sil_wrb_mem((VP)BRGC(port_id), SERIAL_COMPAREVALUE);
161 sil_wrb_mem((VP)ASIM(port_id), sil_reb_mem((VP)ASIM(port_id)) | 0x80); /* enable ASIO */
162
163 __asm("nop; nop");
164
165 sil_wrb_mem((VP)ASIM(port_id), sil_reb_mem((VP)ASIM(port_id)) | 0x04); /* 8bit length */
166
167 __asm("nop; nop");
168
169 sil_wrb_mem((VP)ASIM(port_id), sil_reb_mem((VP)ASIM(port_id)) | 0x60); /* Tx, Rx enable */
170
171 /* 割込み制御 */
172 sil_wrb_mem((VP)SRIC(port_id), SERIAL_INT_PRIORITY);
173 sil_wrb_mem((VP)STIC(port_id), SERIAL_INT_PRIORITY);
174 }
175 return(FALSE);
176}
177
178/*
179 * シリアルI/Oポートの終了
180 */
181Inline void
182hw_port_terminate(int port_id)
183{
184}
185
186/*
187 * シリアルポート割込みサービスルーチン(前方参ç…
188§ï¼‰
189 */
190extern void serial_handler_in(int portid);
191extern void serial_handler_out(int portid);
192
193/*
194 * 文字を受信したか?
195 */
196Inline BOOL
197hw_port_getready(int port_id)
198{
199 return (_serial_flag[port_id] & FLG_RECEIVED) != 0 ? TRUE : FALSE;
200}
201
202/*
203 * 文字を送信できるか?
204 */
205Inline BOOL
206hw_port_putready(int port_id)
207{
208 return (sil_reb_mem((VP)ASIF(port_id)) & FLG_TXRBUSY) != 0 ? FALSE : TRUE;
209}
210
211/*
212 * 受信した文字の取り出し
213 */
214Inline unsigned char
215hw_port_getchar(int port_id)
216{
217 _serial_flag[port_id] &= ~FLG_RECEIVED;
218 sil_wrb_mem((VP)SRIC(port_id), sil_reb_mem((VP)SRIC(port_id)) & 0x7f);
219 return sil_reb_mem((VP)RXB(port_id));
220}
221
222/*
223 * 送信する文字の書き込み
224 */
225Inline void
226hw_port_putchar(int port_id, unsigned char c)
227{
228 sil_wrb_mem((VP)TXB(port_id), c);
229 _serial_flag[port_id] |= FLG_TXRBUSY;
230}
231
232/*
233 * 送信する文字の書き込み(送信可能になるまで待
234つ)
235 */
236Inline void
237hw_port_wait_putchar(int port_id, unsigned char c)
238{
239 while( !hw_port_putready(port_id) ) ;
240 hw_port_putchar(port_id, c);
241}
242
243/*
244 * 送信制御関数
245 */
246Inline void
247hw_port_sendstart(int port_id)
248{
249}
250
251Inline void
252hw_port_sendstop(int port_id)
253{
254}
255
256extern void sio_ierdy_rcv(VP_INT exinf);
257extern void sio_ierdy_snd(VP_INT exinf);
258
259Inline void
260hw_port_handler_in(int port_id)
261{
262 _serial_flag[port_id] |= FLG_RECEIVED;
263 sio_ierdy_rcv(siopcb_table[port_id].exinf);
264}
265
266Inline void
267hw_port_handler_out(int port_id)
268{
269 _serial_flag[port_id] &= ~FLG_TXRBUSY;
270 sio_ierdy_snd(siopcb_table[port_id].exinf);
271}
272
273/***********************************************************************************/
274
275/*
276 * sio_initialize -- シリアルポートドライバの初期化
277 */
278Inline void
279sio_initialize (void)
280{
281 int ix;
282
283 /* SIO 管理ブロックの初期化 */
284 for (ix = TNUM_PORT; ix -- > 0; ) {
285 siopcb_table[ix].openflag = FALSE;
286 }
287}
288
289/*
290 * sio_opn_por -- ポートのオープン
291 */
292Inline SIOPCB *
293sio_opn_por(ID sioid, VP_INT exinf)
294{
295 SIOPCB *pcb;
296
297 pcb = get_siopcb(sioid);
298 pcb->inib = NULL;
299 pcb->exinf = exinf;
300 pcb->openflag = TRUE;
301 pcb->port_id = sioid-1;
302 hw_port_initialize(pcb->port_id);
303 return pcb;
304}
305
306/*
307 * sio_snd_chr -- 文字送信
308 */
309Inline BOOL
310sio_snd_chr(SIOPCB *pcb, INT chr)
311{
312 if (hw_port_putready(pcb->port_id)) {
313 hw_port_putchar(pcb->port_id, (UB)chr);
314 return TRUE;
315 }
316 else
317 return FALSE;
318}
319
320/*
321 * sio_rcv_chr -- 文字受信
322 */
323Inline INT
324sio_rcv_chr(SIOPCB *pcb)
325{
326 if (hw_port_getready(pcb->port_id))
327 return hw_port_getchar(pcb->port_id);
328 else
329 return -1;
330}
331
332/*
333 * sio_ena_cbr -- シリアル I/O からのコールバックの許可
334 */
335Inline void
336sio_ena_cbr(SIOPCB *pcb, UINT cbrtn)
337{
338}
339
340/*
341 * sio_dis_cbr -- シリアル I/O からのコールバックの禁止
342 */
343Inline void
344sio_dis_cbr(SIOPCB *pcb, UINT cbrtn)
345{
346}
347
348/*
349 * sio_cls_por -- ポートのクローズ
350 */
351Inline void
352sio_cls_por(SIOPCB *pcb)
353{
354 sio_dis_cbr(pcb, SIO_ERDY_SND);
355 sio_dis_cbr(pcb, SIO_ERDY_RCV);
356 pcb->openflag = FALSE;
357}
358
359Inline void
360sio_in_handler(void)
361{
362 hw_port_handler_in(0);
363}
364
365Inline void
366sio_out_handler(void)
367{
368 hw_port_handler_out(0);
369}
370
371#if TNUM_PORT > 1
372Inline void
373sio_in_handler2(void)
374{
375 hw_port_handler_in(1);
376}
377
378Inline void
379sio_out_handler2(void)
380{
381 hw_port_handler_out(1);
382}
383#endif
384
385#endif /* _HW_SERIAL_H_ */
Note: See TracBrowser for help on using the repository browser.