]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/USBDevice/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / 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 */