1 | /*
|
---|
2 | * TOPPERS/ASP Kernel
|
---|
3 | * Toyohashi Open Platform for Embedded Real-Time Systems/
|
---|
4 | * Advanced Standard Profile Kernel
|
---|
5 | *
|
---|
6 | * Copyright (C) 2008-2010 by Witz Corporation, JAPAN
|
---|
7 | * Copyright (C) 2013 by Mitsuhiro Matsuura
|
---|
8 | *
|
---|
9 | * ä¸è¨èä½æ¨©è
|
---|
10 | ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
|
---|
11 | * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹
|
---|
12 | * å¤ã»åé
|
---|
13 | å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
|
---|
14 | * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
|
---|
15 | * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
|
---|
16 | * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼
|
---|
17 | * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
18 | * ç¨ã§ããå½¢ã§åé
|
---|
19 | å¸ããå ´åã«ã¯ï¼åé
|
---|
20 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨
|
---|
21 | * è
|
---|
22 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
|
---|
23 | * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
24 | * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
25 | * ç¨ã§ããªãå½¢ã§åé
|
---|
26 | å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
|
---|
27 | * ã¨ï¼
|
---|
28 | * (a) åé
|
---|
29 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è
|
---|
30 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
|
---|
31 | * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
32 | * (b) åé
|
---|
33 | å¸ã®å½¢æ
|
---|
34 | ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã«
|
---|
35 | * å ±åãããã¨ï¼
|
---|
36 | * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
|
---|
37 | * 害ãããï¼ä¸è¨èä½æ¨©è
|
---|
38 | ããã³TOPPERSããã¸ã§ã¯ããå
|
---|
39 | 責ãããã¨ï¼
|
---|
40 | * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
|
---|
41 | * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
|
---|
42 | ããã³TOPPERSããã¸ã§ã¯ãã
|
---|
43 | * å
|
---|
44 | 責ãããã¨ï¼
|
---|
45 | *
|
---|
46 | * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
|
---|
47 | ã
|
---|
48 | * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
|
---|
49 | * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
|
---|
50 | * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã
|
---|
51 | * ã®è²¬ä»»ãè² ããªãï¼
|
---|
52 | *
|
---|
53 | * @(#) $Id: rx630_uart.c 313 2017-07-23 04:50:32Z coas-nagasima $
|
---|
54 | */
|
---|
55 |
|
---|
56 |
|
---|
57 | /*
|
---|
58 | * UARTç¨ ç°¡æSIOãã©ã¤ã
|
---|
59 | */
|
---|
60 |
|
---|
61 | #include <sil.h>
|
---|
62 | #include <kernel.h>
|
---|
63 | #include <t_syslog.h>
|
---|
64 | #include "target_syssvc.h"
|
---|
65 | #include "rx630_uart.h"
|
---|
66 |
|
---|
67 | /* ã·ãªã¢ã«ã¢ã¼ãã¬ã¸ã¹ã¿ï¼SMR) */
|
---|
68 | #define CKS UINT_C(0x03)
|
---|
69 | #define STOP UINT_C(0x08)
|
---|
70 | #define PM UINT_C(0x10)
|
---|
71 | #define PE UINT_C(0x20)
|
---|
72 | #define CHR UINT_C(0x40)
|
---|
73 | #define CM UINT_C(0x80)
|
---|
74 | #define ASYNC_7BIT UINT_C(0x00)
|
---|
75 | #define ASYNC_8BIT UINT_C(0x40)
|
---|
76 |
|
---|
77 | /* ã·ãªã¢ã«ã³ã³ããã¼ã«ã¬ã¸ã¹ã¿ï¼SCR) */
|
---|
78 | #define CKE UINT_C(0x03)
|
---|
79 | #define TEIE UINT_C(0x04)
|
---|
80 | #define RE UINT_C(0x10)
|
---|
81 | #define TE UINT_C(0x20)
|
---|
82 | #define RIE UINT_C(0x40)
|
---|
83 | #define TIE UINT_C(0x80)
|
---|
84 |
|
---|
85 | /* ã·ãªã¢ã«ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ï¼SSRï¼ */
|
---|
86 | #define TEND UINT_C(0x04)
|
---|
87 | #define PER UINT_C(0x08)
|
---|
88 | #define FER UINT_C(0x10)
|
---|
89 | #define ORER UINT_C(0x20)
|
---|
90 |
|
---|
91 | /* ã·ãªã¢ã«æ¡å¼µã¢ã¼ãã¬ã¸ã¹ã¿ï¼SEMR) */
|
---|
92 | #define ACS0 UINT_C(0x01)
|
---|
93 | #define ABCS UINT_C(0x10)
|
---|
94 |
|
---|
95 | #define SCI_SCR_FLG_ENABLE (RE | TE)
|
---|
96 | #define SCI_SMR_FLG_ENABLE (STOP | PM | PE | CHR | CM)
|
---|
97 |
|
---|
98 | /*
|
---|
99 | * ã·ãªã¢ã«I/Oãã¼ãåæåãããã¯ã®å®ç¾©
|
---|
100 | */
|
---|
101 | typedef struct sio_port_initialization_block {
|
---|
102 | volatile uint8_t *ctlreg; /* ã·ãªã¢ã«ã³ã³ããã¼ã«ã¬ã¸ã¹ã¿ï¼SCR) */
|
---|
103 | volatile uint8_t *modereg; /* ã·ãªã¢ã«ã¢ã¼ãã¬ã¸ã¹ã¿ï¼SMR) */
|
---|
104 | volatile uint8_t *extmodereg; /* ã·ãªã¢ã«æ¡å¼µã¢ã¼ãã¬ã¸ã¹ã¿ï¼SEMR) */
|
---|
105 | volatile uint8_t *statusreg; /* ã·ãªã¢ã«ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ï¼SSRï¼ */
|
---|
106 | volatile uint8_t *tdreg; /* ãã©ã³ã¹ããããã¼ã¿ã¬ã¸ã¹ã¿ï¼TDR)*/
|
---|
107 | volatile uint8_t *rdreg; /* ã¬ã·ã¼ããã¼ã¿ã¬ã¸ã¹ã¿ï¼RDR) */
|
---|
108 | volatile uint8_t *bitratereg; /* ãããã¬ã¼ãã¬ã¸ã¹ã¿ï¼BRR) */
|
---|
109 | volatile uint32_t *mstpcrreg; /* ã¢ã¸ã¥ã¼ã«ã¹ãããã³ã³ããã¼ã«ã¬ã¸ã¹ã¿ï¼MSTPCRï¼ */
|
---|
110 | volatile uint8_t *ssrreg; /* ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ */
|
---|
111 | volatile uint8_t *rxiirreg; /* RXIç¨å²è¾¼ã¿è¦æ±ã¬ã¸ã¹ã¿ */
|
---|
112 | uint8_t tx_intno; /* éä¿¡ï¼ãã¼ã¿ã¨ã³ããã£ï¼å²ãè¾¼ã¿çªå· */
|
---|
113 | uint8_t rx_intno; /* åä¿¡ï¼ãã¼ã¿ãã«ï¼å²ãè¾¼ã¿çªå· */
|
---|
114 | uint8_t te_intno; /* éä¿¡ï¼çµäºï¼å²ãè¾¼ã¿çªå· */
|
---|
115 | uint8_t sci_no; /* SCIã®çªå·(SCI0ï½SCI6) */
|
---|
116 | uint32_t mstpcr_offset; /* MSTPCRã®å¯¾å¿ããããããªãã»ãã */
|
---|
117 | } SIOPINIB;
|
---|
118 |
|
---|
119 | /*
|
---|
120 | * ã·ãªã¢ã«I/Oãã¼ã管çãããã¯ã®å®ç¾©
|
---|
121 | */
|
---|
122 | struct sio_port_control_block {
|
---|
123 | const SIOPINIB *p_siopinib; /* ã·ãªã¢ã«I/Oãã¼ãåæåããã㯠*/
|
---|
124 | intptr_t exinf; /* æ¡å¼µæ
|
---|
125 | å ± */
|
---|
126 | bool_t openflag; /* ãªã¼ãã³æ¸ã¿ãã©ã° */
|
---|
127 | bool_t sendflag; /* éä¿¡å²è¾¼ã¿ã¤ãã¼ãã«ãã©ã° */
|
---|
128 | bool_t getready; /* æåãåä¿¡ããç¶æ
|
---|
129 | */
|
---|
130 | bool_t putready; /* æåãéä¿¡ã§ããç¶æ
|
---|
131 | */
|
---|
132 | bool_t is_initialized; /* ããã¤ã¹åæåæ¸ã¿ãã©ã° */
|
---|
133 | };
|
---|
134 |
|
---|
135 | /*
|
---|
136 | * ã·ãªã¢ã«I/Oãã¼ã管çãããã¯ã®ã¨ãªã¢
|
---|
137 | */
|
---|
138 | static SIOPCB siopcb_table[TNUM_SIOP];
|
---|
139 |
|
---|
140 | /* ã¬ã¸ã¹ã¿ãã¼ãã« */
|
---|
141 | static const SIOPINIB siopinib_table[TNUM_SIOP] =
|
---|
142 | {
|
---|
143 | {
|
---|
144 | (volatile uint8_t *)SCI0_SCR_ADDR,
|
---|
145 | (volatile uint8_t *)SCI0_SMR_ADDR,
|
---|
146 | (volatile uint8_t *)SCI0_SEMR_ADDR,
|
---|
147 | (volatile uint8_t *)SCI0_SSR_ADDR,
|
---|
148 | (volatile uint8_t *)SCI0_TDR_ADDR,
|
---|
149 | (volatile uint8_t *)SCI0_RDR_ADDR,
|
---|
150 | (volatile uint8_t *)SCI0_BRR_ADDR,
|
---|
151 | (volatile uint32_t *)SYSTEM_MSTPCRB_ADDR,
|
---|
152 | (volatile uint8_t *)SCI0_SSR_ADDR,
|
---|
153 | (volatile uint8_t *)ICU_IR215_ADDR,
|
---|
154 | INT_SCI0_TXI,
|
---|
155 | INT_SCI0_RXI,
|
---|
156 | INT_SCI0_TEI,
|
---|
157 | 0,
|
---|
158 | SYSTEM_MSTPCRB_MSTPB31_BIT,
|
---|
159 | } , /* UART0 */
|
---|
160 | #if TNUM_SIOP > 1
|
---|
161 | {
|
---|
162 | (volatile uint8_t *)SCI2_SCR_ADDR,
|
---|
163 | (volatile uint8_t *)SCI2_SMR_ADDR,
|
---|
164 | (volatile uint8_t *)SCI2_SEMR_ADDR,
|
---|
165 | (volatile uint8_t *)SCI2_SSR_ADDR,
|
---|
166 | (volatile uint8_t *)SCI2_TDR_ADDR,
|
---|
167 | (volatile uint8_t *)SCI2_RDR_ADDR,
|
---|
168 | (volatile uint8_t *)SCI2_BRR_ADDR,
|
---|
169 | (volatile uint32_t *)SYSTEM_MSTPCRB_ADDR,
|
---|
170 | (volatile uint8_t *)SCI2_SSR_ADDR,
|
---|
171 | (volatile uint8_t *)ICU_IR223_ADDR,
|
---|
172 | INT_SCI2_TXI,
|
---|
173 | INT_SCI2_RXI,
|
---|
174 | INT_SCI2_TEI,
|
---|
175 | 2,
|
---|
176 | SYSTEM_MSTPCRB_MSTPB29_BIT,
|
---|
177 | } , /* UART2 */
|
---|
178 | #endif
|
---|
179 | };
|
---|
180 |
|
---|
181 | /*
|
---|
182 | * ã·ãªã¢ã«I/Oãã¼ãIDãã管çãããã¯ãåãåºãããã®ãã¯ã
|
---|
183 | */
|
---|
184 | #define INDEX_SIOP(siopid) ((uint_t)((siopid) - 1))
|
---|
185 | #define get_siopcb(siopid) (&(siopcb_table[INDEX_SIOP(siopid)]))
|
---|
186 | #define get_siopinib(siopid) (&(siopinib_table[INDEX_SIOP(siopid)]))
|
---|
187 |
|
---|
188 |
|
---|
189 | /*
|
---|
190 | * SIOãã©ã¤ãã®ã·ãªã¢ã«ã¢ã¼ãã¬ã¸ã¹ã¿(SMR)
|
---|
191 | */
|
---|
192 | static void
|
---|
193 | rx630_uart_setmode(const SIOPINIB *p_siopinib, uint8_t bitrate, uint8_t clksrc)
|
---|
194 | {
|
---|
195 | volatile uint8_t i;
|
---|
196 |
|
---|
197 | /*
|
---|
198 | * SCIãã©ã¤ãã®åæåã«ã¼ãã³
|
---|
199 | */
|
---|
200 |
|
---|
201 | /*
|
---|
202 | * å²ãè¾¼ã¿è¦æ±å
|
---|
203 | ã¬ã¸ã¹ã¿ã®è¨å®(ISELRi)
|
---|
204 | *
|
---|
205 | * ãªã»ããå¤ã¨åãå¤ãè¨å®ãããã¨ã«ãªããã,
|
---|
206 | * å¦çã¯çç¥ãã.
|
---|
207 | */
|
---|
208 |
|
---|
209 | /*
|
---|
210 | * ã¢ã¸ã¥ã¼ã«ã¹ãããæ©è½ã®è¨å®
|
---|
211 | */
|
---|
212 | sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA502); /* æ¸è¾¼ã¿è¨±å¯ */
|
---|
213 | sil_wrw_mem(p_siopinib->mstpcrreg,
|
---|
214 | sil_rew_mem(p_siopinib->mstpcrreg) & ~p_siopinib->mstpcr_offset);
|
---|
215 | sil_wrh_mem(SYSTEM_PRCR_ADDR, (uint16_t)0xA500); /* æ¸è¾¼ã¿ç¦æ¢ */
|
---|
216 |
|
---|
217 | /* éåä¿¡ç¦æ¢, SCKn端åã¯å
|
---|
218 | ¥åºåãã¼ãã¨ãã¦ä½¿ç¨ */
|
---|
219 | sil_wrb_mem(p_siopinib->ctlreg, 0x00U);
|
---|
220 |
|
---|
221 | /* ã¯ããã¯é¸æããã(SMR.CKS[1:0]ããããè¨å®) */
|
---|
222 | sil_wrb_mem(p_siopinib->modereg,
|
---|
223 | sil_reb_mem(p_siopinib->modereg) | clksrc);
|
---|
224 |
|
---|
225 | /* SMRã«éä¿¡ï¼ åä¿¡ãã©ã¼ããããè¨å®) */
|
---|
226 | sil_wrb_mem(p_siopinib->modereg,
|
---|
227 | sil_reb_mem(p_siopinib->modereg) & (~SCI_SMR_FLG_ENABLE));
|
---|
228 |
|
---|
229 | /* ãããã¬ã¼ããè¨å® */
|
---|
230 | sil_wrb_mem(p_siopinib->bitratereg, bitrate);
|
---|
231 |
|
---|
232 | /* ãããæé(åºæ¬ã¯ããã¯16ãµã¤ã¯ã«ã®æéã1ãããæéã¨ãªã) */
|
---|
233 | for(i = 0; i < 16; i++) { }
|
---|
234 |
|
---|
235 | /* éåä¿¡è¨±å¯ */
|
---|
236 | sil_wrb_mem(p_siopinib->ctlreg,
|
---|
237 | (sil_reb_mem(p_siopinib->ctlreg) | SCI_SCR_FLG_ENABLE));
|
---|
238 | }
|
---|
239 |
|
---|
240 |
|
---|
241 | /*
|
---|
242 | * SIOãã©ã¤ãã®åæåã«ã¼ãã³
|
---|
243 | */
|
---|
244 | void
|
---|
245 | rx630_uart_initialize(void)
|
---|
246 | {
|
---|
247 | SIOPCB *p_siopcb;
|
---|
248 | uint_t i;
|
---|
249 |
|
---|
250 | /*
|
---|
251 | * ã·ãªã¢ã«I/Oãã¼ã管çãããã¯ã®åæå
|
---|
252 | */
|
---|
253 | for (p_siopcb = siopcb_table, i = 0; i < TNUM_SIOP; p_siopcb++, i++){
|
---|
254 | p_siopcb->p_siopinib = &(siopinib_table[i]);
|
---|
255 | p_siopcb->openflag = false;
|
---|
256 | p_siopcb->sendflag = false;
|
---|
257 | }
|
---|
258 | }
|
---|
259 |
|
---|
260 | /*
|
---|
261 | * ã«ã¼ãã«èµ·åæã®ããã¼åºåç¨ã®åæå
|
---|
262 | */
|
---|
263 | void
|
---|
264 | rx630_uart_init(ID siopid, uint8_t bitrate, uint8_t clksrc)
|
---|
265 | {
|
---|
266 | SIOPCB *p_siopcb = get_siopcb(siopid);
|
---|
267 | const SIOPINIB *p_siopinib = get_siopinib(siopid);
|
---|
268 | /* ãã®æç¹ã§ã¯ãp_siopcb->p_siopinibã¯åæåããã¦ããªã */
|
---|
269 |
|
---|
270 | /* äºéåæåã®é²æ¢ */
|
---|
271 | p_siopcb->is_initialized = true;
|
---|
272 |
|
---|
273 | /* ãã¼ãã¦ã§ã¢ã®åæåå¦çã¨éä¿¡è¨±å¯ */
|
---|
274 | rx630_uart_setmode(p_siopinib , bitrate, clksrc);
|
---|
275 | sil_wrb_mem(p_siopinib->ctlreg,
|
---|
276 | (uint8_t)(sil_reb_mem((uint8_t *)p_siopinib->ctlreg) | TE));
|
---|
277 | }
|
---|
278 |
|
---|
279 | /*
|
---|
280 | * ã·ãªã¢ã«I/Oãã¼ãã¸ã®ãã¼ãªã³ã°ã§ã®åºå
|
---|
281 | */
|
---|
282 | void
|
---|
283 | rx630_uart_pol_putc(char c, ID siopid)
|
---|
284 | {
|
---|
285 | const SIOPINIB *p_siopinib;
|
---|
286 |
|
---|
287 | p_siopinib = get_siopinib(siopid);
|
---|
288 |
|
---|
289 | /*
|
---|
290 | * éä¿¡ã¬ã¸ã¹ã¿ã空ã«ãªãã¾ã§å¾
|
---|
291 | ã¤
|
---|
292 | */
|
---|
293 | while((sil_reb_mem(p_siopinib->ssrreg) & SCI_SSR_TEND_BIT) == 0U);
|
---|
294 |
|
---|
295 | sil_wrb_mem(p_siopinib->tdreg, (uint8_t)c);
|
---|
296 | }
|
---|
297 |
|
---|
298 | /*
|
---|
299 | * ã·ãªã¢ã«I/Oãã¼ãã®ãªã¼ãã³
|
---|
300 | */
|
---|
301 | SIOPCB *
|
---|
302 | rx630_uart_opn_por
|
---|
303 | (ID siopid, intptr_t exinf, uint8_t bitrate, uint8_t clksrc)
|
---|
304 | {
|
---|
305 | SIOPCB *p_siopcb;
|
---|
306 | const SIOPINIB *p_siopinib;
|
---|
307 |
|
---|
308 | p_siopcb = get_siopcb(siopid);
|
---|
309 | p_siopinib = p_siopcb->p_siopinib;
|
---|
310 |
|
---|
311 | /*
|
---|
312 | * ãã¼ãã¦ã§ã¢ã®åæå
|
---|
313 | *
|
---|
314 | * æ¢ã«åæåãã¦ããå ´åã¯, äºéã«åæåããªã.
|
---|
315 | */
|
---|
316 | if(!(p_siopcb->is_initialized)){
|
---|
317 | rx630_uart_setmode(p_siopinib, bitrate, clksrc);
|
---|
318 | p_siopcb->is_initialized = true;
|
---|
319 | }
|
---|
320 |
|
---|
321 | p_siopcb->exinf = exinf;
|
---|
322 | p_siopcb->getready = p_siopcb->putready = false;
|
---|
323 | p_siopcb->openflag = true;
|
---|
324 |
|
---|
325 | return (p_siopcb);
|
---|
326 | }
|
---|
327 |
|
---|
328 | /*
|
---|
329 | * ã·ãªã¢ã«I/Oãã¼ãã®ã¯ãã¼ãº
|
---|
330 | */
|
---|
331 | void
|
---|
332 | rx630_uart_cls_por(SIOPCB *p_siopcb)
|
---|
333 | {
|
---|
334 | /*
|
---|
335 | * UARTåæ¢
|
---|
336 | */
|
---|
337 | sil_wrh_mem((volatile uint16_t *)p_siopcb->p_siopinib->ctlreg, 0x00U);
|
---|
338 | p_siopcb->openflag = false;
|
---|
339 | p_siopcb->is_initialized = false;
|
---|
340 | }
|
---|
341 |
|
---|
342 | /*
|
---|
343 | * ã·ãªã¢ã«I/Oãã¼ãã¸ã®æåéä¿¡
|
---|
344 | */
|
---|
345 | bool_t
|
---|
346 | rx630_uart_snd_chr(SIOPCB *p_siopcb, char c)
|
---|
347 | {
|
---|
348 | bool_t ercd = false;
|
---|
349 |
|
---|
350 | if((sil_reb_mem(p_siopcb->p_siopinib->ssrreg) & SCI_SSR_TEND_BIT) != 0){
|
---|
351 | sil_wrb_mem(p_siopcb->p_siopinib->tdreg, (uint8_t)c);
|
---|
352 | ercd = true;
|
---|
353 | }
|
---|
354 |
|
---|
355 | return ercd;
|
---|
356 | }
|
---|
357 |
|
---|
358 | /*
|
---|
359 | * ã·ãªã¢ã«I/Oãã¼ãããã®æååä¿¡
|
---|
360 | */
|
---|
361 | int_t
|
---|
362 | rx630_uart_rcv_chr(SIOPCB *p_siopcb)
|
---|
363 | {
|
---|
364 | int_t c = -1;
|
---|
365 |
|
---|
366 | /*
|
---|
367 | * åä¿¡ãã©ã°ãONã®ã¨ãã®ã¿åä¿¡ãããã¡ããæåãåå¾ãã.
|
---|
368 | * ããã¯, ãã¼ãªã³ã°åä¿¡ã«å¯¾å¿ããããã§ãã.
|
---|
369 | * ããã, RX600ã·ãªã¼ãºã§ã¯åä¿¡ãã©ã°ããªããã¨, ã·ã¹ãã ãµã¼ãã¹
|
---|
370 | * ã§ã¯åä¿¡å²è¾¼ã¿ã®ä¸ãããããã¼ã¿ãåä¿¡ãã«æ¥ãªããã¨ãã, 常ã«
|
---|
371 | * åä¿¡ãããã¡ããæåãåå¾ãã.
|
---|
372 | */
|
---|
373 | c = (int)(sil_reb_mem(p_siopcb->p_siopinib->rdreg));
|
---|
374 |
|
---|
375 | return c;
|
---|
376 | }
|
---|
377 |
|
---|
378 | /*
|
---|
379 | * ã·ãªã¢ã«I/Oãã¼ãããã®ã³ã¼ã«ããã¯ã®è¨±å¯
|
---|
380 | */
|
---|
381 | void
|
---|
382 | rx630_uart_ena_cbr(SIOPCB *p_siopcb, uint_t cbrtn)
|
---|
383 | {
|
---|
384 | switch (cbrtn) {
|
---|
385 | case SIO_RDY_SND:
|
---|
386 | sil_wrb_mem(p_siopcb->p_siopinib->ctlreg,
|
---|
387 | (sil_reb_mem(p_siopcb->p_siopinib->ctlreg) | SCI_SCR_TEIE_BIT));
|
---|
388 | break;
|
---|
389 | case SIO_RDY_RCV:
|
---|
390 | sil_wrb_mem(p_siopcb->p_siopinib->ctlreg,
|
---|
391 | (sil_reb_mem(p_siopcb->p_siopinib->ctlreg) | SCI_SCR_RIE_BIT));
|
---|
392 | break;
|
---|
393 | default:
|
---|
394 | assert(1);
|
---|
395 | break;
|
---|
396 | }
|
---|
397 | }
|
---|
398 |
|
---|
399 | /*
|
---|
400 | * ã·ãªã¢ã«I/Oãã¼ãããã®ã³ã¼ã«ããã¯ã®ç¦æ¢
|
---|
401 | */
|
---|
402 | void
|
---|
403 | rx630_uart_dis_cbr(SIOPCB *p_siopcb, uint_t cbrtn)
|
---|
404 | {
|
---|
405 | switch (cbrtn) {
|
---|
406 | case SIO_RDY_SND:
|
---|
407 | sil_wrb_mem(p_siopcb->p_siopinib->ctlreg,
|
---|
408 | (sil_reb_mem(p_siopcb->p_siopinib->ctlreg) & (~SCI_SCR_TEIE_BIT)));
|
---|
409 | break;
|
---|
410 | case SIO_RDY_RCV:
|
---|
411 | sil_wrb_mem(p_siopcb->p_siopinib->ctlreg,
|
---|
412 | (sil_reb_mem(p_siopcb->p_siopinib->ctlreg) & (~SCI_SCR_RIE_BIT)));
|
---|
413 | break;
|
---|
414 | default:
|
---|
415 | assert(1);
|
---|
416 | break;
|
---|
417 | }
|
---|
418 | }
|
---|
419 |
|
---|
420 | /*
|
---|
421 | * SIOã®å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³
|
---|
422 | */
|
---|
423 | void
|
---|
424 | rx630_uart_tx_isr(ID siopid)
|
---|
425 | {
|
---|
426 | SIOPCB *p_siopcb = get_siopcb(siopid);
|
---|
427 |
|
---|
428 | if((sil_reb_mem(
|
---|
429 | (void *)p_siopcb->p_siopinib->ssrreg) & SCI_SSR_TEND_BIT) != 0U){
|
---|
430 | /*
|
---|
431 | * éä¿¡å¯è½ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºãï¼
|
---|
432 | */
|
---|
433 | rx630_uart_irdy_snd(p_siopcb->exinf);
|
---|
434 | }
|
---|
435 | }
|
---|
436 |
|
---|
437 | void
|
---|
438 | rx630_uart_rx_isr(ID siopid)
|
---|
439 | {
|
---|
440 | SIOPCB *p_siopcb = get_siopcb(siopid);
|
---|
441 |
|
---|
442 | /*
|
---|
443 | * åä¿¡ãã©ã°ãONã®ã¨ãã®ã¿åä¿¡éç¥ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºã.
|
---|
444 | * ããã, RX600ã·ãªã¼ãºã§ã¯åä¿¡ãã©ã°ããªããã, 常ã«åä¿¡éç¥
|
---|
445 | * ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºã.
|
---|
446 | * ããã§ã¯åä¿¡å²è¾¼ã¿ã®çºçãä¿¡ãã.
|
---|
447 | */
|
---|
448 | /*
|
---|
449 | * åä¿¡éç¥ã³ã¼ã«ããã¯ã«ã¼ãã³ãå¼ã³åºãï¼
|
---|
450 | */
|
---|
451 | rx630_uart_irdy_rcv(p_siopcb->exinf);
|
---|
452 | }
|
---|
453 |
|
---|
454 |
|
---|
455 | /*
|
---|
456 | * ãã¼ãçªå·ãã管çãããã¯ã®å
|
---|
457 | é çªå°ã¸ã®å¤æ
|
---|
458 | */
|
---|
459 | SIOPCB *
|
---|
460 | rx630_uart_get_siopcb(ID siopid) {
|
---|
461 | SIOPCB *p_siopcb = get_siopcb(siopid);
|
---|
462 | return(p_siopcb);
|
---|
463 | }
|
---|
464 |
|
---|
465 | /*
|
---|
466 | * 管çãããã¯ã®å
|
---|
467 | é çªå°ããåä¿¡å²è¾¼ã¿çªå·ã¸ã®å¤æ
|
---|
468 | */
|
---|
469 | INTNO
|
---|
470 | rx630_uart_intno_rx(SIOPCB *p_siopcb) {
|
---|
471 | INTNO intno = p_siopcb->p_siopinib->rx_intno;
|
---|
472 | return(intno);
|
---|
473 | }
|
---|
474 |
|
---|
475 | /*
|
---|
476 | * 管çãããã¯ã®å
|
---|
477 | é çªå°ããéä¿¡å²è¾¼ã¿çªå·ã¸ã®å¤æ
|
---|
478 | */
|
---|
479 | INTNO
|
---|
480 | rx630_uart_intno_tx(SIOPCB *p_siopcb) {
|
---|
481 | INTNO intno = p_siopcb->p_siopinib->te_intno;
|
---|
482 | return(intno);
|
---|
483 | }
|
---|