]> git.gir.st - tmk_keyboard.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/USBDevice/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c
Merge commit '1fe4406f374291ab2e86e95a97341fd9c475fcb8'
[tmk_keyboard.git] / tmk_core / tool / mbed / mbed-sdk / libraries / USBDevice / USBDevice / TARGET_RENESAS / TARGET_RZ_A1H / usb0 / src / common / usb0_function_lib.c
1 /*******************************************************************************
2 * DISCLAIMER
3 * This software is supplied by Renesas Electronics Corporation and is only
4 * intended for use with Renesas products. No other uses are authorized. This
5 * software is owned by Renesas Electronics Corporation and is protected under
6 * all applicable laws, including copyright laws.
7 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
8 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
9 * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
10 * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
11 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
12 * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
13 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
14 * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
15 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
16 * Renesas reserves the right, without notice, to make changes to this software
17 * and to discontinue the availability of this software. By using this software,
18 * you agree to the additional terms and conditions found by accessing the
19 * following link:
20 * http://www.renesas.com/disclaimer
21 * Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
22 *******************************************************************************/
23 /*******************************************************************************
24 * File Name : usb0_function_lib.c
25 * $Rev: 1116 $
26 * $Date:: 2014-07-09 16:29:19 +0900#$
27 * Device(s) : RZ/A1H
28 * Tool-Chain :
29 * OS : None
30 * H/W Platform :
31 * Description : RZ/A1H R7S72100 USB Sample Program
32 * Operation :
33 * Limitations :
34 *******************************************************************************/
35
36
37 /*******************************************************************************
38 Includes <System Includes> , "Project Includes"
39 *******************************************************************************/
40 #include "usb0_function.h"
41
42
43 /*******************************************************************************
44 Typedef definitions
45 *******************************************************************************/
46
47
48 /*******************************************************************************
49 Macro definitions
50 *******************************************************************************/
51
52
53 /*******************************************************************************
54 Imported global variables and functions (from other files)
55 *******************************************************************************/
56
57
58 /*******************************************************************************
59 Exported global variables and functions (to be accessed by other files)
60 *******************************************************************************/
61
62
63 /*******************************************************************************
64 Private global variables and functions
65 *******************************************************************************/
66
67
68 /*******************************************************************************
69 * Function Name: usb0_function_enable_brdy_int
70 * Description : Enables BRDY interrupt in the pipe spceified by the argument.
71 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
72 * : BRDY. Enables BRDY interrupt in the pipe specified by the argument
73 * : in the disabled status. After enabling BRDY, recover all
74 * : BEMP/NRDY/BRDY disabled/enabled status.
75 * Arguments : uint16_t pipe ; pipe Number
76 * Return Value : none
77 *******************************************************************************/
78 void usb0_function_enable_brdy_int (uint16_t pipe)
79 {
80 /* enable brdy interrupt */
81 USB200.BRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
82 }
83
84 /*******************************************************************************
85 * Function Name: usb0_function_disable_brdy_int
86 * Description : Disables BRDY interrupt in the pipe spceified by the argument.
87 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
88 * : BRDY. Enables BRDY interrupt in the pipe specified by the argument
89 * : in the disabled status. After disabling BRDY, recover all
90 * : BEMP/NRDY/BRDY disabled/enabled status.
91 * Arguments : uint16_t pipe ; pipe Number
92 * Return Value : none
93 *******************************************************************************/
94 void usb0_function_disable_brdy_int (uint16_t pipe)
95 {
96 /* disable brdy interrupt */
97 USB200.BRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
98 }
99
100 /*******************************************************************************
101 * Function Name: usb0_function_clear_brdy_sts
102 * Description : Clear BRDY interrupt status in the pipe spceified by the argument.
103 * Arguments : uint16_t pipe ; pipe Number
104 * Return Value : none
105 *******************************************************************************/
106 void usb0_function_clear_brdy_sts (uint16_t pipe)
107 {
108 /* clear brdy status */
109 USB200.BRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
110 }
111
112 /*******************************************************************************
113 * Function Name: usb0_function_enable_bemp_int
114 * Description : Enables BEMP interrupt in the pipe spceified by the argument.
115 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
116 * : BEMP. Enables BEMP interrupt in the pipe specified by the argument
117 * : in the disabled status. After enabling BEMP, recover all
118 * : BEMP/NRDY/BRDY disabled/enabled status.
119 * Arguments : uint16_t pipe ; pipe Number
120 * Return Value : none
121 *******************************************************************************/
122 void usb0_function_enable_bemp_int (uint16_t pipe)
123 {
124 /* enable bemp interrupt */
125 USB200.BEMPENB |= (uint16_t)g_usb0_function_bit_set[pipe];
126 }
127
128 /*******************************************************************************
129 * Function Name: usb0_function_disable_bemp_int
130 * Description : Disables BEMP interrupt in the pipe spceified by the argument.
131 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
132 * : BEMP. Enables BEMP interrupt in the pipe specified by the argument
133 * : in the disabled status. After enabling BEMP, recover all
134 * : BEMP/NRDY/BRDY disabled/enabled status.
135 * Arguments : uint16_t pipe ; pipe Number
136 * Return Value : none
137 *******************************************************************************/
138 void usb0_function_disable_bemp_int (uint16_t pipe)
139 {
140 /* disable bemp interrupt */
141 USB200.BEMPENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
142 }
143
144 /*******************************************************************************
145 * Function Name: usb0_function_clear_bemp_sts
146 * Description : Clear BEMP interrupt status in the pipe spceified by the argument.
147 * Arguments : uint16_t pipe ; pipe Number
148 * Return Value : none
149 *******************************************************************************/
150 void usb0_function_clear_bemp_sts (uint16_t pipe)
151 {
152 /* clear bemp status */
153 USB200.BEMPSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
154 }
155
156 /*******************************************************************************
157 * Function Name: usb0_function_enable_nrdy_int
158 * Description : Enables NRDY interrupt in the pipe spceified by the argument.
159 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
160 * : NRDY. Enables NRDY interrupt in the pipe specified by the argument
161 * : in the disabled status. After enabling NRDY, recover all
162 * : BEMP/NRDY/BRDY disabled/enabled status.
163 * Arguments : uint16_t pipe ; pipe Number
164 * Return Value : none
165 *******************************************************************************/
166 void usb0_function_enable_nrdy_int (uint16_t pipe)
167 {
168 /* enable nrdy interrupt */
169 USB200.NRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
170 }
171
172 /*******************************************************************************
173 * Function Name: usb0_function_disable_nrdy_int
174 * Description : Disables NRDY interrupt in the pipe spceified by the argument.
175 * : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
176 * : NRDY. Disables NRDY interrupt in the pipe specified by the argument
177 * : in the disabled status. After disabling NRDY, recover all
178 * : BEMP/NRDY/BRDY disabled/enabled status.
179 * Arguments : uint16_t pipe ; pipe Number
180 * Return Value : none
181 *******************************************************************************/
182 void usb0_function_disable_nrdy_int (uint16_t pipe)
183 {
184 /* disable nrdy interrupt */
185 USB200.NRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
186 }
187
188 /*******************************************************************************
189 * Function Name: usb0_function_clear_nrdy_sts
190 * Description : Clear NRDY interrupt status in the pipe spceified by the argument.
191 * Arguments : uint16_t pipe ; pipe Number
192 * Return Value : none
193 *******************************************************************************/
194 void usb0_function_clear_nrdy_sts (uint16_t pipe)
195 {
196 /* clear nrdy status */
197 USB200.NRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
198 }
199
200 /*******************************************************************************
201 * Function Name: usb0_function_is_hispeed
202 * Description : Returns the result of USB reset hand shake (RHST) as
203 * : return value.
204 * Arguments : none
205 * Return Value : USB_FUNCTION_HIGH_SPEED ; Hi-Speed
206 * : USB_FUNCTION_FULL_SPEED ; Full-Speed
207 * : LOW_SPEED ; Low-Speed
208 * : USB_FUNCTION_NON_SPEED ; error
209 *******************************************************************************/
210 uint16_t usb0_function_is_hispeed (void)
211 {
212 uint16_t rhst;
213 uint16_t speed;
214
215 rhst = RZA_IO_RegRead_16(&USB200.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
216
217 if (rhst == USB_FUNCTION_HSMODE)
218 {
219 speed = USB_FUNCTION_HIGH_SPEED;
220 }
221 else if (rhst == USB_FUNCTION_FSMODE)
222 {
223 speed = USB_FUNCTION_FULL_SPEED;
224 }
225 else if (rhst == USB_FUNCTION_LSMODE)
226 {
227 speed = USB_FUNCTION_LOW_SPEED;
228 }
229 else
230 {
231 speed = USB_FUNCTION_NON_SPEED;
232 }
233
234 return speed;
235 }
236
237 /*******************************************************************************
238 * Function Name: usb0_function_is_hispeed_enable
239 * Description : Returns the USB High-Speed connection enabled status as
240 * : return value.
241 * Arguments : none
242 * Return Value : DEVDRV_USBF_YES : Hi-Speed Enable
243 * : DEVDRV_USBF_NO : Hi-Speed Disable
244 *******************************************************************************/
245 uint16_t usb0_function_is_hispeed_enable (void)
246 {
247 uint16_t ret;
248
249 ret = DEVDRV_USBF_NO;
250
251 if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
252 {
253 ret = DEVDRV_USBF_YES;
254 }
255
256 return ret;
257 }
258
259 /*******************************************************************************
260 * Function Name: usb0_function_set_pid_buf
261 * Description : Enables communicaqtion in the pipe specified by the argument
262 * : (BUF).
263 * Arguments : uint16_t pipe ; pipe Number
264 * Return Value : none
265 *******************************************************************************/
266 void usb0_function_set_pid_buf (uint16_t pipe)
267 {
268 uint16_t pid;
269
270 pid = usb0_function_get_pid(pipe);
271
272 if (pid == DEVDRV_USBF_PID_STALL2)
273 {
274 usb0_function_set_pid_nak(pipe);
275 }
276
277 switch (pipe)
278 {
279 case USB_FUNCTION_PIPE0:
280 RZA_IO_RegWrite_16(&USB200.DCPCTR,
281 DEVDRV_USBF_PID_BUF,
282 USB_DCPCTR_PID_SHIFT,
283 USB_DCPCTR_PID);
284 break;
285
286 case USB_FUNCTION_PIPE1:
287 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
288 DEVDRV_USBF_PID_BUF,
289 USB_PIPEnCTR_1_5_PID_SHIFT,
290 USB_PIPEnCTR_1_5_PID);
291 break;
292
293 case USB_FUNCTION_PIPE2:
294 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
295 DEVDRV_USBF_PID_BUF,
296 USB_PIPEnCTR_1_5_PID_SHIFT,
297 USB_PIPEnCTR_1_5_PID);
298 break;
299
300 case USB_FUNCTION_PIPE3:
301 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
302 DEVDRV_USBF_PID_BUF,
303 USB_PIPEnCTR_1_5_PID_SHIFT,
304 USB_PIPEnCTR_1_5_PID);
305 break;
306
307 case USB_FUNCTION_PIPE4:
308 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
309 DEVDRV_USBF_PID_BUF,
310 USB_PIPEnCTR_1_5_PID_SHIFT,
311 USB_PIPEnCTR_1_5_PID);
312 break;
313
314 case USB_FUNCTION_PIPE5:
315 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
316 DEVDRV_USBF_PID_BUF,
317 USB_PIPEnCTR_1_5_PID_SHIFT,
318 USB_PIPEnCTR_1_5_PID);
319 break;
320
321 case USB_FUNCTION_PIPE6:
322 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
323 DEVDRV_USBF_PID_BUF,
324 USB_PIPEnCTR_6_8_PID_SHIFT,
325 USB_PIPEnCTR_6_8_PID);
326 break;
327
328 case USB_FUNCTION_PIPE7:
329 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
330 DEVDRV_USBF_PID_BUF,
331 USB_PIPEnCTR_6_8_PID_SHIFT,
332 USB_PIPEnCTR_6_8_PID);
333 break;
334
335 case USB_FUNCTION_PIPE8:
336 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
337 DEVDRV_USBF_PID_BUF,
338 USB_PIPEnCTR_6_8_PID_SHIFT,
339 USB_PIPEnCTR_6_8_PID);
340 break;
341
342 case USB_FUNCTION_PIPE9:
343 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
344 DEVDRV_USBF_PID_BUF,
345 USB_PIPEnCTR_9_PID_SHIFT,
346 USB_PIPEnCTR_9_PID);
347 break;
348
349 case USB_FUNCTION_PIPEA:
350 RZA_IO_RegWrite_16(&USB200.PIPEACTR,
351 DEVDRV_USBF_PID_BUF,
352 USB_PIPEnCTR_A_F_PID_SHIFT,
353 USB_PIPEnCTR_A_F_PID);
354 break;
355
356 case USB_FUNCTION_PIPEB:
357 RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
358 DEVDRV_USBF_PID_BUF,
359 USB_PIPEnCTR_A_F_PID_SHIFT,
360 USB_PIPEnCTR_A_F_PID);
361 break;
362
363 case USB_FUNCTION_PIPEC:
364 RZA_IO_RegWrite_16(&USB200.PIPECCTR,
365 DEVDRV_USBF_PID_BUF,
366 USB_PIPEnCTR_A_F_PID_SHIFT,
367 USB_PIPEnCTR_A_F_PID);
368 break;
369
370 case USB_FUNCTION_PIPED:
371 RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
372 DEVDRV_USBF_PID_BUF,
373 USB_PIPEnCTR_A_F_PID_SHIFT,
374 USB_PIPEnCTR_A_F_PID);
375 break;
376
377 case USB_FUNCTION_PIPEE:
378 RZA_IO_RegWrite_16(&USB200.PIPEECTR,
379 DEVDRV_USBF_PID_BUF,
380 USB_PIPEnCTR_A_F_PID_SHIFT,
381 USB_PIPEnCTR_A_F_PID);
382 break;
383
384 case USB_FUNCTION_PIPEF:
385 RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
386 DEVDRV_USBF_PID_BUF,
387 USB_PIPEnCTR_A_F_PID_SHIFT,
388 USB_PIPEnCTR_A_F_PID);
389 break;
390
391 default:
392 break;
393 }
394 }
395
396 /*******************************************************************************
397 * Function Name: usb0_function_set_pid_nak
398 * Description : Disables communication (NAK) in the pipe specified by the argument.
399 * : When the pipe status was enabling communication (BUF) before
400 * : executing before executing this function, waits in the software
401 * : until the pipe becomes ready after setting disabled.
402 * Arguments : uint16_t pipe ; pipe Number
403 * Return Value : none
404 *******************************************************************************/
405 void usb0_function_set_pid_nak (uint16_t pipe)
406 {
407 uint16_t pid;
408 uint16_t pbusy;
409 uint32_t loop;
410
411 pid = usb0_function_get_pid(pipe);
412
413 if (pid == DEVDRV_USBF_PID_STALL2)
414 {
415 usb0_function_set_pid_stall(pipe);
416 }
417
418 switch (pipe)
419 {
420 case USB_FUNCTION_PIPE0:
421 RZA_IO_RegWrite_16(&USB200.DCPCTR,
422 DEVDRV_USBF_PID_NAK,
423 USB_DCPCTR_PID_SHIFT,
424 USB_DCPCTR_PID);
425 break;
426
427 case USB_FUNCTION_PIPE1:
428 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
429 DEVDRV_USBF_PID_NAK,
430 USB_PIPEnCTR_1_5_PID_SHIFT,
431 USB_PIPEnCTR_1_5_PID);
432 break;
433
434 case USB_FUNCTION_PIPE2:
435 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
436 DEVDRV_USBF_PID_NAK,
437 USB_PIPEnCTR_1_5_PID_SHIFT,
438 USB_PIPEnCTR_1_5_PID);
439 break;
440
441 case USB_FUNCTION_PIPE3:
442 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
443 DEVDRV_USBF_PID_NAK,
444 USB_PIPEnCTR_1_5_PID_SHIFT,
445 USB_PIPEnCTR_1_5_PID);
446 break;
447
448 case USB_FUNCTION_PIPE4:
449 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
450 DEVDRV_USBF_PID_NAK,
451 USB_PIPEnCTR_1_5_PID_SHIFT,
452 USB_PIPEnCTR_1_5_PID);
453 break;
454
455 case USB_FUNCTION_PIPE5:
456 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
457 DEVDRV_USBF_PID_NAK,
458 USB_PIPEnCTR_1_5_PID_SHIFT,
459 USB_PIPEnCTR_1_5_PID);
460 break;
461
462 case USB_FUNCTION_PIPE6:
463 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
464 DEVDRV_USBF_PID_NAK,
465 USB_PIPEnCTR_6_8_PID_SHIFT,
466 USB_PIPEnCTR_6_8_PID);
467 break;
468
469 case USB_FUNCTION_PIPE7:
470 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
471 DEVDRV_USBF_PID_NAK,
472 USB_PIPEnCTR_6_8_PID_SHIFT,
473 USB_PIPEnCTR_6_8_PID);
474 break;
475
476 case USB_FUNCTION_PIPE8:
477 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
478 DEVDRV_USBF_PID_NAK,
479 USB_PIPEnCTR_6_8_PID_SHIFT,
480 USB_PIPEnCTR_6_8_PID);
481 break;
482
483 case USB_FUNCTION_PIPE9:
484 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
485 DEVDRV_USBF_PID_NAK,
486 USB_PIPEnCTR_9_PID_SHIFT,
487 USB_PIPEnCTR_9_PID);
488 break;
489
490 case USB_FUNCTION_PIPEA:
491 RZA_IO_RegWrite_16(&USB200.PIPEACTR,
492 DEVDRV_USBF_PID_NAK,
493 USB_PIPEnCTR_A_F_PID_SHIFT,
494 USB_PIPEnCTR_A_F_PID);
495 break;
496
497 case USB_FUNCTION_PIPEB:
498 RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
499 DEVDRV_USBF_PID_NAK,
500 USB_PIPEnCTR_A_F_PID_SHIFT,
501 USB_PIPEnCTR_A_F_PID);
502 break;
503
504 case USB_FUNCTION_PIPEC:
505 RZA_IO_RegWrite_16(&USB200.PIPECCTR,
506 DEVDRV_USBF_PID_NAK,
507 USB_PIPEnCTR_A_F_PID_SHIFT,
508 USB_PIPEnCTR_A_F_PID);
509 break;
510
511 case USB_FUNCTION_PIPED:
512 RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
513 DEVDRV_USBF_PID_NAK,
514 USB_PIPEnCTR_A_F_PID_SHIFT,
515 USB_PIPEnCTR_A_F_PID);
516 break;
517
518 case USB_FUNCTION_PIPEE:
519 RZA_IO_RegWrite_16(&USB200.PIPEECTR,
520 DEVDRV_USBF_PID_NAK,
521 USB_PIPEnCTR_A_F_PID_SHIFT,
522 USB_PIPEnCTR_A_F_PID);
523 break;
524
525 case USB_FUNCTION_PIPEF:
526 RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
527 DEVDRV_USBF_PID_NAK,
528 USB_PIPEnCTR_A_F_PID_SHIFT,
529 USB_PIPEnCTR_A_F_PID);
530 break;
531
532 default:
533 break;
534 }
535
536 if (pid == DEVDRV_USBF_PID_BUF)
537 {
538 for (loop = 0; loop < 200; loop++)
539 {
540 switch (pipe)
541 {
542 case USB_FUNCTION_PIPE0:
543 pbusy = RZA_IO_RegRead_16(&USB200.DCPCTR,
544 USB_DCPCTR_PBUSY_SHIFT,
545 USB_DCPCTR_PBUSY);
546 break;
547
548 case USB_FUNCTION_PIPE1:
549 pbusy = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
550 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
551 USB_PIPEnCTR_1_5_PBUSY);
552 break;
553
554 case USB_FUNCTION_PIPE2:
555 pbusy = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
556 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
557 USB_PIPEnCTR_1_5_PBUSY);
558 break;
559
560 case USB_FUNCTION_PIPE3:
561 pbusy = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
562 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
563 USB_PIPEnCTR_1_5_PBUSY);
564 break;
565
566 case USB_FUNCTION_PIPE4:
567 pbusy = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
568 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
569 USB_PIPEnCTR_1_5_PBUSY);
570 break;
571
572 case USB_FUNCTION_PIPE5:
573 pbusy = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
574 USB_PIPEnCTR_1_5_PBUSY_SHIFT,
575 USB_PIPEnCTR_1_5_PBUSY);
576 break;
577
578 case USB_FUNCTION_PIPE6:
579 pbusy = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
580 USB_PIPEnCTR_6_8_PBUSY_SHIFT,
581 USB_PIPEnCTR_6_8_PBUSY);
582 break;
583
584 case USB_FUNCTION_PIPE7:
585 pbusy = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
586 USB_PIPEnCTR_6_8_PBUSY_SHIFT,
587 USB_PIPEnCTR_6_8_PBUSY);
588 break;
589
590 case USB_FUNCTION_PIPE8:
591 pbusy = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
592 USB_PIPEnCTR_6_8_PBUSY_SHIFT,
593 USB_PIPEnCTR_6_8_PBUSY);
594 break;
595
596 case USB_FUNCTION_PIPE9:
597 pbusy = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
598 USB_PIPEnCTR_9_PBUSY_SHIFT,
599 USB_PIPEnCTR_9_PBUSY);
600 break;
601
602 case USB_FUNCTION_PIPEA:
603 pbusy = RZA_IO_RegRead_16(&USB200.PIPEACTR,
604 USB_PIPEnCTR_A_F_PBUSY_SHIFT,
605 USB_PIPEnCTR_A_F_PBUSY);
606 break;
607
608 case USB_FUNCTION_PIPEB:
609 pbusy = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
610 USB_PIPEnCTR_A_F_PBUSY_SHIFT,
611 USB_PIPEnCTR_A_F_PBUSY);
612 break;
613
614 case USB_FUNCTION_PIPEC:
615 pbusy = RZA_IO_RegRead_16(&USB200.PIPECCTR,
616 USB_PIPEnCTR_A_F_PBUSY_SHIFT,
617 USB_PIPEnCTR_A_F_PBUSY);
618 break;
619
620 case USB_FUNCTION_PIPED:
621 pbusy = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
622 USB_PIPEnCTR_A_F_PBUSY_SHIFT,
623 USB_PIPEnCTR_A_F_PBUSY);
624 break;
625
626 case USB_FUNCTION_PIPEE:
627 pbusy = RZA_IO_RegRead_16(&USB200.PIPEECTR,
628 USB_PIPEnCTR_A_F_PBUSY_SHIFT,
629 USB_PIPEnCTR_A_F_PBUSY);
630 break;
631
632 case USB_FUNCTION_PIPEF:
633 pbusy = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
634 USB_PIPEnCTR_A_F_PBUSY_SHIFT,
635 USB_PIPEnCTR_A_F_PBUSY);
636 break;
637
638 default:
639 pbusy = 1;
640 break;
641 }
642
643 if (pbusy == 0)
644 {
645 break;
646 }
647 Userdef_USB_usb0_function_delay_500ns();
648 }
649 }
650 }
651
652 /*******************************************************************************
653 * Function Name: usb0_function_set_pid_stall
654 * Description : Disables communication (STALL) in the pipe specified by the
655 * : argument.
656 * Arguments : uint16_t pipe ; pipe Number
657 * Return Value : none
658 *******************************************************************************/
659 void usb0_function_set_pid_stall (uint16_t pipe)
660 {
661 uint16_t pid;
662
663 pid = usb0_function_get_pid(pipe);
664 if (pid == DEVDRV_USBF_PID_BUF)
665 {
666 switch (pipe)
667 {
668 case USB_FUNCTION_PIPE0:
669 RZA_IO_RegWrite_16(&USB200.DCPCTR,
670 DEVDRV_USBF_PID_STALL2,
671 USB_DCPCTR_PID_SHIFT,
672 USB_DCPCTR_PID);
673 break;
674
675 case USB_FUNCTION_PIPE1:
676 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
677 DEVDRV_USBF_PID_STALL2,
678 USB_PIPEnCTR_1_5_PID_SHIFT,
679 USB_PIPEnCTR_1_5_PID);
680 break;
681
682 case USB_FUNCTION_PIPE2:
683 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
684 DEVDRV_USBF_PID_STALL2,
685 USB_PIPEnCTR_1_5_PID_SHIFT,
686 USB_PIPEnCTR_1_5_PID);
687 break;
688
689 case USB_FUNCTION_PIPE3:
690 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
691 DEVDRV_USBF_PID_STALL2,
692 USB_PIPEnCTR_1_5_PID_SHIFT,
693 USB_PIPEnCTR_1_5_PID);
694 break;
695
696 case USB_FUNCTION_PIPE4:
697 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
698 DEVDRV_USBF_PID_STALL2,
699 USB_PIPEnCTR_1_5_PID_SHIFT,
700 USB_PIPEnCTR_1_5_PID);
701 break;
702
703 case USB_FUNCTION_PIPE5:
704 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
705 DEVDRV_USBF_PID_STALL2,
706 USB_PIPEnCTR_1_5_PID_SHIFT,
707 USB_PIPEnCTR_1_5_PID);
708 break;
709
710 case USB_FUNCTION_PIPE6:
711 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
712 DEVDRV_USBF_PID_STALL2,
713 USB_PIPEnCTR_6_8_PID_SHIFT,
714 USB_PIPEnCTR_6_8_PID);
715 break;
716
717 case USB_FUNCTION_PIPE7:
718 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
719 DEVDRV_USBF_PID_STALL2,
720 USB_PIPEnCTR_6_8_PID_SHIFT,
721 USB_PIPEnCTR_6_8_PID);
722 break;
723
724 case USB_FUNCTION_PIPE8:
725 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
726 DEVDRV_USBF_PID_STALL2,
727 USB_PIPEnCTR_6_8_PID_SHIFT,
728 USB_PIPEnCTR_6_8_PID);
729 break;
730
731 case USB_FUNCTION_PIPE9:
732 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
733 DEVDRV_USBF_PID_STALL2,
734 USB_PIPEnCTR_9_PID_SHIFT,
735 USB_PIPEnCTR_9_PID);
736 break;
737
738 case USB_FUNCTION_PIPEA:
739 RZA_IO_RegWrite_16(&USB200.PIPEACTR,
740 DEVDRV_USBF_PID_STALL2,
741 USB_PIPEnCTR_A_F_PID_SHIFT,
742 USB_PIPEnCTR_A_F_PID);
743 break;
744
745 case USB_FUNCTION_PIPEB:
746 RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
747 DEVDRV_USBF_PID_STALL2,
748 USB_PIPEnCTR_A_F_PID_SHIFT,
749 USB_PIPEnCTR_A_F_PID);
750 break;
751
752 case USB_FUNCTION_PIPEC:
753 RZA_IO_RegWrite_16(&USB200.PIPECCTR,
754 DEVDRV_USBF_PID_STALL2,
755 USB_PIPEnCTR_A_F_PID_SHIFT,
756 USB_PIPEnCTR_A_F_PID);
757 break;
758
759 case USB_FUNCTION_PIPED:
760 RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
761 DEVDRV_USBF_PID_STALL2,
762 USB_PIPEnCTR_A_F_PID_SHIFT,
763 USB_PIPEnCTR_A_F_PID);
764 break;
765
766 case USB_FUNCTION_PIPEE:
767 RZA_IO_RegWrite_16(&USB200.PIPEECTR,
768 DEVDRV_USBF_PID_STALL2,
769 USB_PIPEnCTR_A_F_PID_SHIFT,
770 USB_PIPEnCTR_A_F_PID);
771 break;
772
773 case USB_FUNCTION_PIPEF:
774 RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
775 DEVDRV_USBF_PID_STALL2,
776 USB_PIPEnCTR_A_F_PID_SHIFT,
777 USB_PIPEnCTR_A_F_PID);
778 break;
779
780 default:
781 break;
782 }
783 }
784 else
785 {
786 switch (pipe)
787 {
788 case USB_FUNCTION_PIPE0:
789 RZA_IO_RegWrite_16(&USB200.DCPCTR,
790 DEVDRV_USBF_PID_STALL,
791 USB_DCPCTR_PID_SHIFT,
792 USB_DCPCTR_PID);
793 break;
794
795 case USB_FUNCTION_PIPE1:
796 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
797 DEVDRV_USBF_PID_STALL,
798 USB_PIPEnCTR_1_5_PID_SHIFT,
799 USB_PIPEnCTR_1_5_PID);
800 break;
801
802 case USB_FUNCTION_PIPE2:
803 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
804 DEVDRV_USBF_PID_STALL,
805 USB_PIPEnCTR_1_5_PID_SHIFT,
806 USB_PIPEnCTR_1_5_PID);
807 break;
808
809 case USB_FUNCTION_PIPE3:
810 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
811 DEVDRV_USBF_PID_STALL,
812 USB_PIPEnCTR_1_5_PID_SHIFT,
813 USB_PIPEnCTR_1_5_PID);
814 break;
815
816 case USB_FUNCTION_PIPE4:
817 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
818 DEVDRV_USBF_PID_STALL,
819 USB_PIPEnCTR_1_5_PID_SHIFT,
820 USB_PIPEnCTR_1_5_PID);
821 break;
822
823 case USB_FUNCTION_PIPE5:
824 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
825 DEVDRV_USBF_PID_STALL,
826 USB_PIPEnCTR_1_5_PID_SHIFT,
827 USB_PIPEnCTR_1_5_PID);
828 break;
829
830 case USB_FUNCTION_PIPE6:
831 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
832 DEVDRV_USBF_PID_STALL,
833 USB_PIPEnCTR_6_8_PID_SHIFT,
834 USB_PIPEnCTR_6_8_PID);
835 break;
836
837 case USB_FUNCTION_PIPE7:
838 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
839 DEVDRV_USBF_PID_STALL,
840 USB_PIPEnCTR_6_8_PID_SHIFT,
841 USB_PIPEnCTR_6_8_PID);
842 break;
843
844 case USB_FUNCTION_PIPE8:
845 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
846 DEVDRV_USBF_PID_STALL,
847 USB_PIPEnCTR_6_8_PID_SHIFT,
848 USB_PIPEnCTR_6_8_PID);
849 break;
850
851 case USB_FUNCTION_PIPE9:
852 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
853 DEVDRV_USBF_PID_STALL,
854 USB_PIPEnCTR_9_PID_SHIFT,
855 USB_PIPEnCTR_9_PID);
856 break;
857
858 case USB_FUNCTION_PIPEA:
859 RZA_IO_RegWrite_16(&USB200.PIPEACTR,
860 DEVDRV_USBF_PID_STALL,
861 USB_PIPEnCTR_A_F_PID_SHIFT,
862 USB_PIPEnCTR_A_F_PID);
863 break;
864
865 case USB_FUNCTION_PIPEB:
866 RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
867 DEVDRV_USBF_PID_STALL,
868 USB_PIPEnCTR_A_F_PID_SHIFT,
869 USB_PIPEnCTR_A_F_PID);
870 break;
871
872 case USB_FUNCTION_PIPEC:
873 RZA_IO_RegWrite_16(&USB200.PIPECCTR,
874 DEVDRV_USBF_PID_STALL,
875 USB_PIPEnCTR_A_F_PID_SHIFT,
876 USB_PIPEnCTR_A_F_PID);
877 break;
878
879 case USB_FUNCTION_PIPED:
880 RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
881 DEVDRV_USBF_PID_STALL,
882 USB_PIPEnCTR_A_F_PID_SHIFT,
883 USB_PIPEnCTR_A_F_PID);
884 break;
885
886 case USB_FUNCTION_PIPEE:
887 RZA_IO_RegWrite_16(&USB200.PIPEECTR,
888 DEVDRV_USBF_PID_STALL,
889 USB_PIPEnCTR_A_F_PID_SHIFT,
890 USB_PIPEnCTR_A_F_PID);
891 break;
892
893 case USB_FUNCTION_PIPEF:
894 RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
895 DEVDRV_USBF_PID_STALL,
896 USB_PIPEnCTR_A_F_PID_SHIFT,
897 USB_PIPEnCTR_A_F_PID);
898 break;
899
900 default:
901 break;
902 }
903 }
904 }
905
906 /*******************************************************************************
907 * Function Name: usb0_function_clear_pid_stall
908 * Description : Disables communication (NAK) in the pipe specified by the argument.
909 * Arguments : uint16_t pipe ; pipe Number
910 * Return Value : none
911 *******************************************************************************/
912 void usb0_function_clear_pid_stall (uint16_t pipe)
913 {
914 usb0_function_set_pid_nak(pipe);
915 }
916
917 /*******************************************************************************
918 * Function Name: usb0_function_get_pid
919 * Description : Returns the pipe state specified by the argument.
920 * Arguments : uint16_t pipe ; Pipe Number
921 * Return Value : PID
922 *******************************************************************************/
923 uint16_t usb0_function_get_pid (uint16_t pipe)
924 {
925 uint16_t pid;
926
927 switch (pipe)
928 {
929 case USB_FUNCTION_PIPE0:
930 pid = RZA_IO_RegRead_16(&USB200.DCPCTR,
931 USB_DCPCTR_PID_SHIFT,
932 USB_DCPCTR_PID);
933 break;
934
935 case USB_FUNCTION_PIPE1:
936 pid = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
937 USB_PIPEnCTR_1_5_PID_SHIFT,
938 USB_PIPEnCTR_1_5_PID);
939 break;
940
941 case USB_FUNCTION_PIPE2:
942 pid = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
943 USB_PIPEnCTR_1_5_PID_SHIFT,
944 USB_PIPEnCTR_1_5_PID);
945 break;
946
947 case USB_FUNCTION_PIPE3:
948 pid = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
949 USB_PIPEnCTR_1_5_PID_SHIFT,
950 USB_PIPEnCTR_1_5_PID);
951 break;
952
953 case USB_FUNCTION_PIPE4:
954 pid = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
955 USB_PIPEnCTR_1_5_PID_SHIFT,
956 USB_PIPEnCTR_1_5_PID);
957 break;
958
959 case USB_FUNCTION_PIPE5:
960 pid = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
961 USB_PIPEnCTR_1_5_PID_SHIFT,
962 USB_PIPEnCTR_1_5_PID);
963 break;
964
965 case USB_FUNCTION_PIPE6:
966 pid = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
967 USB_PIPEnCTR_6_8_PID_SHIFT,
968 USB_PIPEnCTR_6_8_PID);
969 break;
970
971 case USB_FUNCTION_PIPE7:
972 pid = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
973 USB_PIPEnCTR_6_8_PID_SHIFT,
974 USB_PIPEnCTR_6_8_PID);
975 break;
976
977 case USB_FUNCTION_PIPE8:
978 pid = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
979 USB_PIPEnCTR_6_8_PID_SHIFT,
980 USB_PIPEnCTR_6_8_PID);
981 break;
982
983 case USB_FUNCTION_PIPE9:
984 pid = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
985 USB_PIPEnCTR_9_PID_SHIFT,
986 USB_PIPEnCTR_9_PID);
987 break;
988
989 case USB_FUNCTION_PIPEA:
990 pid = RZA_IO_RegRead_16(&USB200.PIPEACTR,
991 USB_PIPEnCTR_A_F_PID_SHIFT,
992 USB_PIPEnCTR_A_F_PID);
993 break;
994
995 case USB_FUNCTION_PIPEB:
996 pid = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
997 USB_PIPEnCTR_A_F_PID_SHIFT,
998 USB_PIPEnCTR_A_F_PID);
999 break;
1000
1001 case USB_FUNCTION_PIPEC:
1002 pid = RZA_IO_RegRead_16(&USB200.PIPECCTR,
1003 USB_PIPEnCTR_A_F_PID_SHIFT,
1004 USB_PIPEnCTR_A_F_PID);
1005 break;
1006
1007 case USB_FUNCTION_PIPED:
1008 pid = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
1009 USB_PIPEnCTR_A_F_PID_SHIFT,
1010 USB_PIPEnCTR_A_F_PID);
1011 break;
1012
1013 case USB_FUNCTION_PIPEE:
1014 pid = RZA_IO_RegRead_16(&USB200.PIPEECTR,
1015 USB_PIPEnCTR_A_F_PID_SHIFT,
1016 USB_PIPEnCTR_A_F_PID);
1017 break;
1018
1019 case USB_FUNCTION_PIPEF:
1020 pid = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
1021 USB_PIPEnCTR_A_F_PID_SHIFT,
1022 USB_PIPEnCTR_A_F_PID);
1023 break;
1024
1025 default:
1026 pid = 0;
1027 break;
1028 }
1029
1030 return pid;
1031 }
1032
1033 /*******************************************************************************
1034 * Function Name: usb0_function_set_csclr
1035 * Description : CSPLIT status clear setting of sprit transaction in specified
1036 * : pipe is performed.
1037 * : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
1038 * : in DCPCTR register are continuously changed (when the sequence
1039 * : toggle bit of data PID is continuously changed over two or more pipes),
1040 * : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
1041 * : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
1042 * : In addition, both bits should be operated after PID is set to NAK.
1043 * : However, when it is set to the isochronous transfer as the transfer type
1044 * : (TYPE=11), writing in SQSET bit is disabled.
1045 * Arguments : uint16_t pipe ; Pipe number
1046 * Return Value : none
1047 *******************************************************************************/
1048 void usb0_function_set_csclr (uint16_t pipe)
1049 {
1050 switch (pipe)
1051 {
1052 case USB_FUNCTION_PIPE0:
1053 RZA_IO_RegWrite_16(&USB200.DCPCTR,
1054 1,
1055 USB_DCPCTR_CSCLR_SHIFT,
1056 USB_DCPCTR_CSCLR);
1057 break;
1058
1059 case USB_FUNCTION_PIPE1:
1060 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
1061 1,
1062 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
1063 USB_PIPEnCTR_1_5_CSCLR);
1064 break;
1065
1066 case USB_FUNCTION_PIPE2:
1067 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
1068 1,
1069 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
1070 USB_PIPEnCTR_1_5_CSCLR);
1071 break;
1072
1073 case USB_FUNCTION_PIPE3:
1074 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
1075 1,
1076 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
1077 USB_PIPEnCTR_1_5_CSCLR);
1078 break;
1079
1080 case USB_FUNCTION_PIPE4:
1081 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
1082 1,
1083 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
1084 USB_PIPEnCTR_1_5_CSCLR);
1085 break;
1086
1087 case USB_FUNCTION_PIPE5:
1088 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
1089 1,
1090 USB_PIPEnCTR_1_5_CSCLR_SHIFT,
1091 USB_PIPEnCTR_1_5_CSCLR);
1092 break;
1093
1094 case USB_FUNCTION_PIPE6:
1095 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
1096 1,
1097 USB_PIPEnCTR_6_8_CSCLR_SHIFT,
1098 USB_PIPEnCTR_6_8_CSCLR);
1099 break;
1100
1101 case USB_FUNCTION_PIPE7:
1102 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
1103 1,
1104 USB_PIPEnCTR_6_8_CSCLR_SHIFT,
1105 USB_PIPEnCTR_6_8_CSCLR);
1106 break;
1107
1108 case USB_FUNCTION_PIPE8:
1109 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
1110 1,
1111 USB_PIPEnCTR_6_8_CSCLR_SHIFT,
1112 USB_PIPEnCTR_6_8_CSCLR);
1113 break;
1114
1115 case USB_FUNCTION_PIPE9:
1116 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
1117 1,
1118 USB_PIPEnCTR_9_CSCLR_SHIFT,
1119 USB_PIPEnCTR_9_CSCLR);
1120 break;
1121
1122 default:
1123 /* PIPEA-F have not CSCLR */
1124 break;
1125 }
1126 }
1127
1128 /*******************************************************************************
1129 * Function Name: usb0_function_set_sqclr
1130 * Description : Sets the sequence bit of the pipe specified by the argument to
1131 * : DATA0.
1132 * Arguments : uint16_t pipe ; Pipe Number
1133 * Return Value : none
1134 *******************************************************************************/
1135 void usb0_function_set_sqclr (uint16_t pipe)
1136 {
1137 switch (pipe)
1138 {
1139 case USB_FUNCTION_PIPE0:
1140 RZA_IO_RegWrite_16(&USB200.DCPCTR,
1141 1,
1142 USB_DCPCTR_SQCLR_SHIFT,
1143 USB_DCPCTR_SQCLR);
1144 break;
1145
1146 case USB_FUNCTION_PIPE1:
1147 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
1148 1,
1149 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
1150 USB_PIPEnCTR_1_5_SQCLR);
1151 break;
1152
1153 case USB_FUNCTION_PIPE2:
1154 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
1155 1,
1156 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
1157 USB_PIPEnCTR_1_5_SQCLR);
1158 break;
1159
1160 case USB_FUNCTION_PIPE3:
1161 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
1162 1,
1163 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
1164 USB_PIPEnCTR_1_5_SQCLR);
1165 break;
1166
1167 case USB_FUNCTION_PIPE4:
1168 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
1169 1,
1170 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
1171 USB_PIPEnCTR_1_5_SQCLR);
1172 break;
1173
1174 case USB_FUNCTION_PIPE5:
1175 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
1176 1,
1177 USB_PIPEnCTR_1_5_SQCLR_SHIFT,
1178 USB_PIPEnCTR_1_5_SQCLR);
1179 break;
1180
1181 case USB_FUNCTION_PIPE6:
1182 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
1183 1,
1184 USB_PIPEnCTR_6_8_SQCLR_SHIFT,
1185 USB_PIPEnCTR_6_8_SQCLR);
1186 break;
1187
1188 case USB_FUNCTION_PIPE7:
1189 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
1190 1,
1191 USB_PIPEnCTR_6_8_SQCLR_SHIFT,
1192 USB_PIPEnCTR_6_8_SQCLR);
1193 break;
1194
1195 case USB_FUNCTION_PIPE8:
1196 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
1197 1,
1198 USB_PIPEnCTR_6_8_SQCLR_SHIFT,
1199 USB_PIPEnCTR_6_8_SQCLR);
1200 break;
1201
1202 case USB_FUNCTION_PIPE9:
1203 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
1204 1,
1205 USB_PIPEnCTR_9_SQCLR_SHIFT,
1206 USB_PIPEnCTR_9_SQCLR);
1207 break;
1208
1209 case USB_FUNCTION_PIPEA:
1210 RZA_IO_RegWrite_16(&USB200.PIPEACTR,
1211 1,
1212 USB_PIPEnCTR_A_F_SQCLR_SHIFT,
1213 USB_PIPEnCTR_A_F_SQCLR);
1214 break;
1215
1216 case USB_FUNCTION_PIPEB:
1217 RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
1218 1,
1219 USB_PIPEnCTR_A_F_SQCLR_SHIFT,
1220 USB_PIPEnCTR_A_F_SQCLR);
1221 break;
1222
1223 case USB_FUNCTION_PIPEC:
1224 RZA_IO_RegWrite_16(&USB200.PIPECCTR,
1225 1,
1226 USB_PIPEnCTR_A_F_SQCLR_SHIFT,
1227 USB_PIPEnCTR_A_F_SQCLR);
1228 break;
1229
1230 case USB_FUNCTION_PIPED:
1231 RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
1232 1,
1233 USB_PIPEnCTR_A_F_SQCLR_SHIFT,
1234 USB_PIPEnCTR_A_F_SQCLR);
1235 break;
1236
1237 case USB_FUNCTION_PIPEE:
1238 RZA_IO_RegWrite_16(&USB200.PIPEECTR,
1239 1,
1240 USB_PIPEnCTR_A_F_SQCLR_SHIFT,
1241 USB_PIPEnCTR_A_F_SQCLR);
1242 break;
1243
1244 case USB_FUNCTION_PIPEF:
1245 RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
1246 1,
1247 USB_PIPEnCTR_A_F_SQCLR_SHIFT,
1248 USB_PIPEnCTR_A_F_SQCLR);
1249 break;
1250
1251 default:
1252 break;
1253 }
1254 }
1255
1256 /*******************************************************************************
1257 * Function Name: usb0_function_set_sqset
1258 * Description : Sets the sequence bit of the pipe specified by the argument to
1259 * : DATA1.
1260 * Arguments : uint16_t pipe ; Pipe number
1261 * Return Value : none
1262 *******************************************************************************/
1263 void usb0_function_set_sqset (uint16_t pipe)
1264 {
1265 switch (pipe)
1266 {
1267 case USB_FUNCTION_PIPE0:
1268 RZA_IO_RegWrite_16(&USB200.DCPCTR,
1269 1,
1270 USB_DCPCTR_SQSET_SHIFT,
1271 USB_DCPCTR_SQSET);
1272 break;
1273
1274 case USB_FUNCTION_PIPE1:
1275 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
1276 1,
1277 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1278 USB_PIPEnCTR_1_5_SQSET);
1279 break;
1280
1281 case USB_FUNCTION_PIPE2:
1282 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
1283 1,
1284 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1285 USB_PIPEnCTR_1_5_SQSET);
1286 break;
1287
1288 case USB_FUNCTION_PIPE3:
1289 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
1290 1,
1291 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1292 USB_PIPEnCTR_1_5_SQSET);
1293 break;
1294
1295 case USB_FUNCTION_PIPE4:
1296 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
1297 1,
1298 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1299 USB_PIPEnCTR_1_5_SQSET);
1300 break;
1301
1302 case USB_FUNCTION_PIPE5:
1303 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
1304 1,
1305 USB_PIPEnCTR_1_5_SQSET_SHIFT,
1306 USB_PIPEnCTR_1_5_SQSET);
1307 break;
1308
1309 case USB_FUNCTION_PIPE6:
1310 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
1311 1,
1312 USB_PIPEnCTR_6_8_SQSET_SHIFT,
1313 USB_PIPEnCTR_6_8_SQSET);
1314 break;
1315
1316 case USB_FUNCTION_PIPE7:
1317 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
1318 1,
1319 USB_PIPEnCTR_6_8_SQSET_SHIFT,
1320 USB_PIPEnCTR_6_8_SQSET);
1321 break;
1322
1323 case USB_FUNCTION_PIPE8:
1324 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
1325 1,
1326 USB_PIPEnCTR_6_8_SQSET_SHIFT,
1327 USB_PIPEnCTR_6_8_SQSET);
1328 break;
1329
1330 case USB_FUNCTION_PIPE9:
1331 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
1332 1,
1333 USB_PIPEnCTR_9_SQSET_SHIFT,
1334 USB_PIPEnCTR_9_SQSET);
1335 break;
1336
1337 case USB_FUNCTION_PIPEA:
1338 RZA_IO_RegWrite_16(&USB200.PIPEACTR,
1339 1,
1340 USB_PIPEnCTR_A_F_SQSET_SHIFT,
1341 USB_PIPEnCTR_A_F_SQSET);
1342 break;
1343
1344 case USB_FUNCTION_PIPEB:
1345 RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
1346 1,
1347 USB_PIPEnCTR_A_F_SQSET_SHIFT,
1348 USB_PIPEnCTR_A_F_SQSET);
1349 break;
1350
1351 case USB_FUNCTION_PIPEC:
1352 RZA_IO_RegWrite_16(&USB200.PIPECCTR,
1353 1,
1354 USB_PIPEnCTR_A_F_SQSET_SHIFT,
1355 USB_PIPEnCTR_A_F_SQSET);
1356 break;
1357
1358 case USB_FUNCTION_PIPED:
1359 RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
1360 1,
1361 USB_PIPEnCTR_A_F_SQSET_SHIFT,
1362 USB_PIPEnCTR_A_F_SQSET);
1363 break;
1364
1365 case USB_FUNCTION_PIPEE:
1366 RZA_IO_RegWrite_16(&USB200.PIPEECTR,
1367 1,
1368 USB_PIPEnCTR_A_F_SQSET_SHIFT,
1369 USB_PIPEnCTR_A_F_SQSET);
1370 break;
1371
1372 case USB_FUNCTION_PIPEF:
1373 RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
1374 1,
1375 USB_PIPEnCTR_A_F_SQSET_SHIFT,
1376 USB_PIPEnCTR_A_F_SQSET);
1377 break;
1378
1379 default:
1380 break;
1381 }
1382 }
1383
1384 /*******************************************************************************
1385 * Function Name: usb0_function_get_sqmon
1386 * Description : Toggle bit of specified pipe is obtained
1387 * Arguments : uint16_t pipe ; Pipe number
1388 * Return Value : sqmon
1389 *******************************************************************************/
1390 uint16_t usb0_function_get_sqmon (uint16_t pipe)
1391 {
1392 uint16_t sqmon;
1393
1394 switch (pipe)
1395 {
1396 case USB_FUNCTION_PIPE0:
1397 sqmon = RZA_IO_RegRead_16(&USB200.DCPCTR,
1398 USB_DCPCTR_SQMON_SHIFT,
1399 USB_DCPCTR_SQMON);
1400 break;
1401
1402 case USB_FUNCTION_PIPE1:
1403 sqmon = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
1404 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1405 USB_PIPEnCTR_1_5_SQMON);
1406 break;
1407
1408 case USB_FUNCTION_PIPE2:
1409 sqmon = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
1410 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1411 USB_PIPEnCTR_1_5_SQMON);
1412 break;
1413
1414 case USB_FUNCTION_PIPE3:
1415 sqmon = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
1416 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1417 USB_PIPEnCTR_1_5_SQMON);
1418 break;
1419
1420 case USB_FUNCTION_PIPE4:
1421 sqmon = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
1422 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1423 USB_PIPEnCTR_1_5_SQMON);
1424 break;
1425
1426 case USB_FUNCTION_PIPE5:
1427 sqmon = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
1428 USB_PIPEnCTR_1_5_SQMON_SHIFT,
1429 USB_PIPEnCTR_1_5_SQMON);
1430 break;
1431
1432 case USB_FUNCTION_PIPE6:
1433 sqmon = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
1434 USB_PIPEnCTR_6_8_SQMON_SHIFT,
1435 USB_PIPEnCTR_6_8_SQMON);
1436 break;
1437
1438 case USB_FUNCTION_PIPE7:
1439 sqmon = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
1440 USB_PIPEnCTR_6_8_SQMON_SHIFT,
1441 USB_PIPEnCTR_6_8_SQMON);
1442 break;
1443
1444 case USB_FUNCTION_PIPE8:
1445 sqmon = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
1446 USB_PIPEnCTR_6_8_SQMON_SHIFT,
1447 USB_PIPEnCTR_6_8_SQMON);
1448 break;
1449
1450 case USB_FUNCTION_PIPE9:
1451 sqmon = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
1452 USB_PIPEnCTR_9_SQMON_SHIFT,
1453 USB_PIPEnCTR_9_SQMON);
1454 break;
1455
1456 case USB_FUNCTION_PIPEA:
1457 sqmon = RZA_IO_RegRead_16(&USB200.PIPEACTR,
1458 USB_PIPEnCTR_A_F_SQMON_SHIFT,
1459 USB_PIPEnCTR_A_F_SQMON);
1460 break;
1461
1462 case USB_FUNCTION_PIPEB:
1463 sqmon = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
1464 USB_PIPEnCTR_A_F_SQMON_SHIFT,
1465 USB_PIPEnCTR_A_F_SQMON);
1466 break;
1467
1468 case USB_FUNCTION_PIPEC:
1469 sqmon = RZA_IO_RegRead_16(&USB200.PIPECCTR,
1470 USB_PIPEnCTR_A_F_SQMON_SHIFT,
1471 USB_PIPEnCTR_A_F_SQMON);
1472 break;
1473
1474 case USB_FUNCTION_PIPED:
1475 sqmon = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
1476 USB_PIPEnCTR_A_F_SQMON_SHIFT,
1477 USB_PIPEnCTR_A_F_SQMON);
1478 break;
1479
1480 case USB_FUNCTION_PIPEE:
1481 sqmon = RZA_IO_RegRead_16(&USB200.PIPEECTR,
1482 USB_PIPEnCTR_A_F_SQMON_SHIFT,
1483 USB_PIPEnCTR_A_F_SQMON);
1484 break;
1485
1486 case USB_FUNCTION_PIPEF:
1487 sqmon = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
1488 USB_PIPEnCTR_A_F_SQMON_SHIFT,
1489 USB_PIPEnCTR_A_F_SQMON);
1490 break;
1491
1492 default:
1493 sqmon = 0;
1494 break;
1495 }
1496
1497 return sqmon;
1498 }
1499
1500 /*******************************************************************************
1501 * Function Name: usb0_function_aclrm
1502 * Description : The buffer of specified pipe is initialized
1503 * Arguments : uint16_t pipe : Pipe
1504 * Return Value : none
1505 *******************************************************************************/
1506 void usb0_function_aclrm (uint16_t pipe)
1507 {
1508 usb0_function_set_aclrm(pipe);
1509 usb0_function_clr_aclrm(pipe);
1510 }
1511
1512 /*******************************************************************************
1513 * Function Name: usb0_function_set_aclrm
1514 * Description : The auto buffer clear mode of specified pipe is enabled
1515 * Arguments : uint16_t pipe : Pipe
1516 * Return Value : none
1517 *******************************************************************************/
1518 void usb0_function_set_aclrm (uint16_t pipe)
1519 {
1520 switch (pipe)
1521 {
1522 case USB_FUNCTION_PIPE0:
1523 break;
1524
1525 case USB_FUNCTION_PIPE1:
1526 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
1527 1,
1528 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1529 USB_PIPEnCTR_1_5_ACLRM);
1530 break;
1531
1532 case USB_FUNCTION_PIPE2:
1533 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
1534 1,
1535 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1536 USB_PIPEnCTR_1_5_ACLRM);
1537 break;
1538
1539 case USB_FUNCTION_PIPE3:
1540 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
1541 1,
1542 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1543 USB_PIPEnCTR_1_5_ACLRM);
1544 break;
1545
1546 case USB_FUNCTION_PIPE4:
1547 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
1548 1,
1549 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1550 USB_PIPEnCTR_1_5_ACLRM);
1551 break;
1552
1553 case USB_FUNCTION_PIPE5:
1554 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
1555 1,
1556 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1557 USB_PIPEnCTR_1_5_ACLRM);
1558 break;
1559
1560 case USB_FUNCTION_PIPE6:
1561 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
1562 1,
1563 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1564 USB_PIPEnCTR_6_8_ACLRM);
1565 break;
1566
1567 case USB_FUNCTION_PIPE7:
1568 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
1569 1,
1570 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1571 USB_PIPEnCTR_6_8_ACLRM);
1572 break;
1573
1574 case USB_FUNCTION_PIPE8:
1575 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
1576 1,
1577 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1578 USB_PIPEnCTR_6_8_ACLRM);
1579 break;
1580
1581 case USB_FUNCTION_PIPE9:
1582 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
1583 1,
1584 USB_PIPEnCTR_9_ACLRM_SHIFT,
1585 USB_PIPEnCTR_9_ACLRM);
1586 break;
1587
1588 case USB_FUNCTION_PIPEA:
1589 RZA_IO_RegWrite_16(&USB200.PIPEACTR,
1590 1,
1591 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1592 USB_PIPEnCTR_A_F_ACLRM);
1593 break;
1594
1595 case USB_FUNCTION_PIPEB:
1596 RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
1597 1,
1598 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1599 USB_PIPEnCTR_A_F_ACLRM);
1600 break;
1601
1602 case USB_FUNCTION_PIPEC:
1603 RZA_IO_RegWrite_16(&USB200.PIPECCTR,
1604 1,
1605 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1606 USB_PIPEnCTR_A_F_ACLRM);
1607 break;
1608
1609 case USB_FUNCTION_PIPED:
1610 RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
1611 1,
1612 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1613 USB_PIPEnCTR_A_F_ACLRM);
1614 break;
1615
1616 case USB_FUNCTION_PIPEE:
1617 RZA_IO_RegWrite_16(&USB200.PIPEECTR,
1618 1,
1619 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1620 USB_PIPEnCTR_A_F_ACLRM);
1621 break;
1622
1623 case USB_FUNCTION_PIPEF:
1624 RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
1625 1,
1626 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1627 USB_PIPEnCTR_A_F_ACLRM);
1628 break;
1629
1630 default:
1631 break;
1632 }
1633 }
1634
1635 /*******************************************************************************
1636 * Function Name: usb0_function_clr_aclrm
1637 * Description : The auto buffer clear mode of specified pipe is enabled
1638 * Arguments : uint16_t pipe : Pipe
1639 * Return Value : none
1640 *******************************************************************************/
1641 void usb0_function_clr_aclrm (uint16_t pipe)
1642 {
1643 switch (pipe)
1644 {
1645 case USB_FUNCTION_PIPE0:
1646 break;
1647
1648 case USB_FUNCTION_PIPE1:
1649 RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
1650 0,
1651 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1652 USB_PIPEnCTR_1_5_ACLRM);
1653 break;
1654
1655 case USB_FUNCTION_PIPE2:
1656 RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
1657 0,
1658 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1659 USB_PIPEnCTR_1_5_ACLRM);
1660 break;
1661
1662 case USB_FUNCTION_PIPE3:
1663 RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
1664 0,
1665 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1666 USB_PIPEnCTR_1_5_ACLRM);
1667 break;
1668
1669 case USB_FUNCTION_PIPE4:
1670 RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
1671 0,
1672 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1673 USB_PIPEnCTR_1_5_ACLRM);
1674 break;
1675
1676 case USB_FUNCTION_PIPE5:
1677 RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
1678 0,
1679 USB_PIPEnCTR_1_5_ACLRM_SHIFT,
1680 USB_PIPEnCTR_1_5_ACLRM);
1681 break;
1682
1683 case USB_FUNCTION_PIPE6:
1684 RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
1685 0,
1686 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1687 USB_PIPEnCTR_6_8_ACLRM);
1688 break;
1689
1690 case USB_FUNCTION_PIPE7:
1691 RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
1692 0,
1693 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1694 USB_PIPEnCTR_6_8_ACLRM);
1695 break;
1696
1697 case USB_FUNCTION_PIPE8:
1698 RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
1699 0,
1700 USB_PIPEnCTR_6_8_ACLRM_SHIFT,
1701 USB_PIPEnCTR_6_8_ACLRM);
1702 break;
1703
1704 case USB_FUNCTION_PIPE9:
1705 RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
1706 0,
1707 USB_PIPEnCTR_9_ACLRM_SHIFT,
1708 USB_PIPEnCTR_9_ACLRM);
1709 break;
1710
1711 case USB_FUNCTION_PIPEA:
1712 RZA_IO_RegWrite_16(&USB200.PIPEACTR,
1713 0,
1714 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1715 USB_PIPEnCTR_A_F_ACLRM);
1716 break;
1717
1718 case USB_FUNCTION_PIPEB:
1719 RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
1720 0,
1721 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1722 USB_PIPEnCTR_A_F_ACLRM);
1723 break;
1724
1725 case USB_FUNCTION_PIPEC:
1726 RZA_IO_RegWrite_16(&USB200.PIPECCTR,
1727 0,
1728 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1729 USB_PIPEnCTR_A_F_ACLRM);
1730 break;
1731
1732 case USB_FUNCTION_PIPED:
1733 RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
1734 0,
1735 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1736 USB_PIPEnCTR_A_F_ACLRM);
1737 break;
1738
1739 case USB_FUNCTION_PIPEE:
1740 RZA_IO_RegWrite_16(&USB200.PIPEECTR,
1741 0,
1742 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1743 USB_PIPEnCTR_A_F_ACLRM);
1744 break;
1745
1746 case USB_FUNCTION_PIPEF:
1747 RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
1748 0,
1749 USB_PIPEnCTR_A_F_ACLRM_SHIFT,
1750 USB_PIPEnCTR_A_F_ACLRM);
1751 break;
1752
1753 default:
1754 break;
1755 }
1756 }
1757
1758 /*******************************************************************************
1759 * Function Name: usb0_function_get_inbuf
1760 * Description : Returns INBUFM of the pipe specified by the argument.
1761 * Arguments : uint16_t pipe ; Pipe Number
1762 * Return Value : inbuf
1763 *******************************************************************************/
1764 uint16_t usb0_function_get_inbuf (uint16_t pipe)
1765 {
1766 uint16_t inbuf;
1767
1768 switch (pipe)
1769 {
1770 case USB_FUNCTION_PIPE0:
1771 inbuf = 0;
1772 break;
1773
1774 case USB_FUNCTION_PIPE1:
1775 inbuf = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
1776 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1777 USB_PIPEnCTR_1_5_INBUFM);
1778 break;
1779
1780 case USB_FUNCTION_PIPE2:
1781 inbuf = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
1782 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1783 USB_PIPEnCTR_1_5_INBUFM);
1784 break;
1785
1786 case USB_FUNCTION_PIPE3:
1787 inbuf = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
1788 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1789 USB_PIPEnCTR_1_5_INBUFM);
1790 break;
1791
1792 case USB_FUNCTION_PIPE4:
1793 inbuf = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
1794 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1795 USB_PIPEnCTR_1_5_INBUFM);
1796 break;
1797
1798 case USB_FUNCTION_PIPE5:
1799 inbuf = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
1800 USB_PIPEnCTR_1_5_INBUFM_SHIFT,
1801 USB_PIPEnCTR_1_5_INBUFM);
1802 break;
1803
1804 case USB_FUNCTION_PIPE6:
1805 inbuf = 0;
1806 break;
1807
1808 case USB_FUNCTION_PIPE7:
1809 inbuf = 0;
1810 break;
1811
1812 case USB_FUNCTION_PIPE8:
1813 inbuf = 0;
1814 break;
1815
1816 case USB_FUNCTION_PIPE9:
1817 inbuf = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
1818 USB_PIPEnCTR_9_INBUFM_SHIFT,
1819 USB_PIPEnCTR_9_INBUFM);
1820 break;
1821
1822 case USB_FUNCTION_PIPEA:
1823 inbuf = RZA_IO_RegRead_16(&USB200.PIPEACTR,
1824 USB_PIPEnCTR_A_F_INBUFM_SHIFT,
1825 USB_PIPEnCTR_A_F_INBUFM);
1826 break;
1827
1828 case USB_FUNCTION_PIPEB:
1829 inbuf = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
1830 USB_PIPEnCTR_A_F_INBUFM_SHIFT,
1831 USB_PIPEnCTR_A_F_INBUFM);
1832 break;
1833
1834 case USB_FUNCTION_PIPEC:
1835 inbuf = RZA_IO_RegRead_16(&USB200.PIPECCTR,
1836 USB_PIPEnCTR_A_F_INBUFM_SHIFT,
1837 USB_PIPEnCTR_A_F_INBUFM);
1838 break;
1839
1840 case USB_FUNCTION_PIPED:
1841 inbuf = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
1842 USB_PIPEnCTR_A_F_INBUFM_SHIFT,
1843 USB_PIPEnCTR_A_F_INBUFM);
1844 break;
1845
1846 case USB_FUNCTION_PIPEE:
1847 inbuf = RZA_IO_RegRead_16(&USB200.PIPEECTR,
1848 USB_PIPEnCTR_A_F_INBUFM_SHIFT,
1849 USB_PIPEnCTR_A_F_INBUFM);
1850 break;
1851
1852 case USB_FUNCTION_PIPEF:
1853 inbuf = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
1854 USB_PIPEnCTR_A_F_INBUFM_SHIFT,
1855 USB_PIPEnCTR_A_F_INBUFM);
1856 break;
1857
1858 default:
1859 inbuf = 0;
1860 break;
1861 }
1862
1863 return inbuf;
1864 }
1865
1866 /*******************************************************************************
1867 * Function Name: usb0_function_setting_interrupt
1868 * Description : Sets the USB module interrupt level.
1869 * Arguments : uint8_t level ;interrupt level
1870 * Return Value : none
1871 *******************************************************************************/
1872 #if 0
1873 void usb0_function_setting_interrupt (uint8_t level)
1874 {
1875 uint16_t d0fifo_dmaintid;
1876 uint16_t d1fifo_dmaintid;
1877
1878 R_INTC_RegistIntFunc(INTC_ID_USBI0, usb0_function_interrupt);
1879 R_INTC_SetPriority(INTC_ID_USBI0, level);
1880 R_INTC_Enable(INTC_ID_USBI0);
1881
1882 d0fifo_dmaintid = Userdef_USB_usb0_function_d0fifo_dmaintid();
1883
1884 if (d0fifo_dmaintid != 0xFFFF)
1885 {
1886 R_INTC_RegistIntFunc(d0fifo_dmaintid, usb0_function_dma_interrupt_d0fifo);
1887 R_INTC_SetPriority(d0fifo_dmaintid, level);
1888 R_INTC_Enable(d0fifo_dmaintid);
1889 }
1890
1891 d1fifo_dmaintid = Userdef_USB_usb0_function_d1fifo_dmaintid();
1892
1893 if (d1fifo_dmaintid != 0xFFFF)
1894 {
1895 R_INTC_RegistIntFunc(d1fifo_dmaintid, usb0_function_dma_interrupt_d1fifo);
1896 R_INTC_SetPriority(d1fifo_dmaintid, level);
1897 R_INTC_Enable(d1fifo_dmaintid);
1898 }
1899 }
1900 #endif
1901
1902 /*******************************************************************************
1903 * Function Name: usb0_function_reset_module
1904 * Description : Initializes the USB module.
1905 * : Enables providing clock to the USB module.
1906 * : Sets USB bus wait register.
1907 * Arguments : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
1908 * : ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
1909 * Return Value : none
1910 *******************************************************************************/
1911 void usb0_function_reset_module (uint16_t clockmode)
1912 {
1913 /* UPLLE bit is only USB0 */
1914 if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
1915 USB_SYSCFG_UPLLE_SHIFT,
1916 USB_SYSCFG_UPLLE) == 1)
1917 {
1918 if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
1919 {
1920 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1921 0,
1922 USB_SUSPMODE_SUSPM_SHIFT,
1923 USB_SUSPMODE_SUSPM);
1924 USB200.SYSCFG0 = 0;
1925 USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
1926 Userdef_USB_usb0_function_delay_xms(1);
1927 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1928 1,
1929 USB_SUSPMODE_SUSPM_SHIFT,
1930 USB_SUSPMODE_SUSPM);
1931 }
1932 else
1933 {
1934 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1935 0,
1936 USB_SUSPMODE_SUSPM_SHIFT,
1937 USB_SUSPMODE_SUSPM);
1938 Userdef_USB_usb0_function_delay_xms(1);
1939 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1940 1,
1941 USB_SUSPMODE_SUSPM_SHIFT,
1942 USB_SUSPMODE_SUSPM);
1943 }
1944 }
1945 else
1946 {
1947 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1948 0,
1949 USB_SUSPMODE_SUSPM_SHIFT,
1950 USB_SUSPMODE_SUSPM);
1951 USB200.SYSCFG0 = 0;
1952 USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
1953 Userdef_USB_usb0_function_delay_xms(1);
1954 RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1955 1,
1956 USB_SUSPMODE_SUSPM_SHIFT,
1957 USB_SUSPMODE_SUSPM);
1958 }
1959
1960 USB200.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
1961 }
1962
1963 /*******************************************************************************
1964 * Function Name: usb0_function_get_buf_size
1965 * Description : Obtains pipe buffer size specified by the argument and
1966 * : maximum packet size of the USB device in use.
1967 * : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
1968 * : packet size of the USB device using the corresponding pipe.
1969 * : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
1970 * : corresponding pipe is in continuous transfer mode,
1971 * : obtains the buffer size allocated in the corresponcing pipe,
1972 * : when incontinuous transfer, obtains maximum packet size.
1973 * Arguments : uint16_t pipe ; Pipe Number
1974 * Return Value : Maximum packet size or buffer size
1975 *******************************************************************************/
1976 uint16_t usb0_function_get_buf_size (uint16_t pipe)
1977 {
1978 uint16_t size;
1979 uint16_t bufsize;
1980
1981 if (pipe == USB_FUNCTION_PIPE0)
1982 {
1983 size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
1984 USB_DCPMAXP_MXPS_SHIFT,
1985 USB_DCPMAXP_MXPS);
1986 }
1987 else
1988 {
1989 if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
1990 {
1991 bufsize = RZA_IO_RegRead_16(&g_usb0_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
1992 size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
1993 }
1994 else
1995 {
1996 size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
1997 }
1998 }
1999 return size;
2000 }
2001
2002 /*******************************************************************************
2003 * Function Name: usb0_function_get_mxps
2004 * Description : Obtains maximum packet size of the USB device using the pipe
2005 * : specified by the argument.
2006 * Arguments : uint16_t pipe ; Pipe Number
2007 * Return Value : Max Packet Size
2008 *******************************************************************************/
2009 uint16_t usb0_function_get_mxps (uint16_t pipe)
2010 {
2011 uint16_t size;
2012
2013 if (pipe == USB_FUNCTION_PIPE0)
2014 {
2015 size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
2016 USB_DCPMAXP_MXPS_SHIFT,
2017 USB_DCPMAXP_MXPS);
2018 }
2019 else
2020 {
2021 size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
2022 }
2023 return size;
2024 }
2025
2026 /* End of File */
Imprint / Impressum