USB device stack - Added support for the logo/windows key to USB keyboard.

Dependents:   randomSearch

Fork of USBDevice by mbed official

Revision:
46:378357d7e90d
Parent:
35:a8484e16c2f3
diff -r 0f216c4e75e5 -r 378357d7e90d USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_lib.c	Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,2026 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+* Copyright (C) 2012 - 2014 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+/*******************************************************************************
+* File Name    : usb0_function_lib.c
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Device(s)    : RZ/A1H
+* Tool-Chain   :
+* OS           : None
+* H/W Platform :
+* Description  : RZ/A1H R7S72100 USB Sample Program
+* Operation    :
+* Limitations  :
+*******************************************************************************/
+
+
+/*******************************************************************************
+Includes   <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "usb0_function.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_brdy_int
+* Description  : Enables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_enable_brdy_int (uint16_t pipe)
+{
+    /* enable brdy interrupt */
+    USB200.BRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_disable_brdy_int
+* Description  : Disables BRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BRDY. Enables BRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling BRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_disable_brdy_int (uint16_t pipe)
+{
+    /* disable brdy interrupt */
+    USB200.BRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_brdy_sts
+* Description  : Clear BRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_brdy_sts (uint16_t pipe)
+{
+    /* clear brdy status */
+    USB200.BRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_bemp_int
+* Description  : Enables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_enable_bemp_int (uint16_t pipe)
+{
+    /* enable bemp interrupt */
+    USB200.BEMPENB |= (uint16_t)g_usb0_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_disable_bemp_int
+* Description  : Disables BEMP interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : BEMP. Enables BEMP interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling BEMP, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe           ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_disable_bemp_int (uint16_t pipe)
+{
+    /* disable bemp interrupt */
+    USB200.BEMPENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_bemp_sts
+* Description  : Clear BEMP interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_bemp_sts (uint16_t pipe)
+{
+    /* clear bemp status */
+    USB200.BEMPSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_nrdy_int
+* Description  : Enables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before enabling
+*              : NRDY. Enables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After enabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_enable_nrdy_int (uint16_t pipe)
+{
+    /* enable nrdy interrupt */
+    USB200.NRDYENB |= (uint16_t)g_usb0_function_bit_set[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_disable_nrdy_int
+* Description  : Disables NRDY interrupt in the pipe spceified by the argument.
+*              : Disables BEMP/NRDY/BRDY interrupts in all pipes before disabling
+*              : NRDY. Disables NRDY interrupt in the pipe specified by the argument
+*              : in the disabled status. After disabling NRDY, recover all
+*              : BEMP/NRDY/BRDY disabled/enabled status.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_disable_nrdy_int (uint16_t pipe)
+{
+    /* disable nrdy interrupt */
+    USB200.NRDYENB &= (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_nrdy_sts
+* Description  : Clear NRDY interrupt status in the pipe spceified by the argument.
+* Arguments    : uint16_t pipe        ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_nrdy_sts (uint16_t pipe)
+{
+    /* clear nrdy status */
+    USB200.NRDYSTS = (uint16_t)~(g_usb0_function_bit_set[pipe]);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_is_hispeed
+* Description  : Returns the result of USB reset hand shake (RHST) as
+*              : return value.
+* Arguments    : none
+* Return Value : USB_FUNCTION_HIGH_SPEED    ; Hi-Speed
+*              : USB_FUNCTION_FULL_SPEED    ; Full-Speed
+*              : LOW_SPEED                  ; Low-Speed
+*              : USB_FUNCTION_NON_SPEED     ; error
+*******************************************************************************/
+uint16_t usb0_function_is_hispeed (void)
+{
+    uint16_t rhst;
+    uint16_t speed;
+
+    rhst = RZA_IO_RegRead_16(&USB200.DVSTCTR0, USB_DVSTCTR0_RHST_SHIFT, USB_DVSTCTR0_RHST);
+
+    if (rhst == USB_FUNCTION_HSMODE)
+    {
+        speed = USB_FUNCTION_HIGH_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_FSMODE)
+    {
+        speed = USB_FUNCTION_FULL_SPEED;
+    }
+    else if (rhst == USB_FUNCTION_LSMODE)
+    {
+        speed = USB_FUNCTION_LOW_SPEED;
+    }
+    else
+    {
+        speed = USB_FUNCTION_NON_SPEED;
+    }
+
+    return speed;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_is_hispeed_enable
+* Description  : Returns the USB High-Speed connection enabled status as
+*              : return value.
+* Arguments    : none
+* Return Value : DEVDRV_USBF_YES  : Hi-Speed Enable
+*              : DEVDRV_USBF_NO   : Hi-Speed Disable
+*******************************************************************************/
+uint16_t usb0_function_is_hispeed_enable (void)
+{
+    uint16_t ret;
+
+    ret = DEVDRV_USBF_NO;
+
+    if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
+    {
+        ret = DEVDRV_USBF_YES;
+    }
+
+    return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_pid_buf
+* Description  : Enables communicaqtion in the pipe specified by the argument
+*              : (BUF).
+* Arguments    : uint16_t pipe             ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_pid_buf (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb0_function_set_pid_nak(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                DEVDRV_USBF_PID_BUF,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_pid_nak
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+*              : When the pipe status was enabling communication (BUF) before
+*              : executing before executing this function, waits in the software
+*              : until the pipe becomes ready after setting disabled.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_pid_nak (uint16_t pipe)
+{
+    uint16_t pid;
+    uint16_t pbusy;
+    uint32_t loop;
+
+    pid = usb0_function_get_pid(pipe);
+
+    if (pid == DEVDRV_USBF_PID_STALL2)
+    {
+        usb0_function_set_pid_stall(pipe);
+    }
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_DCPCTR_PID_SHIFT,
+                                USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_1_5_PID_SHIFT,
+                                USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_6_8_PID_SHIFT,
+                                USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_9_PID_SHIFT,
+                                USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                DEVDRV_USBF_PID_NAK,
+                                USB_PIPEnCTR_A_F_PID_SHIFT,
+                                USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+        break;
+    }
+
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        for (loop = 0; loop < 200; loop++)
+        {
+            switch (pipe)
+            {
+                case USB_FUNCTION_PIPE0:
+                    pbusy = RZA_IO_RegRead_16(&USB200.DCPCTR,
+                                                USB_DCPCTR_PBUSY_SHIFT,
+                                                USB_DCPCTR_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE1:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE2:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE3:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE4:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE5:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                                USB_PIPEnCTR_1_5_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_1_5_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE6:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE7:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE8:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
+                                                USB_PIPEnCTR_6_8_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_6_8_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPE9:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                                USB_PIPEnCTR_9_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_9_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEA:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEB:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEC:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPED:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEE:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                case USB_FUNCTION_PIPEF:
+                    pbusy = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                                USB_PIPEnCTR_A_F_PBUSY_SHIFT,
+                                                USB_PIPEnCTR_A_F_PBUSY);
+                break;
+
+                default:
+                    pbusy   = 1;
+                break;
+            }
+
+            if (pbusy == 0)
+            {
+                break;
+            }
+            Userdef_USB_usb0_function_delay_500ns();
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_pid_stall
+* Description  : Disables communication (STALL) in the pipe specified by the
+*              : argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_pid_stall (uint16_t pipe)
+{
+    uint16_t pid;
+
+    pid = usb0_function_get_pid(pipe);
+    if (pid == DEVDRV_USBF_PID_BUF)
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL2,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+    else
+    {
+        switch (pipe)
+        {
+            case USB_FUNCTION_PIPE0:
+                RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+            break;
+
+            case USB_FUNCTION_PIPE1:
+                RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE2:
+                RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE3:
+                RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE4:
+                RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE5:
+                RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+            break;
+
+            case USB_FUNCTION_PIPE6:
+                RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE7:
+                RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE8:
+                RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+            break;
+
+            case USB_FUNCTION_PIPE9:
+                RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+            break;
+
+            case USB_FUNCTION_PIPEA:
+                RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEB:
+                RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEC:
+                RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPED:
+                RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEE:
+                RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            case USB_FUNCTION_PIPEF:
+                RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                    DEVDRV_USBF_PID_STALL,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+            break;
+
+            default:
+            break;
+        }
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_pid_stall
+* Description  : Disables communication (NAK) in the pipe specified by the argument.
+* Arguments    : uint16_t pipe            ; pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_pid_stall (uint16_t pipe)
+{
+    usb0_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_pid
+* Description  : Returns the pipe state specified by the argument.
+* Arguments    : uint16_t pipe          ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb0_function_get_pid (uint16_t pipe)
+{
+    uint16_t pid;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            pid = RZA_IO_RegRead_16(&USB200.DCPCTR,
+                                    USB_DCPCTR_PID_SHIFT,
+                                    USB_DCPCTR_PID);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_PID_SHIFT,
+                                    USB_PIPEnCTR_1_5_PID);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
+                                    USB_PIPEnCTR_6_8_PID_SHIFT,
+                                    USB_PIPEnCTR_6_8_PID);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            pid = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                    USB_PIPEnCTR_9_PID_SHIFT,
+                                    USB_PIPEnCTR_9_PID);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            pid = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            pid = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_PID_SHIFT,
+                                    USB_PIPEnCTR_A_F_PID);
+        break;
+
+        default:
+            pid = 0;
+        break;
+    }
+
+    return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_csclr
+* Description  : CSPLIT status clear setting of sprit transaction in specified
+*              : pipe is performed.
+*              : When SQSET bit or SQCLR bit, and SQSET bit or SQCLR bit
+*              : in DCPCTR register are continuously changed (when the sequence
+*              : toggle bit of data PID is continuously changed over two or more pipes),
+*              : the access cycle with 120 ns and more than 5 cycle bus clock is necessary.
+*              : Do not set both SQCLR bit and SQSET bit to 1 at the same time.
+*              : In addition, both bits should be operated after PID is set to NAK.
+*              : However, when it is set to the isochronous transfer as the transfer type
+*              : (TYPE=11), writing in SQSET bit is disabled.
+* Arguments    : uint16_t pipe     ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_csclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                1,
+                                USB_DCPCTR_CSCLR_SHIFT,
+                                USB_DCPCTR_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_CSCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_CSCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_CSCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_CSCLR_SHIFT,
+                                USB_PIPEnCTR_9_CSCLR);
+        break;
+
+        default:
+            /* PIPEA-F have not CSCLR */
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_sqclr
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA0.
+* Arguments    : uint16_t pipe              ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_sqclr (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQCLR_SHIFT,
+                                USB_DCPCTR_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQCLR_SHIFT,
+                                USB_PIPEnCTR_1_5_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQCLR_SHIFT,
+                                USB_PIPEnCTR_6_8_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQCLR_SHIFT,
+                                USB_PIPEnCTR_9_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQCLR_SHIFT,
+                                USB_PIPEnCTR_A_F_SQCLR);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_sqset
+* Description  : Sets the sequence bit of the pipe specified by the argument to
+*              : DATA1.
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_sqset (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            RZA_IO_RegWrite_16(&USB200.DCPCTR,
+                                1,
+                                USB_DCPCTR_SQSET_SHIFT,
+                                USB_DCPCTR_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_SQSET_SHIFT,
+                                USB_PIPEnCTR_1_5_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_SQSET_SHIFT,
+                                USB_PIPEnCTR_6_8_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_SQSET_SHIFT,
+                                USB_PIPEnCTR_9_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_SQSET_SHIFT,
+                                USB_PIPEnCTR_A_F_SQSET);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_sqmon
+* Description  : Toggle bit of specified pipe is obtained
+* Arguments    : uint16_t pipe   ; Pipe number
+* Return Value : sqmon
+*******************************************************************************/
+uint16_t usb0_function_get_sqmon (uint16_t pipe)
+{
+    uint16_t sqmon;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            sqmon = RZA_IO_RegRead_16(&USB200.DCPCTR,
+                                        USB_DCPCTR_SQMON_SHIFT,
+                                        USB_DCPCTR_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                        USB_PIPEnCTR_1_5_SQMON_SHIFT,
+                                        USB_PIPEnCTR_1_5_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE6CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE7CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE8CTR,
+                                        USB_PIPEnCTR_6_8_SQMON_SHIFT,
+                                        USB_PIPEnCTR_6_8_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                        USB_PIPEnCTR_9_SQMON_SHIFT,
+                                        USB_PIPEnCTR_9_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            sqmon = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                        USB_PIPEnCTR_A_F_SQMON_SHIFT,
+                                        USB_PIPEnCTR_A_F_SQMON);
+        break;
+
+        default:
+            sqmon = 0;
+        break;
+    }
+
+    return sqmon;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_aclrm
+* Description  : The buffer of specified pipe is initialized
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb0_function_aclrm (uint16_t pipe)
+{
+    usb0_function_set_aclrm(pipe);
+    usb0_function_clr_aclrm(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                1,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                1,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                1,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                1,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clr_aclrm
+* Description  : The auto buffer clear mode of specified pipe is enabled
+* Arguments    : uint16_t pipe    : Pipe
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clr_aclrm (uint16_t pipe)
+{
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            RZA_IO_RegWrite_16(&USB200.PIPE1CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            RZA_IO_RegWrite_16(&USB200.PIPE2CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            RZA_IO_RegWrite_16(&USB200.PIPE3CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            RZA_IO_RegWrite_16(&USB200.PIPE4CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            RZA_IO_RegWrite_16(&USB200.PIPE5CTR,
+                                0,
+                                USB_PIPEnCTR_1_5_ACLRM_SHIFT,
+                                USB_PIPEnCTR_1_5_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            RZA_IO_RegWrite_16(&USB200.PIPE6CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            RZA_IO_RegWrite_16(&USB200.PIPE7CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            RZA_IO_RegWrite_16(&USB200.PIPE8CTR,
+                                0,
+                                USB_PIPEnCTR_6_8_ACLRM_SHIFT,
+                                USB_PIPEnCTR_6_8_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            RZA_IO_RegWrite_16(&USB200.PIPE9CTR,
+                                0,
+                                USB_PIPEnCTR_9_ACLRM_SHIFT,
+                                USB_PIPEnCTR_9_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            RZA_IO_RegWrite_16(&USB200.PIPEACTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            RZA_IO_RegWrite_16(&USB200.PIPEBCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            RZA_IO_RegWrite_16(&USB200.PIPECCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            RZA_IO_RegWrite_16(&USB200.PIPEDCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            RZA_IO_RegWrite_16(&USB200.PIPEECTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            RZA_IO_RegWrite_16(&USB200.PIPEFCTR,
+                                0,
+                                USB_PIPEnCTR_A_F_ACLRM_SHIFT,
+                                USB_PIPEnCTR_A_F_ACLRM);
+        break;
+
+        default:
+        break;
+    }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_inbuf
+* Description  : Returns INBUFM of the pipe specified by the argument.
+* Arguments    : uint16_t pipe             ; Pipe Number
+* Return Value : inbuf
+*******************************************************************************/
+uint16_t usb0_function_get_inbuf (uint16_t pipe)
+{
+    uint16_t inbuf;
+
+    switch (pipe)
+    {
+        case USB_FUNCTION_PIPE0:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE1:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE1CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE2:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE2CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE3:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE3CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE4:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE4CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE5:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE5CTR,
+                                    USB_PIPEnCTR_1_5_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_1_5_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPE6:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE7:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE8:
+            inbuf = 0;
+        break;
+
+        case USB_FUNCTION_PIPE9:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPE9CTR,
+                                    USB_PIPEnCTR_9_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_9_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEA:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEACTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEB:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEBCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEC:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPECCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPED:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEDCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEE:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEECTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        case USB_FUNCTION_PIPEF:
+            inbuf = RZA_IO_RegRead_16(&USB200.PIPEFCTR,
+                                    USB_PIPEnCTR_A_F_INBUFM_SHIFT,
+                                    USB_PIPEnCTR_A_F_INBUFM);
+        break;
+
+        default:
+            inbuf = 0;
+        break;
+    }
+
+    return inbuf;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_setting_interrupt
+* Description  : Sets the USB module interrupt level.
+* Arguments    : uint8_t level ;interrupt level
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_setting_interrupt (uint8_t level)
+{
+    uint16_t d0fifo_dmaintid;
+    uint16_t d1fifo_dmaintid;
+
+    R_INTC_RegistIntFunc(INTC_ID_USBI0, usb0_function_interrupt);
+    R_INTC_SetPriority(INTC_ID_USBI0, level);
+    R_INTC_Enable(INTC_ID_USBI0);
+
+    d0fifo_dmaintid = Userdef_USB_usb0_function_d0fifo_dmaintid();
+
+    if (d0fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d0fifo_dmaintid, usb0_function_dma_interrupt_d0fifo);
+        R_INTC_SetPriority(d0fifo_dmaintid, level);
+        R_INTC_Enable(d0fifo_dmaintid);
+    }
+
+    d1fifo_dmaintid = Userdef_USB_usb0_function_d1fifo_dmaintid();
+
+    if (d1fifo_dmaintid != 0xFFFF)
+    {
+        R_INTC_RegistIntFunc(d1fifo_dmaintid, usb0_function_dma_interrupt_d1fifo);
+        R_INTC_SetPriority(d1fifo_dmaintid, level);
+        R_INTC_Enable(d1fifo_dmaintid);
+    }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_reset_module
+* Description  : Initializes the USB module.
+*              : Enables providing clock to the USB module.
+*              : Sets USB bus wait register.
+* Arguments    : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+*              :                    ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+void usb0_function_reset_module (uint16_t clockmode)
+{
+    /* UPLLE bit is only USB0 */
+    if (RZA_IO_RegRead_16(&USB200.SYSCFG0,
+                                USB_SYSCFG_UPLLE_SHIFT,
+                                USB_SYSCFG_UPLLE) == 1)
+    {
+        if ((USB200.SYSCFG0 & USB_FUNCTION_BITUCKSEL) != clockmode)
+        {
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            USB200.SYSCFG0 = 0;
+            USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+            Userdef_USB_usb0_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+        else
+        {
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                0,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+            Userdef_USB_usb0_function_delay_xms(1);
+            RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                                1,
+                                USB_SUSPMODE_SUSPM_SHIFT,
+                                USB_SUSPMODE_SUSPM);
+        }
+    }
+    else
+    {
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            0,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+        USB200.SYSCFG0 = 0;
+        USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
+        Userdef_USB_usb0_function_delay_xms(1);
+        RZA_IO_RegWrite_16(&USB200.SUSPMODE,
+                            1,
+                            USB_SUSPMODE_SUSPM_SHIFT,
+                            USB_SUSPMODE_SUSPM);
+    }
+
+    USB200.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_buf_size
+* Description  : Obtains pipe buffer size specified by the argument and
+*              : maximum packet size of the USB device in use.
+*              : When USB_FUNCTION_PIPE0 is specified by the argument, obtains the maximum
+*              : packet size of the USB device using the corresponding pipe.
+*              : For the case that USB_FUNCTION_PIPE0 is not assigned by the argument, when the
+*              : corresponding pipe is in continuous transfer mode,
+*              : obtains the buffer size allocated in the corresponcing pipe,
+*              : when incontinuous transfer, obtains maximum packet size.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Maximum packet size or buffer size
+*******************************************************************************/
+uint16_t usb0_function_get_buf_size (uint16_t pipe)
+{
+    uint16_t size;
+    uint16_t bufsize;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
+        {
+            bufsize = RZA_IO_RegRead_16(&g_usb0_function_pipebuf[pipe], USB_PIPEBUF_BUFSIZE_SHIFT, USB_PIPEBUF_BUFSIZE);
+            size = (uint16_t)((bufsize + 1) * USB_FUNCTION_PIPExBUF);
+        }
+        else
+        {
+            size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+        }
+    }
+    return size;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_mxps
+* Description  : Obtains maximum packet size of the USB device using the pipe
+*              : specified by the argument.
+* Arguments    : uint16_t pipe      ; Pipe Number
+* Return Value : Max Packet Size
+*******************************************************************************/
+uint16_t usb0_function_get_mxps (uint16_t pipe)
+{
+    uint16_t size;
+
+    if (pipe == USB_FUNCTION_PIPE0)
+    {
+        size = RZA_IO_RegRead_16(&USB200.DCPMAXP,
+                                USB_DCPMAXP_MXPS_SHIFT,
+                                USB_DCPMAXP_MXPS);
+    }
+    else
+    {
+        size = RZA_IO_RegRead_16(&g_usb0_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
+    }
+    return size;
+}
+
+/* End of File */