Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_lib.c
- Committer:
- davidanasco
- Date:
- 2021-07-16
- Revision:
- 70:2f8e3f5f75cf
- Parent:
- 46:378357d7e90d
File content as of revision 70:2f8e3f5f75cf:
/*******************************************************************************
* 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 : usb1_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 "usb1_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: usb1_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 usb1_function_enable_brdy_int (uint16_t pipe)
{
/* enable brdy interrupt */
USB201.BRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_disable_brdy_int (uint16_t pipe)
{
/* disable brdy interrupt */
USB201.BRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_clear_brdy_sts (uint16_t pipe)
{
/* clear brdy status */
USB201.BRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_enable_bemp_int (uint16_t pipe)
{
/* enable bemp interrupt */
USB201.BEMPENB |= (uint16_t)g_usb1_function_bit_set[pipe];
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_disable_bemp_int (uint16_t pipe)
{
/* disable bemp interrupt */
USB201.BEMPENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_clear_bemp_sts (uint16_t pipe)
{
/* clear bemp status */
USB201.BEMPSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_enable_nrdy_int (uint16_t pipe)
{
/* enable nrdy interrupt */
USB201.NRDYENB |= (uint16_t)g_usb1_function_bit_set[pipe];
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_disable_nrdy_int (uint16_t pipe)
{
/* disable nrdy interrupt */
USB201.NRDYENB &= (uint16_t)~(g_usb1_function_bit_set[pipe]);
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_clear_nrdy_sts (uint16_t pipe)
{
/* clear nrdy status */
USB201.NRDYSTS = (uint16_t)~(g_usb1_function_bit_set[pipe]);
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_is_hispeed (void)
{
uint16_t rhst;
uint16_t speed;
rhst = RZA_IO_RegRead_16(&USB201.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: usb1_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 usb1_function_is_hispeed_enable (void)
{
uint16_t ret;
ret = DEVDRV_USBF_NO;
if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_HSE_SHIFT, USB_SYSCFG_HSE) == 1)
{
ret = DEVDRV_USBF_YES;
}
return ret;
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_set_pid_buf (uint16_t pipe)
{
uint16_t pid;
pid = usb1_function_get_pid(pipe);
if (pid == DEVDRV_USBF_PID_STALL2)
{
usb1_function_set_pid_nak(pipe);
}
switch (pipe)
{
case USB_FUNCTION_PIPE0:
RZA_IO_RegWrite_16(&USB201.DCPCTR,
DEVDRV_USBF_PID_BUF,
USB_DCPCTR_PID_SHIFT,
USB_DCPCTR_PID);
break;
case USB_FUNCTION_PIPE1:
RZA_IO_RegWrite_16(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.PIPE9CTR,
DEVDRV_USBF_PID_BUF,
USB_PIPEnCTR_9_PID_SHIFT,
USB_PIPEnCTR_9_PID);
break;
case USB_FUNCTION_PIPEA:
RZA_IO_RegWrite_16(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.PIPEFCTR,
DEVDRV_USBF_PID_BUF,
USB_PIPEnCTR_A_F_PID_SHIFT,
USB_PIPEnCTR_A_F_PID);
break;
default:
break;
}
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_set_pid_nak (uint16_t pipe)
{
uint16_t pid;
uint16_t pbusy;
uint32_t loop;
pid = usb1_function_get_pid(pipe);
if (pid == DEVDRV_USBF_PID_STALL2)
{
usb1_function_set_pid_stall(pipe);
}
switch (pipe)
{
case USB_FUNCTION_PIPE0:
RZA_IO_RegWrite_16(&USB201.DCPCTR,
DEVDRV_USBF_PID_NAK,
USB_DCPCTR_PID_SHIFT,
USB_DCPCTR_PID);
break;
case USB_FUNCTION_PIPE1:
RZA_IO_RegWrite_16(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.PIPE9CTR,
DEVDRV_USBF_PID_NAK,
USB_PIPEnCTR_9_PID_SHIFT,
USB_PIPEnCTR_9_PID);
break;
case USB_FUNCTION_PIPEA:
RZA_IO_RegWrite_16(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.DCPCTR,
USB_DCPCTR_PBUSY_SHIFT,
USB_DCPCTR_PBUSY);
break;
case USB_FUNCTION_PIPE1:
pbusy = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
USB_PIPEnCTR_1_5_PBUSY_SHIFT,
USB_PIPEnCTR_1_5_PBUSY);
break;
case USB_FUNCTION_PIPE2:
pbusy = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
USB_PIPEnCTR_1_5_PBUSY_SHIFT,
USB_PIPEnCTR_1_5_PBUSY);
break;
case USB_FUNCTION_PIPE3:
pbusy = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
USB_PIPEnCTR_1_5_PBUSY_SHIFT,
USB_PIPEnCTR_1_5_PBUSY);
break;
case USB_FUNCTION_PIPE4:
pbusy = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
USB_PIPEnCTR_1_5_PBUSY_SHIFT,
USB_PIPEnCTR_1_5_PBUSY);
break;
case USB_FUNCTION_PIPE5:
pbusy = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
USB_PIPEnCTR_1_5_PBUSY_SHIFT,
USB_PIPEnCTR_1_5_PBUSY);
break;
case USB_FUNCTION_PIPE6:
pbusy = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
USB_PIPEnCTR_6_8_PBUSY_SHIFT,
USB_PIPEnCTR_6_8_PBUSY);
break;
case USB_FUNCTION_PIPE7:
pbusy = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
USB_PIPEnCTR_6_8_PBUSY_SHIFT,
USB_PIPEnCTR_6_8_PBUSY);
break;
case USB_FUNCTION_PIPE8:
pbusy = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
USB_PIPEnCTR_6_8_PBUSY_SHIFT,
USB_PIPEnCTR_6_8_PBUSY);
break;
case USB_FUNCTION_PIPE9:
pbusy = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
USB_PIPEnCTR_9_PBUSY_SHIFT,
USB_PIPEnCTR_9_PBUSY);
break;
case USB_FUNCTION_PIPEA:
pbusy = RZA_IO_RegRead_16(&USB201.PIPEACTR,
USB_PIPEnCTR_A_F_PBUSY_SHIFT,
USB_PIPEnCTR_A_F_PBUSY);
break;
case USB_FUNCTION_PIPEB:
pbusy = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
USB_PIPEnCTR_A_F_PBUSY_SHIFT,
USB_PIPEnCTR_A_F_PBUSY);
break;
case USB_FUNCTION_PIPEC:
pbusy = RZA_IO_RegRead_16(&USB201.PIPECCTR,
USB_PIPEnCTR_A_F_PBUSY_SHIFT,
USB_PIPEnCTR_A_F_PBUSY);
break;
case USB_FUNCTION_PIPED:
pbusy = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
USB_PIPEnCTR_A_F_PBUSY_SHIFT,
USB_PIPEnCTR_A_F_PBUSY);
break;
case USB_FUNCTION_PIPEE:
pbusy = RZA_IO_RegRead_16(&USB201.PIPEECTR,
USB_PIPEnCTR_A_F_PBUSY_SHIFT,
USB_PIPEnCTR_A_F_PBUSY);
break;
case USB_FUNCTION_PIPEF:
pbusy = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
USB_PIPEnCTR_A_F_PBUSY_SHIFT,
USB_PIPEnCTR_A_F_PBUSY);
break;
default:
pbusy = 1;
break;
}
if (pbusy == 0)
{
break;
}
Userdef_USB_usb1_function_delay_500ns();
}
}
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_set_pid_stall (uint16_t pipe)
{
uint16_t pid;
pid = usb1_function_get_pid(pipe);
if (pid == DEVDRV_USBF_PID_BUF)
{
switch (pipe)
{
case USB_FUNCTION_PIPE0:
RZA_IO_RegWrite_16(&USB201.DCPCTR,
DEVDRV_USBF_PID_STALL2,
USB_DCPCTR_PID_SHIFT,
USB_DCPCTR_PID);
break;
case USB_FUNCTION_PIPE1:
RZA_IO_RegWrite_16(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.PIPE9CTR,
DEVDRV_USBF_PID_STALL2,
USB_PIPEnCTR_9_PID_SHIFT,
USB_PIPEnCTR_9_PID);
break;
case USB_FUNCTION_PIPEA:
RZA_IO_RegWrite_16(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.DCPCTR,
DEVDRV_USBF_PID_STALL,
USB_DCPCTR_PID_SHIFT,
USB_DCPCTR_PID);
break;
case USB_FUNCTION_PIPE1:
RZA_IO_RegWrite_16(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.PIPE9CTR,
DEVDRV_USBF_PID_STALL,
USB_PIPEnCTR_9_PID_SHIFT,
USB_PIPEnCTR_9_PID);
break;
case USB_FUNCTION_PIPEA:
RZA_IO_RegWrite_16(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.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(&USB201.PIPEFCTR,
DEVDRV_USBF_PID_STALL,
USB_PIPEnCTR_A_F_PID_SHIFT,
USB_PIPEnCTR_A_F_PID);
break;
default:
break;
}
}
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_clear_pid_stall (uint16_t pipe)
{
usb1_function_set_pid_nak(pipe);
}
/*******************************************************************************
* Function Name: usb1_function_get_pid
* Description : Returns the pipe state specified by the argument.
* Arguments : uint16_t pipe ; Pipe Number
* Return Value : PID
*******************************************************************************/
uint16_t usb1_function_get_pid (uint16_t pipe)
{
uint16_t pid;
switch (pipe)
{
case USB_FUNCTION_PIPE0:
pid = RZA_IO_RegRead_16(&USB201.DCPCTR,
USB_DCPCTR_PID_SHIFT,
USB_DCPCTR_PID);
break;
case USB_FUNCTION_PIPE1:
pid = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
USB_PIPEnCTR_1_5_PID_SHIFT,
USB_PIPEnCTR_1_5_PID);
break;
case USB_FUNCTION_PIPE2:
pid = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
USB_PIPEnCTR_1_5_PID_SHIFT,
USB_PIPEnCTR_1_5_PID);
break;
case USB_FUNCTION_PIPE3:
pid = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
USB_PIPEnCTR_1_5_PID_SHIFT,
USB_PIPEnCTR_1_5_PID);
break;
case USB_FUNCTION_PIPE4:
pid = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
USB_PIPEnCTR_1_5_PID_SHIFT,
USB_PIPEnCTR_1_5_PID);
break;
case USB_FUNCTION_PIPE5:
pid = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
USB_PIPEnCTR_1_5_PID_SHIFT,
USB_PIPEnCTR_1_5_PID);
break;
case USB_FUNCTION_PIPE6:
pid = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
USB_PIPEnCTR_6_8_PID_SHIFT,
USB_PIPEnCTR_6_8_PID);
break;
case USB_FUNCTION_PIPE7:
pid = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
USB_PIPEnCTR_6_8_PID_SHIFT,
USB_PIPEnCTR_6_8_PID);
break;
case USB_FUNCTION_PIPE8:
pid = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
USB_PIPEnCTR_6_8_PID_SHIFT,
USB_PIPEnCTR_6_8_PID);
break;
case USB_FUNCTION_PIPE9:
pid = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
USB_PIPEnCTR_9_PID_SHIFT,
USB_PIPEnCTR_9_PID);
break;
case USB_FUNCTION_PIPEA:
pid = RZA_IO_RegRead_16(&USB201.PIPEACTR,
USB_PIPEnCTR_A_F_PID_SHIFT,
USB_PIPEnCTR_A_F_PID);
break;
case USB_FUNCTION_PIPEB:
pid = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
USB_PIPEnCTR_A_F_PID_SHIFT,
USB_PIPEnCTR_A_F_PID);
break;
case USB_FUNCTION_PIPEC:
pid = RZA_IO_RegRead_16(&USB201.PIPECCTR,
USB_PIPEnCTR_A_F_PID_SHIFT,
USB_PIPEnCTR_A_F_PID);
break;
case USB_FUNCTION_PIPED:
pid = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
USB_PIPEnCTR_A_F_PID_SHIFT,
USB_PIPEnCTR_A_F_PID);
break;
case USB_FUNCTION_PIPEE:
pid = RZA_IO_RegRead_16(&USB201.PIPEECTR,
USB_PIPEnCTR_A_F_PID_SHIFT,
USB_PIPEnCTR_A_F_PID);
break;
case USB_FUNCTION_PIPEF:
pid = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
USB_PIPEnCTR_A_F_PID_SHIFT,
USB_PIPEnCTR_A_F_PID);
break;
default:
pid = 0;
break;
}
return pid;
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_set_csclr (uint16_t pipe)
{
switch (pipe)
{
case USB_FUNCTION_PIPE0:
RZA_IO_RegWrite_16(&USB201.DCPCTR,
1,
USB_DCPCTR_CSCLR_SHIFT,
USB_DCPCTR_CSCLR);
break;
case USB_FUNCTION_PIPE1:
RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
1,
USB_PIPEnCTR_1_5_CSCLR_SHIFT,
USB_PIPEnCTR_1_5_CSCLR);
break;
case USB_FUNCTION_PIPE2:
RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
1,
USB_PIPEnCTR_1_5_CSCLR_SHIFT,
USB_PIPEnCTR_1_5_CSCLR);
break;
case USB_FUNCTION_PIPE3:
RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
1,
USB_PIPEnCTR_1_5_CSCLR_SHIFT,
USB_PIPEnCTR_1_5_CSCLR);
break;
case USB_FUNCTION_PIPE4:
RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
1,
USB_PIPEnCTR_1_5_CSCLR_SHIFT,
USB_PIPEnCTR_1_5_CSCLR);
break;
case USB_FUNCTION_PIPE5:
RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
1,
USB_PIPEnCTR_1_5_CSCLR_SHIFT,
USB_PIPEnCTR_1_5_CSCLR);
break;
case USB_FUNCTION_PIPE6:
RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
1,
USB_PIPEnCTR_6_8_CSCLR_SHIFT,
USB_PIPEnCTR_6_8_CSCLR);
break;
case USB_FUNCTION_PIPE7:
RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
1,
USB_PIPEnCTR_6_8_CSCLR_SHIFT,
USB_PIPEnCTR_6_8_CSCLR);
break;
case USB_FUNCTION_PIPE8:
RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
1,
USB_PIPEnCTR_6_8_CSCLR_SHIFT,
USB_PIPEnCTR_6_8_CSCLR);
break;
case USB_FUNCTION_PIPE9:
RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
1,
USB_PIPEnCTR_9_CSCLR_SHIFT,
USB_PIPEnCTR_9_CSCLR);
break;
default:
/* PIPEA-F have not CSCLR */
break;
}
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_set_sqclr (uint16_t pipe)
{
switch (pipe)
{
case USB_FUNCTION_PIPE0:
RZA_IO_RegWrite_16(&USB201.DCPCTR,
1,
USB_DCPCTR_SQCLR_SHIFT,
USB_DCPCTR_SQCLR);
break;
case USB_FUNCTION_PIPE1:
RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
1,
USB_PIPEnCTR_1_5_SQCLR_SHIFT,
USB_PIPEnCTR_1_5_SQCLR);
break;
case USB_FUNCTION_PIPE2:
RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
1,
USB_PIPEnCTR_1_5_SQCLR_SHIFT,
USB_PIPEnCTR_1_5_SQCLR);
break;
case USB_FUNCTION_PIPE3:
RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
1,
USB_PIPEnCTR_1_5_SQCLR_SHIFT,
USB_PIPEnCTR_1_5_SQCLR);
break;
case USB_FUNCTION_PIPE4:
RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
1,
USB_PIPEnCTR_1_5_SQCLR_SHIFT,
USB_PIPEnCTR_1_5_SQCLR);
break;
case USB_FUNCTION_PIPE5:
RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
1,
USB_PIPEnCTR_1_5_SQCLR_SHIFT,
USB_PIPEnCTR_1_5_SQCLR);
break;
case USB_FUNCTION_PIPE6:
RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
1,
USB_PIPEnCTR_6_8_SQCLR_SHIFT,
USB_PIPEnCTR_6_8_SQCLR);
break;
case USB_FUNCTION_PIPE7:
RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
1,
USB_PIPEnCTR_6_8_SQCLR_SHIFT,
USB_PIPEnCTR_6_8_SQCLR);
break;
case USB_FUNCTION_PIPE8:
RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
1,
USB_PIPEnCTR_6_8_SQCLR_SHIFT,
USB_PIPEnCTR_6_8_SQCLR);
break;
case USB_FUNCTION_PIPE9:
RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
1,
USB_PIPEnCTR_9_SQCLR_SHIFT,
USB_PIPEnCTR_9_SQCLR);
break;
case USB_FUNCTION_PIPEA:
RZA_IO_RegWrite_16(&USB201.PIPEACTR,
1,
USB_PIPEnCTR_A_F_SQCLR_SHIFT,
USB_PIPEnCTR_A_F_SQCLR);
break;
case USB_FUNCTION_PIPEB:
RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
1,
USB_PIPEnCTR_A_F_SQCLR_SHIFT,
USB_PIPEnCTR_A_F_SQCLR);
break;
case USB_FUNCTION_PIPEC:
RZA_IO_RegWrite_16(&USB201.PIPECCTR,
1,
USB_PIPEnCTR_A_F_SQCLR_SHIFT,
USB_PIPEnCTR_A_F_SQCLR);
break;
case USB_FUNCTION_PIPED:
RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
1,
USB_PIPEnCTR_A_F_SQCLR_SHIFT,
USB_PIPEnCTR_A_F_SQCLR);
break;
case USB_FUNCTION_PIPEE:
RZA_IO_RegWrite_16(&USB201.PIPEECTR,
1,
USB_PIPEnCTR_A_F_SQCLR_SHIFT,
USB_PIPEnCTR_A_F_SQCLR);
break;
case USB_FUNCTION_PIPEF:
RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
1,
USB_PIPEnCTR_A_F_SQCLR_SHIFT,
USB_PIPEnCTR_A_F_SQCLR);
break;
default:
break;
}
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_set_sqset (uint16_t pipe)
{
switch (pipe)
{
case USB_FUNCTION_PIPE0:
RZA_IO_RegWrite_16(&USB201.DCPCTR,
1,
USB_DCPCTR_SQSET_SHIFT,
USB_DCPCTR_SQSET);
break;
case USB_FUNCTION_PIPE1:
RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
1,
USB_PIPEnCTR_1_5_SQSET_SHIFT,
USB_PIPEnCTR_1_5_SQSET);
break;
case USB_FUNCTION_PIPE2:
RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
1,
USB_PIPEnCTR_1_5_SQSET_SHIFT,
USB_PIPEnCTR_1_5_SQSET);
break;
case USB_FUNCTION_PIPE3:
RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
1,
USB_PIPEnCTR_1_5_SQSET_SHIFT,
USB_PIPEnCTR_1_5_SQSET);
break;
case USB_FUNCTION_PIPE4:
RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
1,
USB_PIPEnCTR_1_5_SQSET_SHIFT,
USB_PIPEnCTR_1_5_SQSET);
break;
case USB_FUNCTION_PIPE5:
RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
1,
USB_PIPEnCTR_1_5_SQSET_SHIFT,
USB_PIPEnCTR_1_5_SQSET);
break;
case USB_FUNCTION_PIPE6:
RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
1,
USB_PIPEnCTR_6_8_SQSET_SHIFT,
USB_PIPEnCTR_6_8_SQSET);
break;
case USB_FUNCTION_PIPE7:
RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
1,
USB_PIPEnCTR_6_8_SQSET_SHIFT,
USB_PIPEnCTR_6_8_SQSET);
break;
case USB_FUNCTION_PIPE8:
RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
1,
USB_PIPEnCTR_6_8_SQSET_SHIFT,
USB_PIPEnCTR_6_8_SQSET);
break;
case USB_FUNCTION_PIPE9:
RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
1,
USB_PIPEnCTR_9_SQSET_SHIFT,
USB_PIPEnCTR_9_SQSET);
break;
case USB_FUNCTION_PIPEA:
RZA_IO_RegWrite_16(&USB201.PIPEACTR,
1,
USB_PIPEnCTR_A_F_SQSET_SHIFT,
USB_PIPEnCTR_A_F_SQSET);
break;
case USB_FUNCTION_PIPEB:
RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
1,
USB_PIPEnCTR_A_F_SQSET_SHIFT,
USB_PIPEnCTR_A_F_SQSET);
break;
case USB_FUNCTION_PIPEC:
RZA_IO_RegWrite_16(&USB201.PIPECCTR,
1,
USB_PIPEnCTR_A_F_SQSET_SHIFT,
USB_PIPEnCTR_A_F_SQSET);
break;
case USB_FUNCTION_PIPED:
RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
1,
USB_PIPEnCTR_A_F_SQSET_SHIFT,
USB_PIPEnCTR_A_F_SQSET);
break;
case USB_FUNCTION_PIPEE:
RZA_IO_RegWrite_16(&USB201.PIPEECTR,
1,
USB_PIPEnCTR_A_F_SQSET_SHIFT,
USB_PIPEnCTR_A_F_SQSET);
break;
case USB_FUNCTION_PIPEF:
RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
1,
USB_PIPEnCTR_A_F_SQSET_SHIFT,
USB_PIPEnCTR_A_F_SQSET);
break;
default:
break;
}
}
/*******************************************************************************
* Function Name: usb1_function_get_sqmon
* Description : Toggle bit of specified pipe is obtained
* Arguments : uint16_t pipe ; Pipe number
* Return Value : sqmon
*******************************************************************************/
uint16_t usb1_function_get_sqmon (uint16_t pipe)
{
uint16_t sqmon;
switch (pipe)
{
case USB_FUNCTION_PIPE0:
sqmon = RZA_IO_RegRead_16(&USB201.DCPCTR,
USB_DCPCTR_SQMON_SHIFT,
USB_DCPCTR_SQMON);
break;
case USB_FUNCTION_PIPE1:
sqmon = RZA_IO_RegRead_16(&USB201.PIPE1CTR,
USB_PIPEnCTR_1_5_SQMON_SHIFT,
USB_PIPEnCTR_1_5_SQMON);
break;
case USB_FUNCTION_PIPE2:
sqmon = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
USB_PIPEnCTR_1_5_SQMON_SHIFT,
USB_PIPEnCTR_1_5_SQMON);
break;
case USB_FUNCTION_PIPE3:
sqmon = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
USB_PIPEnCTR_1_5_SQMON_SHIFT,
USB_PIPEnCTR_1_5_SQMON);
break;
case USB_FUNCTION_PIPE4:
sqmon = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
USB_PIPEnCTR_1_5_SQMON_SHIFT,
USB_PIPEnCTR_1_5_SQMON);
break;
case USB_FUNCTION_PIPE5:
sqmon = RZA_IO_RegRead_16(&USB201.PIPE5CTR,
USB_PIPEnCTR_1_5_SQMON_SHIFT,
USB_PIPEnCTR_1_5_SQMON);
break;
case USB_FUNCTION_PIPE6:
sqmon = RZA_IO_RegRead_16(&USB201.PIPE6CTR,
USB_PIPEnCTR_6_8_SQMON_SHIFT,
USB_PIPEnCTR_6_8_SQMON);
break;
case USB_FUNCTION_PIPE7:
sqmon = RZA_IO_RegRead_16(&USB201.PIPE7CTR,
USB_PIPEnCTR_6_8_SQMON_SHIFT,
USB_PIPEnCTR_6_8_SQMON);
break;
case USB_FUNCTION_PIPE8:
sqmon = RZA_IO_RegRead_16(&USB201.PIPE8CTR,
USB_PIPEnCTR_6_8_SQMON_SHIFT,
USB_PIPEnCTR_6_8_SQMON);
break;
case USB_FUNCTION_PIPE9:
sqmon = RZA_IO_RegRead_16(&USB201.PIPE9CTR,
USB_PIPEnCTR_9_SQMON_SHIFT,
USB_PIPEnCTR_9_SQMON);
break;
case USB_FUNCTION_PIPEA:
sqmon = RZA_IO_RegRead_16(&USB201.PIPEACTR,
USB_PIPEnCTR_A_F_SQMON_SHIFT,
USB_PIPEnCTR_A_F_SQMON);
break;
case USB_FUNCTION_PIPEB:
sqmon = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
USB_PIPEnCTR_A_F_SQMON_SHIFT,
USB_PIPEnCTR_A_F_SQMON);
break;
case USB_FUNCTION_PIPEC:
sqmon = RZA_IO_RegRead_16(&USB201.PIPECCTR,
USB_PIPEnCTR_A_F_SQMON_SHIFT,
USB_PIPEnCTR_A_F_SQMON);
break;
case USB_FUNCTION_PIPED:
sqmon = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
USB_PIPEnCTR_A_F_SQMON_SHIFT,
USB_PIPEnCTR_A_F_SQMON);
break;
case USB_FUNCTION_PIPEE:
sqmon = RZA_IO_RegRead_16(&USB201.PIPEECTR,
USB_PIPEnCTR_A_F_SQMON_SHIFT,
USB_PIPEnCTR_A_F_SQMON);
break;
case USB_FUNCTION_PIPEF:
sqmon = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
USB_PIPEnCTR_A_F_SQMON_SHIFT,
USB_PIPEnCTR_A_F_SQMON);
break;
default:
sqmon = 0;
break;
}
return sqmon;
}
/*******************************************************************************
* Function Name: usb1_function_aclrm
* Description : The buffer of specified pipe is initialized
* Arguments : uint16_t pipe : Pipe
* Return Value : none
*******************************************************************************/
void usb1_function_aclrm (uint16_t pipe)
{
usb1_function_set_aclrm(pipe);
usb1_function_clr_aclrm(pipe);
}
/*******************************************************************************
* Function Name: usb1_function_set_aclrm
* Description : The auto buffer clear mode of specified pipe is enabled
* Arguments : uint16_t pipe : Pipe
* Return Value : none
*******************************************************************************/
void usb1_function_set_aclrm (uint16_t pipe)
{
switch (pipe)
{
case USB_FUNCTION_PIPE0:
break;
case USB_FUNCTION_PIPE1:
RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
1,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE2:
RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
1,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE3:
RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
1,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE4:
RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
1,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE5:
RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
1,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE6:
RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
1,
USB_PIPEnCTR_6_8_ACLRM_SHIFT,
USB_PIPEnCTR_6_8_ACLRM);
break;
case USB_FUNCTION_PIPE7:
RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
1,
USB_PIPEnCTR_6_8_ACLRM_SHIFT,
USB_PIPEnCTR_6_8_ACLRM);
break;
case USB_FUNCTION_PIPE8:
RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
1,
USB_PIPEnCTR_6_8_ACLRM_SHIFT,
USB_PIPEnCTR_6_8_ACLRM);
break;
case USB_FUNCTION_PIPE9:
RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
1,
USB_PIPEnCTR_9_ACLRM_SHIFT,
USB_PIPEnCTR_9_ACLRM);
break;
case USB_FUNCTION_PIPEA:
RZA_IO_RegWrite_16(&USB201.PIPEACTR,
1,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPEB:
RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
1,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPEC:
RZA_IO_RegWrite_16(&USB201.PIPECCTR,
1,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPED:
RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
1,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPEE:
RZA_IO_RegWrite_16(&USB201.PIPEECTR,
1,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPEF:
RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
1,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
default:
break;
}
}
/*******************************************************************************
* Function Name: usb1_function_clr_aclrm
* Description : The auto buffer clear mode of specified pipe is enabled
* Arguments : uint16_t pipe : Pipe
* Return Value : none
*******************************************************************************/
void usb1_function_clr_aclrm (uint16_t pipe)
{
switch (pipe)
{
case USB_FUNCTION_PIPE0:
break;
case USB_FUNCTION_PIPE1:
RZA_IO_RegWrite_16(&USB201.PIPE1CTR,
0,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE2:
RZA_IO_RegWrite_16(&USB201.PIPE2CTR,
0,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE3:
RZA_IO_RegWrite_16(&USB201.PIPE3CTR,
0,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE4:
RZA_IO_RegWrite_16(&USB201.PIPE4CTR,
0,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE5:
RZA_IO_RegWrite_16(&USB201.PIPE5CTR,
0,
USB_PIPEnCTR_1_5_ACLRM_SHIFT,
USB_PIPEnCTR_1_5_ACLRM);
break;
case USB_FUNCTION_PIPE6:
RZA_IO_RegWrite_16(&USB201.PIPE6CTR,
0,
USB_PIPEnCTR_6_8_ACLRM_SHIFT,
USB_PIPEnCTR_6_8_ACLRM);
break;
case USB_FUNCTION_PIPE7:
RZA_IO_RegWrite_16(&USB201.PIPE7CTR,
0,
USB_PIPEnCTR_6_8_ACLRM_SHIFT,
USB_PIPEnCTR_6_8_ACLRM);
break;
case USB_FUNCTION_PIPE8:
RZA_IO_RegWrite_16(&USB201.PIPE8CTR,
0,
USB_PIPEnCTR_6_8_ACLRM_SHIFT,
USB_PIPEnCTR_6_8_ACLRM);
break;
case USB_FUNCTION_PIPE9:
RZA_IO_RegWrite_16(&USB201.PIPE9CTR,
0,
USB_PIPEnCTR_9_ACLRM_SHIFT,
USB_PIPEnCTR_9_ACLRM);
break;
case USB_FUNCTION_PIPEA:
RZA_IO_RegWrite_16(&USB201.PIPEACTR,
0,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPEB:
RZA_IO_RegWrite_16(&USB201.PIPEBCTR,
0,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPEC:
RZA_IO_RegWrite_16(&USB201.PIPECCTR,
0,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPED:
RZA_IO_RegWrite_16(&USB201.PIPEDCTR,
0,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPEE:
RZA_IO_RegWrite_16(&USB201.PIPEECTR,
0,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
case USB_FUNCTION_PIPEF:
RZA_IO_RegWrite_16(&USB201.PIPEFCTR,
0,
USB_PIPEnCTR_A_F_ACLRM_SHIFT,
USB_PIPEnCTR_A_F_ACLRM);
break;
default:
break;
}
}
/*******************************************************************************
* Function Name: usb1_function_get_inbuf
* Description : Returns INBUFM of the pipe specified by the argument.
* Arguments : uint16_t pipe ; Pipe Number
* Return Value : inbuf
*******************************************************************************/
uint16_t usb1_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(&USB201.PIPE1CTR,
USB_PIPEnCTR_1_5_INBUFM_SHIFT,
USB_PIPEnCTR_1_5_INBUFM);
break;
case USB_FUNCTION_PIPE2:
inbuf = RZA_IO_RegRead_16(&USB201.PIPE2CTR,
USB_PIPEnCTR_1_5_INBUFM_SHIFT,
USB_PIPEnCTR_1_5_INBUFM);
break;
case USB_FUNCTION_PIPE3:
inbuf = RZA_IO_RegRead_16(&USB201.PIPE3CTR,
USB_PIPEnCTR_1_5_INBUFM_SHIFT,
USB_PIPEnCTR_1_5_INBUFM);
break;
case USB_FUNCTION_PIPE4:
inbuf = RZA_IO_RegRead_16(&USB201.PIPE4CTR,
USB_PIPEnCTR_1_5_INBUFM_SHIFT,
USB_PIPEnCTR_1_5_INBUFM);
break;
case USB_FUNCTION_PIPE5:
inbuf = RZA_IO_RegRead_16(&USB201.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(&USB201.PIPE9CTR,
USB_PIPEnCTR_9_INBUFM_SHIFT,
USB_PIPEnCTR_9_INBUFM);
break;
case USB_FUNCTION_PIPEA:
inbuf = RZA_IO_RegRead_16(&USB201.PIPEACTR,
USB_PIPEnCTR_A_F_INBUFM_SHIFT,
USB_PIPEnCTR_A_F_INBUFM);
break;
case USB_FUNCTION_PIPEB:
inbuf = RZA_IO_RegRead_16(&USB201.PIPEBCTR,
USB_PIPEnCTR_A_F_INBUFM_SHIFT,
USB_PIPEnCTR_A_F_INBUFM);
break;
case USB_FUNCTION_PIPEC:
inbuf = RZA_IO_RegRead_16(&USB201.PIPECCTR,
USB_PIPEnCTR_A_F_INBUFM_SHIFT,
USB_PIPEnCTR_A_F_INBUFM);
break;
case USB_FUNCTION_PIPED:
inbuf = RZA_IO_RegRead_16(&USB201.PIPEDCTR,
USB_PIPEnCTR_A_F_INBUFM_SHIFT,
USB_PIPEnCTR_A_F_INBUFM);
break;
case USB_FUNCTION_PIPEE:
inbuf = RZA_IO_RegRead_16(&USB201.PIPEECTR,
USB_PIPEnCTR_A_F_INBUFM_SHIFT,
USB_PIPEnCTR_A_F_INBUFM);
break;
case USB_FUNCTION_PIPEF:
inbuf = RZA_IO_RegRead_16(&USB201.PIPEFCTR,
USB_PIPEnCTR_A_F_INBUFM_SHIFT,
USB_PIPEnCTR_A_F_INBUFM);
break;
default:
inbuf = 0;
break;
}
return inbuf;
}
/*******************************************************************************
* Function Name: usb1_function_setting_interrupt
* Description : Sets the USB module interrupt level.
* Arguments : uint8_t level
* Return Value : none
*******************************************************************************/
#if 0
void usb1_function_setting_interrupt (uint8_t level)
{
uint16_t d0fifo_dmaintid;
uint16_t d1fifo_dmaintid;
R_INTC_RegistIntFunc(INTC_ID_USBI1, usb1_function_interrupt);
R_INTC_SetPriority(INTC_ID_USBI1, level);
R_INTC_Enable(INTC_ID_USBI1);
d0fifo_dmaintid = Userdef_USB_usb1_function_d0fifo_dmaintid();
if (d0fifo_dmaintid != 0xFFFF)
{
R_INTC_RegistIntFunc(d0fifo_dmaintid, usb1_function_dma_interrupt_d0fifo);
R_INTC_SetPriority(d0fifo_dmaintid, level);
R_INTC_Enable(d0fifo_dmaintid);
}
d1fifo_dmaintid = Userdef_USB_usb1_function_d1fifo_dmaintid();
if (d1fifo_dmaintid != 0xFFFF)
{
R_INTC_RegistIntFunc(d1fifo_dmaintid, usb1_function_dma_interrupt_d1fifo);
R_INTC_SetPriority(d1fifo_dmaintid, level);
R_INTC_Enable(d1fifo_dmaintid);
}
}
#endif
/*******************************************************************************
* Function Name: usb1_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 usb1_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(&USB201.SUSPMODE,
0,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
RZA_IO_RegWrite_16(&USB200.SUSPMODE,
0,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
USB201.SYSCFG0 = 0;
USB200.SYSCFG0 = 0;
USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
Userdef_USB_usb1_function_delay_xms(1);
RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
RZA_IO_RegWrite_16(&USB201.SUSPMODE,
1,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
}
else
{
RZA_IO_RegWrite_16(&USB201.SUSPMODE,
0,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
Userdef_USB_usb1_function_delay_xms(1);
RZA_IO_RegWrite_16(&USB201.SUSPMODE,
1,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
}
}
else
{
RZA_IO_RegWrite_16(&USB201.SUSPMODE,
0,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
RZA_IO_RegWrite_16(&USB200.SUSPMODE,
0,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
USB201.SYSCFG0 = 0;
USB200.SYSCFG0 = 0;
USB200.SYSCFG0 = (USB_FUNCTION_BITUPLLE | clockmode);
Userdef_USB_usb1_function_delay_xms(1);
RZA_IO_RegWrite_16(&USB200.SUSPMODE,
1,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
RZA_IO_RegWrite_16(&USB201.SUSPMODE,
1,
USB_SUSPMODE_SUSPM_SHIFT,
USB_SUSPMODE_SUSPM);
}
USB201.BUSWAIT = (uint16_t)(USB_FUNCTION_BUSWAIT_05 & USB_FUNCTION_BITBWAIT);
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_get_buf_size (uint16_t pipe)
{
uint16_t size;
uint16_t bufsize;
if (pipe == USB_FUNCTION_PIPE0)
{
size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
USB_DCPMAXP_MXPS_SHIFT,
USB_DCPMAXP_MXPS);
}
else
{
if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_CNTMD_SHIFT, USB_PIPECFG_CNTMD) == 1)
{
bufsize = RZA_IO_RegRead_16(&g_usb1_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_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
}
}
return size;
}
/*******************************************************************************
* Function Name: usb1_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 usb1_function_get_mxps (uint16_t pipe)
{
uint16_t size;
if (pipe == USB_FUNCTION_PIPE0)
{
size = RZA_IO_RegRead_16(&USB201.DCPMAXP,
USB_DCPMAXP_MXPS_SHIFT,
USB_DCPMAXP_MXPS);
}
else
{
size = RZA_IO_RegRead_16(&g_usb1_function_pipemaxp[pipe], USB_PIPEMAXP_MXPS_SHIFT, USB_PIPEMAXP_MXPS);
}
return size;
}
/* End of File */