OSDN Git Service

e8453e877fdd19a951753b05d998bba46d56b935
[toppersasp4lpc/asp.git] / asp / pdic / uart / uart.h
1 /*
2  *  TOPPERS/ASP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Advanced Standard Profile Kernel
5  * 
6  *  Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory
7  *              Graduate School of Information Science, Nagoya Univ., JAPAN
8  *  Copyright (C) 2010 by TOPPERS/ASP for LPC project
9  *              http://sourceforge.jp/projects/toppersasp4lpc/
10  *
11  * 
12  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
13  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17  *      スコード中に含まれていること.
18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
20  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21  *      の無保証規定を掲載すること.
22  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24  *      と.
25  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
26  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
27  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28  *        報告すること.
29  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
30  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
32  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33  *      免責すること.
34  * 
35  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
36  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
37  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
38  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39  *  の責任を負わない.
40  * 
41  */
42 /**
43  * \defgroup TOPPERS_SIO SIOドライバ
44  * \ingroup TOPPERS_ASP
45  */
46 /* \{ */
47 /**
48  * \file uart.h
49  * \brief シリアルI/Oデバイス(SIO)ドライバ(UART汎用)
50  */
51
52 #ifndef TOPPERS_UART_H
53 #define TOPPERS_UART_H
54
55 #include "kernel.h"
56
57 /*
58  *  SIOの割込みベクタ番号
59  */
60 #if defined(TOPPERS_CHIP_LPC17XX)
61
62 #if (SIO_PORTID == 1)
63 #define INHNO_SIO               INHNO_UART0
64 #define INTNO_SIO               INHNO_UART0
65 #elif (SIO_PORTID == 2)
66 #define INHNO_SIO               INHNO_UART1
67 #define INTNO_SIO               INHNO_UART1
68 #elif (SIO_PORTID == 3)
69 #define INHNO_SIO               INHNO_UART2
70 #define INTNO_SIO               INHNO_UART2
71 #elif (SIO_PORTID == 4)
72 #define INHNO_SIO               INHNO_UART3
73 #define INTNO_SIO               INHNO_UART3
74 #endif
75
76 #elif defined(TOPPERS_CHIP_LPC18XX)
77
78 #if (SIO_PORTID == 1)
79 #define INHNO_SIO       INHNO_USART0
80 #define INTNO_SIO       INHNO_USART0
81 #elif (SIO_PORTID == 2)
82 #define INHNO_SIO       INHNO_UART1
83 #define INTNO_SIO       INHNO_UART1
84 #elif (SIO_PORTID == 3)
85 #define INHNO_SIO       INHNO_USART2
86 #define INTNO_SIO       INHNO_USART2
87 #elif (SIO_PORTID == 4)
88 #define INHNO_SIO       INHNO_USART3
89 #define INTNO_SIO       INHNO_USART3
90 #endif
91
92 #else
93 #error "You must INHNO_SIO for your architecture"
94 #endif
95
96
97 /**
98  * \ingroup SIOAPI
99  * \brief コールバックルーチンの識別番号
100  * \details
101  * porting.txt で要請されている識別番号の宣言。 SIO_RDY_RCVと区別できる
102  * 番号なら何でもいい。
103  */
104 #define SIO_RDY_SND    1U        /* 送信可能コールバック */
105 /**
106  * \ingroup SIOAPI
107  * \brief コールバックルーチンの識別番号
108  * \details
109  * porting.txt で要請されている識別番号の宣言。 SIO_RDY_SNDと区別できる
110  * 番号なら何でもいい。
111  */
112 #define SIO_RDY_RCV    2U        /* 受信通知コールバック */
113
114 #ifndef TOPPERS_MACRO_ONLY
115
116 /**
117  * \ingroup SIOAPI
118  * \brief シリアルポートの管理ブロック
119  * \details
120  * porting.txtの8.3節で要請されている管理ブロックデータ型。
121  * シリアル・サービス・タスクとSIOペリフェラルAPIの間での管理データの
122  * やりとりに使われる。
123  */
124 typedef struct sio_port_control_block {
125         ID peripheral_index;    /**< ペリフェラル番号。0オリジン */
126         uint32_t reg_base;      /**< SIOペリフェラルのレジスタ・ベース・アドレス */
127         intptr_t exinf;                 /**< sio_opn_porが渡すexinf引数の格納場所。 */
128 } SIOPCB;
129
130 /*
131  *  SIO初期化
132  */
133 extern void sio_initialize(intptr_t exinf);
134
135 /*
136  *  シリアルオープン
137  */
138 extern SIOPCB *sio_opn_por(ID siopid, intptr_t exinf);
139
140 /*
141  *  シリアルクローズ
142  */
143 extern void sio_cls_por(SIOPCB *p_siopcb);
144
145 /*
146  *  割込みハンドラ
147  */
148 extern void sio_isr(intptr_t exinf);
149
150 /*
151  *  1文字送信
152  */
153 extern bool_t sio_snd_chr(SIOPCB *siopcb, char_t c);
154
155 /*
156  *  1文字受信
157  */
158 extern int_t sio_rcv_chr(SIOPCB *siopcb);
159
160 /*
161  *  コールバックの許可
162  */
163 extern void sio_ena_cbr(SIOPCB *siopcb, uint_t cbrtn);
164
165 /* 
166  *  コールバックの禁止
167  */
168 extern void sio_dis_cbr(SIOPCB *siopcb, uint_t cbrtn);
169
170 /*
171  *  送信可能コールバック
172  */
173 extern void sio_irdy_snd(intptr_t exinf);
174
175 /*
176  *  受信通知コールバック
177  */
178 extern void sio_irdy_rcv(intptr_t exinf);
179
180 /*
181  *  1文字送信(ポーリングでの出力)
182  */
183 extern void sio_pol_snd_chr(char_t c, ID siopid);
184
185 /*
186  *  ターゲットのシリアル初期化
187  */
188 extern void target_uart_init(ID siopid);
189
190 #endif /* TOPPERS_MACRO_ONLY */
191 #endif /* TOPPERS_TARGET_SERIAL_H */
192 /* \} */