source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/sh1/sh1sci.c@ 26

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

initial

File size: 18.9 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-2004 by Industrial Technology Institute,
9 * Miyagi Prefectural Government, JAPAN
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: sh1sci.c,v 1.12 2005/11/14 08:00:44 honda Exp $
53 */
54
55/*
56 * SH1内
57蔵シリアルコミュニケーションインタフェースSCI用 簡易ドライバ
58 *    
59 *    SCI0のみのサポートだが、2chへの拡張性は残している。
60 *
61 *    sh1sci.{c,h}とhw_serial.hの分割の基準
62 *      ・sh1sci.{c,h}:シリアルデバイスに依存する部分のみ記述
63 *      ・hw_serial.h:割込みコントローラ依存
64 *      
65 *      ・クロック周波数依存について
66 *        ・デバイス依存のパラメータはsh1sci.c内
67で用意する。
68 *        ・大å…
69ƒã®ã‚¯ãƒ­ãƒƒã‚¯å‘¨æ³¢æ•°ã¯ã‚³ãƒ³ãƒ‘イルオプションとして与える
70 */
71
72#include <s_services.h>
73#include <sh1sci.h>
74
75/*
76 * コントロールレジスタのアドレス (すべて1バイトサイズ)
77 */
78 /* チャネル0 */
79#define SCI_SMR0 (VB *)0x5fffec0 /* シリアルモードレジスタ */
80#define SCI_BRR0 (VB *)0x5fffec1 /* ビットレートレジスタ */
81#define SCI_SCR0 (VB *)0x5fffec2 /* シリアルコントロールレジスタ */
82#define SCI_TDR0 (VB *)0x5fffec3 /* トランスミットデータレジスタ */
83#define SCI_SSR0 (VB *)0x5fffec4 /* シリアルステータスレジスタ */
84#define SCI_RDR0 (VB *)0x5fffec5 /* レシーブデータレジスタ */
85
86 /* チャネル1 */
87#define SCI_SMR1 (VB *)0x5fffec8 /* シリアルモードレジスタ */
88#define SCI_BRR1 (VB *)0x5fffec9 /* ビットレートレジスタ */
89#define SCI_SCR1 (VB *)0x5fffeca /* シリアルコントロールレジスタ */
90#define SCI_TDR1 (VB *)0x5fffecb /* トランスミットデータレジスタ */
91#define SCI_SSR1 (VB *)0x5fffecc /* シリアルステータスレジスタ */
92#define SCI_RDR1 (VB *)0x5fffecd /* レシーブデータレジスタ */
93
94
95/*
96 * コントロールレジスタの設定値
97 */
98/* シリアルステータスレジスタSSRの各ビット */
99#define SSR_TDRE 0x80u /* トランスミットデータレジスタエンプティ */
100#define SSR_RDRF 0x40u /* レシーブデータレジスタフル */
101#define SSR_ORER 0x20u /* オーバーランエラー */
102#define SSR_FER 0x10u /* フレーミングエラー */
103#define SSR_PER 0x08u /* パリティエラー */
104#define SSR_TEND 0x04u /* トランスミットエンド */
105#define SSR_MPB 0x02u /* マルチプロセッサビット */
106#define SSR_MPBT 0x01u /* マルチプロセッサビットトランスファ */
107
108/* シリアルコントロールレジスタSCRの各ビット */
109#define SCR_TIE 0x80u /* トランスミットインタラプトイネーブル */
110#define SCR_RIE 0x40u /* レシーブインタラプトイネーブル */
111#define SCR_TE 0x20u /* トランスミットイネーブル */
112#define SCR_RE 0x10u /* レシーブイネーブル */
113#define SCR_MPIE 0x08u /* マルチプロセッサインタラプトイネーブル */
114 /* トランスミットエンドインタラプト */
115#define SCR_TEIE 0x04u /* イネーブル */
116#define SCR_CKE_MASK 0x03u /* クロックソース選択用マスク */
117#define SCR_CKE 0x00u /* クロックイネーブル */
118 /* 調歩同期式のとき */
119 /* 内
120部クロック使用 */
121 /* 出力なし */
122
123/* シリアルモードジスタSMRの各ビット */
124 /* コミュニケーションモード */
125#define SMR_CA_CLOCK 0x80u /* クロック同期式 */
126#define SMR_CA_ASYNC 0x00u /* 調歩同期式 */
127 /* 調歩同期式通信:Asynchronous Communication method */
128 /* キャラクタレングス */
129#define SMR_CHR8 0x00u /* 8ビット */
130#define SMR_CHR7 0x40u /* 7ビット */
131 /* パリティイネーブル */
132#define SMR_PE 0x20u /* パリティあり */
133#define SMR_PE_NON 0x00u /* パリティなし */
134#define SMR_OE_ODD 0x10u /* パリティモード(奇数パリティ)*/
135#define SMR_STOP2 0x08u /* ストップビットレングス:2 */
136#define SMR_STOP1 0x00u /* ストップビットレングス:1 */
137#define SMR_MP 0x04u /* マルチプロセッサモード */
138
139/*
140 * クロック周波数依存
141 * 京都マイクロコンピュータKZ-SH1-01のクロック周波数は20MHz
142 * CQ出版 RISC評価キット SH-1のクロック周波数は19.6608MHz
143 * 常盤商行SH1/CPUBのクロック周波数は16MHz
144 */
145
146/*
147 * 分周比とビットレートの設定
148 */
149#if CONFIG_BAUD == 9600
150/*
151 *
152 * クロック  20MHzの場合
153 * ビットレート 9600bps
154 *
155 *  n=0(分周しないのでそのまま)
156 *  N=64で誤差0.16%
157 * よって、
158 *  シリアルモードレジスタSMRのクロックセレクトビットCKS=00
159 *  ビットレートレジスタBRR=64
160 */
161#ifdef CONFIG_20MHZ
162#define SMR_CKS 0x0u /* 分周比 */
163#define SCI_BRR 64u /* ビットレート */
164#endif
165
166/*
167 * クロック  19.6608MHz
168 * ビットレート 9600bps
169 *
170 *  n=0(分周しないのでそのまま)
171 *  N=63で誤差0%
172 * よって、
173 *  シリアルモードレジスタSMRのクロックセレクトビットCKS=00
174 *  ビットレートレジスタBRR=63
175 */
176#ifdef CONFIG_19MHZ
177#define SMR_CKS 0x0u /* 分周比 */
178#define SCI_BRR 63u /* ビットレート */
179#endif
180
181/*
182 * クロック  16MHz
183 * ビットレート 9600bps
184 *
185 *  n=0(分周しないのでそのまま)
186 *  N=51で誤差0.16%
187 * よって、
188 *  シリアルモードレジスタSMRのクロックセレクトビットCKS=00
189 *  ビットレートレジスタBRR=51
190 */
191#ifdef CONFIG_16MHZ
192#define SMR_CKS 0x0u /* 分周比 */
193#define SCI_BRR 51u /* ビットレート */
194#endif
195
196/*
197 * ボーレート設定後、クロックが安定するまでの待
198ち時間
199 *  (最初の1ビット分) 
200 * BPS=9600bpsの場合
201 *  t = 1 / BPS = 104,167 = 105,000[nsec]
202 */
203#define SH1SCI_DELAY 105000
204
205
206#elif CONFIG_BAUD == 19200
207
208
209/*
210 *
211 * クロック  20MHzの場合
212 * ビットレート 19200bps
213 *
214 *  n=0(分周しないのでそのまま)
215 *  N=32で誤差 -1.36%
216 * よって、
217 *  シリアルモードレジスタSMRのクロックセレクトビットCKS=00
218 *  ビットレートレジスタBRR=32
219 */
220#ifdef CONFIG_20MHZ
221#define SMR_CKS 0x0u /* 分周比 */
222#define SCI_BRR 32u /* ビットレート */
223#endif
224
225/*
226 * クロック  19.6608MHz
227 * ビットレート 19200bps
228 *
229 *  n=0(分周しないのでそのまま)
230 *  N=31で誤差0%
231 * よって、
232 *  シリアルモードレジスタSMRのクロックセレクトビットCKS=00
233 *  ビットレートレジスタBRR=31
234 */
235#ifdef CONFIG_19MHZ
236#define SMR_CKS 0x0u /* 分周比 */
237#define SCI_BRR 31u /* ビットレート */
238#endif
239
240/*
241 * クロック  16MHz
242 * ビットレート 19200bps
243 *
244 *  n=0(分周しないのでそのまま)
245 *  N=25で誤差0.16%
246 * よって、
247 *  シリアルモードレジスタSMRのクロックセレクトビットCKS=00
248 *  ビットレートレジスタBRR=25
249 */
250#ifdef CONFIG_16MHZ
251#define SMR_CKS 0x0u /* 分周比 */
252#define SCI_BRR 25u /* ビットレート */
253#endif
254
255/*
256 * ボーレート設定後、クロックが安定するまでの待
257ち時間
258 *  (最初の1ビット分) 
259 * BPS=19200bpsの場合
260 *  t = 1 / BPS = 52,083 = 53,000[nsec]
261 */
262#define SH1SCI_DELAY 53000
263
264
265#elif CONFIG_BAUD == 38400
266
267
268/*
269 *
270 * クロック  20MHzの場合
271 * ビットレート 38400bps
272 *
273 *  n=0(分周しないのでそのまま)
274 *  N=15で誤差1.73%
275 * よって、
276 *  シリアルモードレジスタSMRのクロックセレクトビットCKS=00
277 *  ビットレートレジスタBRR=15
278 */
279#ifdef CONFIG_20MHZ
280#define SMR_CKS 0x0u /* 分周比 */
281#define SCI_BRR 15u /* ビットレート */
282#endif
283
284/*
285 * クロック  19.6608MHz
286 * ビットレート 38400bps
287 *
288 *  n=0(分周しないのでそのまま)
289 *  N=15で誤差0%
290 * よって、
291 *  シリアルモードレジスタSMRのクロックセレクトビットCKS=00
292 *  ビットレートレジスタBRR=15
293 */
294#ifdef CONFIG_19MHZ
295#define SMR_CKS 0x0u /* 分周比 */
296#define SCI_BRR 15u /* ビットレート */
297#endif
298
299/*
300 * クロック  16MHz
301 * ビットレート 38400bps
302 *
303 *  n=0(分周しないのでそのまま)
304 *  N=12で誤差0.16%
305 * よって、
306 *  シリアルモードレジスタSMRのクロックセレクトビットCKS=00
307 *  ビットレートレジスタBRR=16
308 */
309#ifdef CONFIG_16MHZ
310#define SMR_CKS 0x0u /* 分周比 */
311#define SCI_BRR 16u /* ビットレート */
312#endif
313
314/*
315 * ボーレート設定後、クロックが安定するまでの待
316ち時間
317 *  (最初の1ビット分) 
318 * BPS=38400bpsの場合
319 *  t = 1 / BPS = 26,042 = 27,000[nsec]
320 */
321#define SH1SCI_DELAY 27000
322
323#else /* CONFIG_BAUD */
324
325#error unsupported baud rate.
326
327#endif /* CONFIG_BAUD */
328
329
330/*
331 * シリアルI/Oポート管理ブロックの定義
332 *  2chサポートに拡張する場合は初期値用のデータも含める
333 */
334struct sio_port_control_block {
335 VP_INT exinf; /* 拡張情
336å ± */
337 BOOL openflag; /* オープン済みフラグ */
338};
339
340/*
341 * シリアルI/Oポート管理ブロックのエリア
342 *   ID = 1 をSCI0に対応させている.
343 */
344static SIOPCB siopcb_table[TNUM_SIOP];
345
346/*
347 * シリアルI/OポートIDから管理ブロックを取り出すためのマクロ
348 */
349 /* ポートIDからデバイス番号を求めるマクロ */
350#define INDEX_SIOP(siopid) ((UINT)((siopid) - 1))
351#define get_siopcb(siopid) (&(siopcb_table[INDEX_SIOP(siopid)]))
352
353/*
354 * 文字を受信できるか?
355 */
356Inline BOOL
357sh1sci_getready(SIOPCB *siopcb)
358{
359 VB ssr0 = sil_reb_mem(SCI_SSR0);
360 return(ssr0 & SSR_RDRF);
361}
362
363/*
364 * 文字を送信できるか?
365 */
366Inline BOOL
367sh1sci_putready(SIOPCB *siopcb)
368{
369 VB ssr0 = sil_reb_mem(SCI_SSR0);
370 return(ssr0 & SSR_TDRE);
371}
372
373/*
374 * 受信した文字の取出し
375 */
376Inline char
377sh1sci_getchar(SIOPCB *siopcb)
378{
379 char data;
380
381 data = sil_reb_mem(SCI_RDR0);
382
383 /* レシーブデータレジスタフル・フラグのクリア */
384 sh1_anb_reg(SCI_SSR0, (VB)~SSR_RDRF);
385 return data;
386}
387
388/*
389 * 送信する文字の書込み
390 */
391Inline void
392sh1sci_putchar(SIOPCB *siopcb, char c)
393{
394#ifdef GDB_STUB
395 gdb_stub_putc( c );
396#else
397 sil_wrb_mem(SCI_TDR0 ,c);
398
399 /* トランスミットデータレジスタエンプティ・フラグのクリア*/
400 sh1_anb_reg(SCI_SSR0, (VB)~SSR_TDRE);
401#endif
402}
403
404/*
405 * SIOドライバの初期化ルーチン
406 */
407void
408sh1sci_initialize(void)
409{
410 SIOPCB *siopcb;
411 UINT i;
412
413 /*
414 * シリアルI/Oポート管理ブロックの初期化
415 */
416 for (siopcb = siopcb_table, i = 0; i < TNUM_SIOP; siopcb++, i++) {
417 siopcb->openflag = FALSE;
418 }
419}
420
421/*
422 * オープンしているポートがあるか?
423 */
424BOOL
425sh1sci_openflag(void)
426{
427#if TNUM_SIOP < 2
428 return(siopcb_table[0].openflag);
429#else /* TNUM_SIOP < 2 */
430 return(siopcb_table[0].openflag || siopcb_table[1].openflag);
431#endif /* TNUM_SIOP < 2 */
432}
433
434/*
435 * シリアルI/Oポートのオープン
436 */
437SIOPCB *
438sh1sci_opn_por(ID siopid, VP_INT exinf)
439{
440 SIOPCB *siopcb = get_siopcb(siopid);
441
442#ifndef GDB_STUB
443 VB scr0, smr0;
444 VH pbcr1;
445
446 sh1_anb_reg(SCI_SCR0, (VB)~(SCR_TE | SCR_RE)); /* 送受信停止 */
447
448 /* ピンアサイン
449 * シリアルデバイス自体の事項
450ではないので
451 * 本来はこのファイルに記述するのはふさわしくないが、
452 * hw_serial.cを用意するのもç…
453©é›‘なので暫定的にここにå…
454¥ã‚Œã¦ã„る。
455 */
456 pbcr1 = sil_reh_mem((VP)PBCR1);
457 /* PB8:RxD0 PB9:TxD0 */
458 pbcr1 = (pbcr1 & PBCR1_TD0_RD0_MASK) |
459 PBCR1_TD0 | PBCR1_RD0;
460 sil_wrh_mem((VP)PBCR1, pbcr1);
461 /* 送受信フォーマット */
462 smr0 = SMR_CA_ASYNC | /* 調歩同期式 */
463 SMR_CHR8 | /* キャラクタレングス:8ビット */
464 SMR_PE_NON | /* パリティなし */
465 SMR_STOP1 | /* ストップビットレングス:1 */
466 SMR_CKS; /* クロックセレクト(分周比) */
467 sil_wrb_mem(SCI_SMR0, smr0);
468
469 sil_wrb_mem(SCI_BRR0, SCI_BRR); /* ボーレート設定 */
470
471 /* 割込み禁止とクロックソースの選択 */
472 scr0 = (VB)(~(SCR_TIE | SCR_RIE | SCR_TE | SCR_RE |
473 SCR_MPIE | SCR_TEIE | SCR_CKE_MASK) | SCR_CKE);
474 sil_wrb_mem(SCI_SCR0, scr0);
475
476 /*
477 * ボーレートの設定後、1カウント分待
478たなければならない。
479 */
480 sil_dly_nse(SH1SCI_DELAY);
481
482 /* エラーフラグをクリア */
483 sh1_anb_reg(SCI_SSR0, (VB)~(SSR_ORER | SSR_FER | SSR_PER));
484 /* 受信割り込み許可 */
485 /* 送受信許可 */
486 sh1_orb_reg(SCI_SCR0, (SCR_RIE | SCR_TE | SCR_RE));
487 /* 送信割込みの許可は送信制御関数で行う */
488
489#endif /* GDB_STUB */
490
491 siopcb->exinf = exinf;
492 siopcb->openflag = TRUE;
493 return(siopcb);
494}
495
496/*
497 * シリアルI/Oポートのクローズ
498 */
499void
500sh1sci_cls_por(SIOPCB *siopcb)
501{
502 /* 送受信停止、割込み禁止 */
503 sh1_anb_reg(SCI_SCR0, (VB)~(SCR_TIE | SCR_RIE | SCR_TE | SCR_RE));
504 siopcb->openflag = FALSE;
505}
506
507/*
508 * シリアルI/Oポートへの文字送信
509 */
510BOOL
511sh1sci_snd_chr(SIOPCB *siopcb, char c)
512{
513 if (sh1sci_putready(siopcb)) {
514 sh1sci_putchar(siopcb, c);
515 return(TRUE);
516 }
517 return(FALSE);
518}
519
520/*
521 * シリアルI/Oポートからの文字受信
522 */
523INT
524sh1sci_rcv_chr(SIOPCB *siopcb)
525{
526 if (sh1sci_getready(siopcb)) {
527 return((INT)(UB)sh1sci_getchar(siopcb));
528 /* (UB)でキャストするのはゼロ拡張にするため */
529 }
530 return(-1);
531}
532
533/*
534 * シリアルI/Oポートからのコールバックの許可
535 */
536void
537sh1sci_ena_cbr(SIOPCB *siopcb, UINT cbrtn)
538{
539 switch (cbrtn) {
540 case SIO_ERDY_SND: /* 送信割り込み要求を許可 */
541 sh1_orb_reg(SCI_SCR0, SCR_TIE);
542 break;
543 case SIO_ERDY_RCV: /* 受信割り込み要求を許可 */
544 sh1_orb_reg(SCI_SCR0, SCR_RIE);
545 break;
546 }
547}
548
549/*
550 * シリアルI/Oポートからのコールバックの禁止
551 */
552void
553sh1sci_dis_cbr(SIOPCB *siopcb, UINT cbrtn)
554{
555 switch (cbrtn) {
556 case SIO_ERDY_SND: /* 送信割り込み要求を禁止 */
557 sh1_anb_reg(SCI_SCR0, (VB)~SCR_TIE);
558 break;
559 case SIO_ERDY_RCV: /* 受信割り込み要求を禁止 */
560 sh1_anb_reg(SCI_SCR0, (VB)~SCR_RIE);
561 break;
562 }
563}
564
565/*
566 * シリアルI/Oポートに対する送信割込み処理
567 */
568Inline void
569sh1sci_isr_siop_out(SIOPCB *siopcb)
570{
571 VB scr0 = sil_reb_mem(SCI_SCR0);
572
573 if ((scr0 & SCR_TIE) != 0 && sh1sci_putready(siopcb)) {
574 /*
575 * 送信通知コールバックルーチンを呼び出す.
576 */
577 sh1sci_ierdy_snd(siopcb->exinf);
578 }
579}
580
581/*
582 * シリアルI/Oポートに対する受信割込み処理
583 */
584Inline void
585sh1sci_isr_siop_in(SIOPCB *siopcb)
586{
587 VB scr0 = sil_reb_mem(SCI_SCR0);
588
589 if ((scr0 & SCR_RIE) != 0 && sh1sci_getready(siopcb)) {
590 /*
591 * 受信通知コールバックルーチンを呼び出す.
592 */
593 sh1sci_ierdy_rcv(siopcb->exinf);
594 }
595}
596
597/*
598 * SIO送信割込みサービスルーチン
599 *
600 *  SH1内
601蔵のSCIでは割込み番号が送受信別、チャネル別に分かれているので、
602 *  SCI0の送信割込み以外でこのルーチンが呼ばれることはない
603 *
604 */
605void
606sh1sci_isr_out(void)
607{
608 if (siopcb_table[0].openflag) {
609 sh1sci_isr_siop_out(get_siopcb(1));
610 }
611}
612
613/*
614 * SIO受信割込みサービスルーチン
615 *
616 *  SH1内
617蔵のSCIでは割込み番号が送受信別、チャネル別に分かれているので、
618 *  SCI0の受信割込み以外でこのルーチンが呼ばれることはない
619 *
620 */
621void
622sh1sci_isr_in(void)
623{
624 if (siopcb_table[0].openflag) {
625 sh1sci_isr_siop_in(get_siopcb(1));
626 }
627}
628
629/*
630 * SIO受信エラー割込みサービスルーチン
631 *
632 *  SH1内
633蔵のSCIでは割込み番号がチャネル別に分かれているので、
634 *  SCI0の受信エラー割込み以外でこのルーチンが呼ばれることはない
635 *  
636 *  エラー処理自体はエラーフラグのクリアのみにとどめている。
637 *    ・オーバーランエラー
638 *    ・フレーミングエラー
639 *    ・パリティエラー
640 */
641void
642sh1sci_isr_error(void)
643{
644 VB ssr0;
645
646 if (siopcb_table[0].openflag) {
647 ssr0 = sil_reb_mem(SCI_SSR0); /* 1度読み出して */
648 ssr0 &= ~(SSR_RDRF | SSR_ORER | SSR_FER | SSR_PER);
649 sil_wrb_mem(SCI_SSR0, ssr0); /* エラーフラグクリア */
650 }
651}
652
653/*
654 * ポーリングによる文字の送信
655 */
656void
657sh1sci_putc_pol(char c)
658{
659 while(!sh1sci_putready(&siopcb_table[0]));
660 sh1sci_putchar(&siopcb_table[0], c);
661}
Note: See TracBrowser for help on using the repository browser.