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.
Dependents: STM32F103C8T6_WebUSBDFU STM32F103C8T6_USBDFU STM32F103C8T6_USBDFU dfu_usb_stm32f103
Fork of USBDevice_STM32F103 by
Revision 46:378357d7e90d, committed 2015-03-31
- Comitter:
- mbed_official
- Date:
- Tue Mar 31 16:15:39 2015 +0100
- Parent:
- 45:0f216c4e75e5
- Child:
- 47:a0cd9646ecd1
- Commit message:
- Synchronized with git revision 251f3f8b55a4dc98b831c80e032464ed45cce309
Full URL: https://github.com/mbedmicro/mbed/commit/251f3f8b55a4dc98b831c80e032464ed45cce309/
[RZ/A1H]Add some function(USB 2port, NVIC wrapper) and modify some settings(OS, Terminal).
Changed in this revision
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/devdrv_usb_function_api.h Thu Mar 26 14:30:20 2015 +0000 +++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/devdrv_usb_function_api.h Tue Mar 31 16:15:39 2015 +0100 @@ -36,9 +36,7 @@ #include <MBRZA1H.h> #include "r_typedefs.h" #include "usb0_function_api.h" -#if 0 #include "usb1_function_api.h" -#endif #ifdef __cplusplus
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb0_function.h Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-/*******************************************************************************
-* 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.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB0_FUNCTION_H
-#define USB0_FUNCTION_H
-
-
-/*******************************************************************************
-Includes <System Includes> , "Project Includes"
-*******************************************************************************/
-#include "devdrv_usb_function_api.h"
-#include "usb_function.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern const uint16_t g_usb0_function_bit_set[];
-extern uint32_t g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint8_t *g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-extern uint16_t g_usb0_function_PipeIgnore[];
-extern uint16_t g_usb0_function_PipeTbl[];
-extern uint16_t g_usb0_function_pipe_status[];
-extern uint32_t g_usb0_function_PipeDataSize[];
-
-extern USB_FUNCTION_DMA_t g_usb0_function_DmaInfo[];
-extern uint16_t g_usb0_function_DmaPipe[];
-extern uint16_t g_usb0_function_DmaBval[];
-extern uint16_t g_usb0_function_DmaStatus[];
-
-extern uint16_t g_usb0_function_CtrZeroLengthFlag;
-
-extern uint16_t g_usb0_function_ConfigNum;
-extern uint16_t g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
-extern uint16_t g_usb0_function_RemoteWakeupFlag;
-extern uint16_t g_usb0_function_TestModeFlag;
-extern uint16_t g_usb0_function_TestModeSelectors;
-
-extern uint16_t g_usb0_function_ReqType;
-extern uint16_t g_usb0_function_ReqTypeType;
-extern uint16_t g_usb0_function_ReqTypeRecip;
-extern uint16_t g_usb0_function_ReqRequest;
-extern uint16_t g_usb0_function_ReqValue;
-extern uint16_t g_usb0_function_ReqIndex;
-extern uint16_t g_usb0_function_ReqLength;
-
-extern uint16_t g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-extern uint16_t g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-extern uint16_t g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-/* ==== common ==== */
-void usb0_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
-void usb0_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
-uint16_t usb0_function_is_hispeed(void);
-uint16_t usb0_function_is_hispeed_enable(void);
-uint16_t usb0_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb0_function_write_buffer(uint16_t pipe);
-uint16_t usb0_function_write_buffer_c(uint16_t pipe);
-uint16_t usb0_function_write_buffer_d0(uint16_t pipe);
-uint16_t usb0_function_write_buffer_d1(uint16_t pipe);
-void usb0_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb0_function_read_buffer(uint16_t pipe);
-uint16_t usb0_function_read_buffer_c(uint16_t pipe);
-uint16_t usb0_function_read_buffer_d0(uint16_t pipe);
-uint16_t usb0_function_read_buffer_d1(uint16_t pipe);
-uint16_t usb0_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void usb0_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void usb0_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
-uint16_t usb0_function_get_mbw(uint32_t trncount, uint32_t dtptr);
-uint16_t usb0_function_read_dma(uint16_t pipe);
-void usb0_function_brdy_int(uint16_t status, uint16_t int_enb);
-void usb0_function_nrdy_int(uint16_t status, uint16_t int_enb);
-void usb0_function_bemp_int(uint16_t status, uint16_t int_enb);
-void usb0_function_setting_interrupt(uint8_t level);
-void usb0_function_reset_module(uint16_t clockmode);
-uint16_t usb0_function_get_buf_size(uint16_t pipe);
-uint16_t usb0_function_get_mxps(uint16_t pipe);
-void usb0_function_clear_brdy_sts(uint16_t pipe);
-void usb0_function_clear_bemp_sts(uint16_t pipe);
-void usb0_function_clear_nrdy_sts(uint16_t pipe);
-void usb0_function_set_pid_buf(uint16_t pipe);
-void usb0_function_set_pid_nak(uint16_t pipe);
-void usb0_function_set_pid_stall(uint16_t pipe);
-void usb0_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb0_function_get_pid(uint16_t pipe);
-void usb0_function_set_sqclr(uint16_t pipe);
-void usb0_function_set_sqset(uint16_t pipe);
-void usb0_function_set_csclr(uint16_t pipe);
-void usb0_function_aclrm(uint16_t pipe);
-void usb0_function_set_aclrm(uint16_t pipe);
-void usb0_function_clr_aclrm(uint16_t pipe);
-uint16_t usb0_function_get_sqmon(uint16_t pipe);
-uint16_t usb0_function_get_inbuf(uint16_t pipe);
-
-/* ==== function ==== */
-void usb0_function_init_status(void);
-void usb0_function_InitModule(uint16_t mode);
-uint16_t usb0_function_CheckVBUStaus(void);
-void usb0_function_USB_FUNCTION_Attach(void);
-void usb0_function_USB_FUNCTION_Detach(void);
-void usb0_function_USB_FUNCTION_BusReset(void);
-void usb0_function_USB_FUNCTION_Resume(void);
-void usb0_function_USB_FUNCTION_Suspend(void);
-void usb0_function_USB_FUNCTION_TestMode(void);
-void usb0_function_ResetDCP(void);
-void usb0_function_ResetEP(uint16_t num);
-uint16_t usb0_function_EpToPipe(uint16_t ep);
-void usb0_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
-uint16_t usb0_function_GetConfigNum(void);
-uint16_t usb0_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
-uint16_t usb0_function_CheckRemoteWakeup(void);
-void usb0_function_clear_alt(void);
-void usb0_function_clear_pipe_tbl(void);
-void usb0_function_clear_ep_table_index(void);
-uint16_t usb0_function_GetInterfaceNum(uint16_t num);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* USB0_FUNCTION_H */
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb0_function_api.h Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*******************************************************************************
-* 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_api.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB0_FUNCTION_API_H
-#define USB0_FUNCTION_API_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Includes <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Variable Externs
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void usb0_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
-uint16_t usb0_api_function_IsConfigured(void);
-uint16_t usb0_function_GetDeviceState(void);
-uint16_t usb0_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
-void usb0_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
-uint16_t usb0_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t usb0_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
-void usb0_api_function_clear_pipe_status(uint16_t pipe);
-void usb0_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
-void usb0_api_function_set_pid_buf(uint16_t pipe);
-void usb0_api_function_set_pid_nak(uint16_t pipe);
-void usb0_api_function_set_pid_stall(uint16_t pipe);
-void usb0_api_function_clear_pid_stall(uint16_t pipe);
-uint16_t usb0_api_function_get_pid(uint16_t pipe);
-int32_t usb0_api_function_check_stall(uint16_t pipe);
-void usb0_api_function_set_sqclr(uint16_t pipe);
-void usb0_api_function_set_sqset(uint16_t pipe);
-void usb0_api_function_set_csclr(uint16_t pipe);
-void usb0_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void usb0_api_function_clear_brdy_sts(uint16_t pipe);
-void usb0_api_function_clear_bemp_sts(uint16_t pipe);
-void usb0_api_function_clear_nrdy_sts(uint16_t pipe);
-
-void usb0_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB0_FUNCTION_API_H */
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb0_function_dmacdrv.h Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* 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_dmacdrv.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB0_FUNCTION_DMACDRV_H
-#define USB0_FUNCTION_DMACDRV_H
-
-
-/*******************************************************************************
-Includes <System Includes> , "Project Includes"
-*******************************************************************************/
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-typedef struct dmac_transinfo
-{
- uint32_t src_addr; /* Transfer source address */
- uint32_t dst_addr; /* Transfer destination address */
- uint32_t count; /* Transfer byte count */
- uint32_t src_size; /* Transfer source data size */
- uint32_t dst_size; /* Transfer destination data size */
- uint32_t saddr_dir; /* Transfer source address direction */
- uint32_t daddr_dir; /* Transfer destination address direction */
-} dmac_transinfo_t;
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-/* ==== Transfer specification of the sample program ==== */
-#define DMAC_SAMPLE_SINGLE (0) /* Single transfer */
-#define DMAC_SAMPLE_CONTINUATION (1) /* Continuous transfer (use REN bit) */
-
-/* ==== DMA modes ==== */
-#define DMAC_MODE_REGISTER (0) /* Register mode */
-#define DMAC_MODE_LINK (1) /* Link mode */
-
-/* ==== Transfer requests ==== */
-#define DMAC_REQ_MODE_EXT (0) /* External request */
-#define DMAC_REQ_MODE_PERI (1) /* On-chip peripheral module request */
-#define DMAC_REQ_MODE_SOFT (2) /* Auto-request (request by software) */
-
-/* ==== DMAC transfer sizes ==== */
-#define DMAC_TRANS_SIZE_8 (0) /* 8 bits */
-#define DMAC_TRANS_SIZE_16 (1) /* 16 bits */
-#define DMAC_TRANS_SIZE_32 (2) /* 32 bits */
-#define DMAC_TRANS_SIZE_64 (3) /* 64 bits */
-#define DMAC_TRANS_SIZE_128 (4) /* 128 bits */
-#define DMAC_TRANS_SIZE_256 (5) /* 256 bits */
-#define DMAC_TRANS_SIZE_512 (6) /* 512 bits */
-#define DMAC_TRANS_SIZE_1024 (7) /* 1024 bits */
-
-/* ==== Address increment for transferring ==== */
-#define DMAC_TRANS_ADR_NO_INC (1) /* Not increment */
-#define DMAC_TRANS_ADR_INC (0) /* Increment */
-
-/* ==== Method for detecting DMA request ==== */
-#define DMAC_REQ_DET_FALL (0) /* Falling edge detection */
-#define DMAC_REQ_DET_RISE (1) /* Rising edge detection */
-#define DMAC_REQ_DET_LOW (2) /* Low level detection */
-#define DMAC_REQ_DET_HIGH (3) /* High level detection */
-
-/* ==== Request Direction ==== */
-#define DMAC_REQ_DIR_SRC (0) /* DMAREQ is the source/ DMAACK is active when reading */
-#define DMAC_REQ_DIR_DST (1) /* DMAREQ is the destination/ DMAACK is active when writing */
-
-/* ==== Descriptors ==== */
-#define DMAC_DESC_HEADER (0) /* Header */
-#define DMAC_DESC_SRC_ADDR (1) /* Source Address */
-#define DMAC_DESC_DST_ADDR (2) /* Destination Address */
-#define DMAC_DESC_COUNT (3) /* Transaction Byte */
-#define DMAC_DESC_CHCFG (4) /* Channel Confg */
-#define DMAC_DESC_CHITVL (5) /* Channel Interval */
-#define DMAC_DESC_CHEXT (6) /* Channel Extension */
-#define DMAC_DESC_LINK_ADDR (7) /* Link Address */
-
-/* ==== On-chip peripheral module requests ===== */
-typedef enum dmac_request_factor
-{
- DMAC_REQ_USB0_DMA0_TX, /* USB_0 channel 0 transmit FIFO empty */
- DMAC_REQ_USB0_DMA0_RX, /* USB_0 channel 0 receive FIFO full */
- DMAC_REQ_USB0_DMA1_TX, /* USB_0 channel 1 transmit FIFO empty */
- DMAC_REQ_USB0_DMA1_RX, /* USB_0 channel 1 receive FIFO full */
- DMAC_REQ_USB1_DMA0_TX, /* USB_1 channel 0 transmit FIFO empty */
- DMAC_REQ_USB1_DMA0_RX, /* USB_1 channel 0 receive FIFO full */
- DMAC_REQ_USB1_DMA1_TX, /* USB_1 channel 1 transmit FIFO empty */
- DMAC_REQ_USB1_DMA1_RX, /* USB_1 channel 1 receive FIFO full */
-} dmac_request_factor_t;
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-void usb0_function_DMAC1_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
- uint32_t request_factor, uint32_t req_direction);
-int32_t usb0_function_DMAC1_Open(uint32_t req);
-void usb0_function_DMAC1_Close(uint32_t *remain);
-void usb0_function_DMAC1_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-void usb0_function_DMAC2_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
- uint32_t request_factor, uint32_t req_direction);
-int32_t usb0_function_DMAC2_Open(uint32_t req);
-void usb0_function_DMAC2_Close(uint32_t *remain);
-void usb0_function_DMAC2_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB0_FUNCTION_DMACDRV_H */
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/common/usb0_function_dataio.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2933 +0,0 @@
-/*******************************************************************************
-* 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_dataio.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
-*******************************************************************************/
-static uint16_t g_usb0_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
-
-static void usb0_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
-static void usb0_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void usb0_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static void usb0_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
-static void usb0_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
-static uint16_t usb0_function_read_dma_d0(uint16_t pipe);
-static uint16_t usb0_function_read_dma_d1(uint16_t pipe);
-static uint16_t usb0_function_write_dma_d0(uint16_t pipe);
-static uint16_t usb0_function_write_dma_d1(uint16_t pipe);
-
-static void usb0_function_read_c_fifo(uint16_t pipe, uint16_t count);
-static void usb0_function_write_c_fifo(uint16_t Pipe, uint16_t count);
-static void usb0_function_read_d0_fifo(uint16_t pipe, uint16_t count);
-static void usb0_function_write_d0_fifo(uint16_t pipe, uint16_t count);
-static void usb0_function_read_d1_fifo(uint16_t pipe, uint16_t count);
-static void usb0_function_write_d1_fifo(uint16_t pipe, uint16_t count);
-
-static void usb0_function_clear_transaction_counter(uint16_t pipe);
-static void usb0_function_set_transaction_counter(uint16_t pipe, uint32_t count);
-
-static uint32_t usb0_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
-
-static uint16_t usb0_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
-static uint16_t usb0_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
-
-
-/*******************************************************************************
-* Function Name: usb0_function_start_send_transfer
-* Description : Starts the USB data communication using pipe specified by the argument.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t size ; Data Size
-* : uint8_t *data ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND ; Write end
-* : DEVDRV_USBF_WRITESHRT ; short data
-* : DEVDRV_USBF_WRITING ; Continue of data write
-* : DEVDRV_USBF_WRITEDMA ; Write DMA
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
- uint16_t status;
- uint16_t usefifo;
- uint16_t mbw;
-
- g_usb0_function_data_count[pipe] = size;
- g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
-
- usb0_function_clear_bemp_sts(pipe);
- usb0_function_clear_brdy_sts(pipe);
- usb0_function_clear_nrdy_sts(pipe);
-
- mbw = usb0_function_get_mbw(size, (uint32_t)data);
-
- usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
- switch (usefifo)
- {
- case USB_FUNCTION_D0FIFO_USE:
- case USB_FUNCTION_D0FIFO_DMA:
- usefifo = USB_FUNCTION_D0USE;
- break;
-
- case USB_FUNCTION_D1FIFO_USE:
- case USB_FUNCTION_D1FIFO_DMA:
- usefifo = USB_FUNCTION_D1USE;
- break;
-
- default:
- usefifo = USB_FUNCTION_CUSE;
- break;
- };
-
- usb0_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
-
- usb0_function_clear_transaction_counter(pipe);
-
- usb0_function_aclrm(pipe);
-
- status = usb0_function_write_buffer(pipe);
-
- if (status != DEVDRV_USBF_FIFOERROR)
- {
- usb0_function_set_pid_buf(pipe);
- }
-
- return status;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer
-* Description : Writes data in the buffer allocated in the pipe specified by
-* : the argument. The FIFO for using is set in the pipe definition table.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND ; Write end
-* : DEVDRV_USBF_WRITESHRT ; short data
-* : DEVDRV_USBF_WRITING ; Continue of data write
-* : DEVDRV_USBF_WRITEDMA ; Write DMA
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer (uint16_t pipe)
-{
- uint16_t status;
- uint16_t usefifo;
-
- g_usb0_function_PipeIgnore[pipe] = 0;
- usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
- switch (usefifo)
- {
- case USB_FUNCTION_D0FIFO_USE:
- status = usb0_function_write_buffer_d0(pipe);
- break;
-
- case USB_FUNCTION_D1FIFO_USE:
- status = usb0_function_write_buffer_d1(pipe);
- break;
-
- case USB_FUNCTION_D0FIFO_DMA:
- status = usb0_function_write_dma_d0(pipe);
- break;
-
- case USB_FUNCTION_D1FIFO_DMA:
- status = usb0_function_write_dma_d1(pipe);
- break;
-
- default:
- status = usb0_function_write_buffer_c(pipe);
- break;
- };
-
- switch (status)
- {
- case DEVDRV_USBF_WRITING: /* Continue of data write */
- usb0_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
- usb0_function_enable_brdy_int(pipe); /* Enable Ready Interrupt */
- break;
-
- case DEVDRV_USBF_WRITEEND: /* End of data write */
- case DEVDRV_USBF_WRITESHRT: /* End of data write */
- usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
- usb0_function_clear_nrdy_sts(pipe);
- usb0_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
- /* for last transfer */
- usb0_function_enable_bemp_int(pipe); /* Enable Empty Interrupt */
- break;
-
- case DEVDRV_USBF_WRITEDMA: /* DMA write */
- usb0_function_clear_nrdy_sts(pipe);
- usb0_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
- break;
-
- case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
- default:
- usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
- usb0_function_disable_bemp_int(pipe); /* Disable Empty Interrupt */
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
- break;
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer_c
-* Description : Writes data in the buffer allocated in the pipe specified in
-* : the argument. Writes data by CPU transfer using CFIFO.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND ; Write end
-* : DEVDRV_USBF_WRITESHRT ; short data
-* : DEVDRV_USBF_WRITING ; Continue of data write
-* : DEVDRV_USBF_WRITEDMA ; Write DMA
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer_c (uint16_t pipe)
-{
- uint32_t count;
- uint16_t size;
- uint16_t buffer;
- uint16_t mxps;
- uint16_t status;
- uint16_t mbw;
-
- if (g_usb0_function_CtrZeroLengthFlag == 1)
- {
- g_usb0_function_CtrZeroLengthFlag = 0; /* Zero Length Packet Flag CLR */
- return DEVDRV_USBF_WRITEEND;
- }
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
- if (pipe == USB_FUNCTION_PIPE0)
- {
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
- }
- else
- {
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
- }
-
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- size = usb0_function_get_buf_size(pipe); /* Data buffer size */
- mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
-
- if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
- {
- status = DEVDRV_USBF_WRITEEND; /* write continues */
- count = g_usb0_function_data_count[pipe];
-
- if (count == 0)
- {
- status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
- }
-
- if ((count % mxps) != 0)
- {
- status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
- }
- }
- else
- {
- status = DEVDRV_USBF_WRITING; /* write continues */
- count = (uint32_t)size;
- }
-
- usb0_function_write_c_fifo(pipe, (uint16_t)count);
-
- if (g_usb0_function_data_count[pipe] < (uint32_t)size)
- {
- g_usb0_function_data_count[pipe] = 0;
-
- if (RZA_IO_RegRead_16(&USB200.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
- {
- USB200.CFIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
- g_usb0_function_CtrZeroLengthFlag = 1; /* Zero Length Packet Flag */
- }
- }
- else
- {
- g_usb0_function_data_count[pipe] -= count;
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer_d0
-* Description : Writes data in the buffer allocated in the pipe specified in the argument.
-* : Writes data by CPU transfer using D0FIFO.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND ; Write end
-* : DEVDRV_USBF_WRITESHRT ; short data
-* : DEVDRV_USBF_WRITING ; Continue of data write
-* : DEVDRV_USBF_WRITEDMA ; Write DMA
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer_d0 (uint16_t pipe)
-{
- uint32_t count;
- uint16_t size;
- uint16_t buffer;
- uint16_t mxps;
- uint16_t status;
- uint16_t mbw;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- size = usb0_function_get_buf_size(pipe); /* Data buffer size */
- mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
-
- if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
- {
- status = DEVDRV_USBF_WRITEEND; /* write continues */
- count = g_usb0_function_data_count[pipe];
-
- if (count == 0)
- {
- status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
- }
-
- if ((count % mxps) != 0)
- {
- status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
- }
- }
- else
- {
- status = DEVDRV_USBF_WRITING; /* write continues */
- count = (uint32_t)size;
- }
-
- usb0_function_write_d0_fifo(pipe, (uint16_t)count);
-
- if (g_usb0_function_data_count[pipe] < (uint32_t)size)
- {
- g_usb0_function_data_count[pipe] = 0;
- if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
- {
- USB200.D0FIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
- }
- }
- else
- {
- g_usb0_function_data_count[pipe] -= count;
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_buffer_d1
-* Description : Writes data in the buffer allocated in the pipe specified in the argument.
-* : Writes data by CPU transfer using D1FIFO.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND ; Write end
-* : DEVDRV_USBF_WRITESHRT ; short data
-* : DEVDRV_USBF_WRITING ; Continue of data write
-* : DEVDRV_USBF_WRITEDMA ; Write DMA
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_write_buffer_d1 (uint16_t pipe)
-{
- uint32_t count;
- uint16_t size;
- uint16_t buffer;
- uint16_t mxps;
- uint16_t status;
- uint16_t mbw;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- size = usb0_function_get_buf_size(pipe); /* Data buffer size */
- mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
-
- if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
- {
- status = DEVDRV_USBF_WRITEEND; /* write continues */
- count = g_usb0_function_data_count[pipe];
-
- if (count == 0)
- {
- status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
- }
-
- if ((count % mxps) != 0)
- {
- status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
- }
- }
- else
- {
- status = DEVDRV_USBF_WRITING; /* write continues */
- count = (uint32_t)size;
- }
-
- usb0_function_write_d1_fifo(pipe, (uint16_t)count);
-
- if (g_usb0_function_data_count[pipe] < (uint32_t)size)
- {
- g_usb0_function_data_count[pipe] = 0;
-
- if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
- {
- USB200.D1FIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
- }
- }
- else
- {
- g_usb0_function_data_count[pipe] -= count;
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_dma_d0
-* Description : Writes data in the buffer allocated in the pipe specified in the argument.
-* : Writes data by DMA transfer using D0FIFO.
-* : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND : Write end
-* : DEVDRV_USBF_WRITESHRT : short data
-* : DEVDRV_USBF_WRITING : Continue of data write
-* : DEVDRV_USBF_WRITEDMA : Write DMA
-* : DEVDRV_USBF_FIFOERROR : FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_write_dma_d0 (uint16_t pipe)
-{
- uint32_t count;
- uint16_t size;
- uint16_t buffer;
- uint16_t status;
- uint16_t mbw;
- uint16_t dfacc = 0;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- size = usb0_function_get_buf_size(pipe); /* Data buffer size */
- count = g_usb0_function_data_count[pipe];
-
- if (count != 0)
- {
- g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
-
- if ((count % size) != 0)
- {
- g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
- }
- else
- {
- g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
- }
-
- dfacc = usb0_function_set_dfacc_d0(mbw, count);
-
- if (mbw == USB_FUNCTION_BITMBW_32)
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2; /* 32bit transfer */
- }
- else if (mbw == USB_FUNCTION_BITMBW_16)
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1; /* 16bit transfer */
- }
- else
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0; /* 8bit transfer */
- }
-
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo = USB_FUNCTION_D0FIFO_DMA;
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir = USB_FUNCTION_BUF2FIFO;
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes = count;
-
- Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
- usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
- RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
- g_usb0_function_data_count[pipe] = 0;
- g_usb0_function_data_pointer[pipe] += count;
- status = DEVDRV_USBF_WRITEDMA; /* DMA write */
- }
- else
- {
- if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
- {
- RZA_IO_RegWrite_16(&USB200.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
- }
- status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_dma_d1
-* Description : Writes data in the buffer allocated in the pipe specified in the argument.
-* : Writes data by DMA transfer using D1FIFO.
-* : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : DEVDRV_USBF_WRITEEND : Write end
-* : DEVDRV_USBF_WRITESHRT : short data
-* : DEVDRV_USBF_WRITING : Continue of data write
-* : DEVDRV_USBF_WRITEDMA : Write DMA
-* : DEVDRV_USBF_FIFOERROR : FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_write_dma_d1 (uint16_t pipe)
-{
- uint32_t count;
- uint16_t size;
- uint16_t buffer;
- uint16_t status;
- uint16_t mbw;
- uint16_t dfacc=0;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
-
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- size = usb0_function_get_buf_size(pipe); /* Data buffer size */
- count = g_usb0_function_data_count[pipe];
-
- if (count != 0)
- {
- g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
- if ((count % size) != 0)
- {
- g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
- }
- else
- {
- g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
- }
-
- dfacc = usb0_function_set_dfacc_d1(mbw, count);
-
- if (mbw == USB_FUNCTION_BITMBW_32)
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2; /* 32bit transfer */
- }
- else if (mbw == USB_FUNCTION_BITMBW_16)
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1; /* 16bit transfer */
- }
- else
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0; /* 8bit transfer */
- }
-
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo = USB_FUNCTION_D1FIFO_DMA;
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir = USB_FUNCTION_BUF2FIFO;
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes = count;
-
- Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
- usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
- RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-
- g_usb0_function_data_count[pipe] = 0;
- g_usb0_function_data_pointer[pipe] += count;
-
- status = DEVDRV_USBF_WRITEDMA; /* DMA write */
- }
- else
- {
- if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
- {
- RZA_IO_RegWrite_16(&USB200.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
- }
- status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_transfer
-* Description : Starts USB data reception using the pipe specified in the argument.
-* : The FIFO for using is set in the pipe definition table.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t size ; Data Size
-* : uint8_t *data ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb0_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
- uint16_t usefifo;
-
- usb0_function_clear_bemp_sts(pipe);
- usb0_function_clear_brdy_sts(pipe);
- usb0_function_clear_nrdy_sts(pipe);
-
- usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
- switch (usefifo)
- {
- case USB_FUNCTION_D0FIFO_USE:
- usb0_function_start_receive_trns_d0(pipe, size, data);
- break;
-
- case USB_FUNCTION_D1FIFO_USE:
- usb0_function_start_receive_trns_d1(pipe, size, data);
- break;
-
- case USB_FUNCTION_D0FIFO_DMA:
- usb0_function_start_receive_dma_d0(pipe, size, data);
- break;
-
- case USB_FUNCTION_D1FIFO_DMA:
- usb0_function_start_receive_dma_d1(pipe, size, data);
- break;
-
- default:
- usb0_function_start_receive_trns_c(pipe, size, data);
- break;
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_trns_c
-* Description : Reads data from the buffer allocated in the pipe specified in the argument.
-* : Reads data by CPU transfer using CFIFO.
-* : When storing data in the buffer allocated in the pipe specified in the
-* : argument, BRDY interrupt is generated to read data
-* : in the interrupt.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t size ; Data Size
-* : uint8_t *data ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
-{
- uint16_t mbw;
-
- usb0_function_set_pid_nak(pipe);
- g_usb0_function_data_count[pipe] = size;
- g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
- g_usb0_function_PipeIgnore[pipe] = 0;
-
- g_usb0_function_PipeDataSize[pipe] = size;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
-
- mbw = usb0_function_get_mbw(size, (uint32_t)data);
- usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
- USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
- usb0_function_set_transaction_counter(pipe, size);
-
- usb0_function_aclrm(pipe);
-
- usb0_function_enable_nrdy_int(pipe);
- usb0_function_enable_brdy_int(pipe);
-
- usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_trns_d0
-* Description : Reads data from the buffer allocated in the pipe specified in the argument.
-* : Reads data by CPU transfer using D0FIFO.
-* : This function does not read data from the buffer.
-* : When storing data in the buffer allocated in the pipe specified
-* : in the argument, BRDY interrupt is generated to read data in the
-* : interrupt.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t size ; Data Size
-* : uint8_t *data ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
- uint16_t mbw;
-
- usb0_function_set_pid_nak(pipe);
- g_usb0_function_data_count[pipe] = size;
- g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
- g_usb0_function_PipeIgnore[pipe] = 0;
-
- g_usb0_function_PipeDataSize[pipe] = size;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
-
- mbw = usb0_function_get_mbw(size, (uint32_t)data);
- usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
- usb0_function_set_transaction_counter(pipe, size);
-
- usb0_function_aclrm(pipe);
-
- usb0_function_enable_nrdy_int(pipe);
- usb0_function_enable_brdy_int(pipe);
-
- usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_trns_d1
-* Description : Reads data from the buffer allocated in the pipe specified in the argument.
-* : Reads data by CPU transfer using D1FIFO.
-* : This function does not read data from the buffer.
-* : When storing data in the buffer allocated in the pipe specified
-* : in the argument, BRDY interrupt is generated to read data.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t size ; Data Size
-* : uint8_t *data ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
- uint16_t mbw;
-
- usb0_function_set_pid_nak(pipe);
- g_usb0_function_data_count[pipe] = size;
- g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
- g_usb0_function_PipeIgnore[pipe] = 0;
-
- g_usb0_function_PipeDataSize[pipe] = size;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
-
- mbw = usb0_function_get_mbw(size, (uint32_t)data);
- usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
- usb0_function_set_transaction_counter(pipe, size);
-
- usb0_function_aclrm(pipe);
-
- usb0_function_enable_nrdy_int(pipe);
- usb0_function_enable_brdy_int(pipe);
-
- usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_dma_d0
-* Description : Reads data from the buffer allocated in the pipe specified in the argument.
-* : Reads data by DMA transfer using D0FIFO.
-* : This function does not read data from the buffer.
-* : When storing data in the buffer allocated in the pipe specified
-* : in the argument, delivered read request to DMAC to read data from
-* : the buffer by DMAC.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t size ; Data Size
-* : uint8_t *data ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
- uint16_t mbw;
-
- usb0_function_set_pid_nak(pipe);
- g_usb0_function_data_count[pipe] = size;
- g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
- g_usb0_function_PipeIgnore[pipe] = 0;
-
- g_usb0_function_PipeDataSize[pipe] = 0;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
-
- mbw = usb0_function_get_mbw(size, (uint32_t)data);
- usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
- usb0_function_set_transaction_counter(pipe, size);
-
- usb0_function_aclrm(pipe);
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- usb0_function_read_dma(pipe);
-
- usb0_function_enable_nrdy_int(pipe);
- usb0_function_enable_brdy_int(pipe);
- }
- else
- {
- usb0_function_enable_nrdy_int(pipe);
- usb0_function_enable_brdy_int(pipe);
- }
-
- usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_start_receive_dma_d1
-* Description : Read data from the buffer allocated in the pipe specified in the argument.
-* : Reads data by DMA transfer using D0FIFO.
-* : This function does not read data from the buffer.
-* : When storing data in the buffer allocated in the pipe specified
-* : in the argument, delivered read request to DMAC to read data from
-* : the buffer by DMAC.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t size ; Data Size
-* : uint8_t *data ; Data Address
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
-{
- uint16_t mbw;
-
- usb0_function_set_pid_nak(pipe);
- g_usb0_function_data_count[pipe] = size;
- g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
- g_usb0_function_PipeIgnore[pipe] = 0;
-
- g_usb0_function_PipeDataSize[pipe] = 0;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
-
- mbw = usb0_function_get_mbw(size, (uint32_t)data);
- usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
- usb0_function_set_transaction_counter(pipe, size);
-
- usb0_function_aclrm(pipe);
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- usb0_function_read_dma(pipe);
-
- usb0_function_enable_nrdy_int(pipe);
- usb0_function_enable_brdy_int(pipe);
- }
- else
- {
- usb0_function_enable_nrdy_int(pipe);
- usb0_function_enable_brdy_int(pipe);
- }
-
- usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer
-* Description : Reads data from the buffer allocated in the pipe specified
-* : in the argument.
-* : Uses FIF0 set in the pipe definition table.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : USB_FUNCTION_READEND ; Read end
-* : USB_FUNCTION_READSHRT ; short data
-* : USB_FUNCTION_READING ; Continue of data read
-* : USB_FUNCTION_READOVER ; buffer over
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer (uint16_t pipe)
-{
- uint16_t status;
-
- g_usb0_function_PipeIgnore[pipe] = 0;
-
- if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
- {
- status = usb0_function_read_buffer_d0(pipe);
- }
- else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
- {
- status = usb0_function_read_buffer_d1(pipe);
- }
- else
- {
- status = usb0_function_read_buffer_c(pipe);
- }
-
- switch (status)
- {
- case USB_FUNCTION_READING: /* Continue of data read */
- break;
-
- case USB_FUNCTION_READEND: /* End of data read */
- case USB_FUNCTION_READSHRT: /* End of data read */
- usb0_function_disable_brdy_int(pipe);
- g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- break;
-
- case USB_FUNCTION_READOVER: /* buffer over */
- if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
- {
- USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
- }
- else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
- {
- USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
- }
- else
- {
- USB200.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
- }
- usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
- g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
- break;
-
- case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
- default:
- usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
- break;
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer_c
-* Description : Reads data from the buffer allocated in the pipe specified in the argument.
-* : Reads data by CPU transfer using CFIFO.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : USB_FUNCTION_READEND ; Read end
-* : USB_FUNCTION_READSHRT ; short data
-* : USB_FUNCTION_READING ; Continue of data read
-* : USB_FUNCTION_READOVER ; buffer over
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer_c (uint16_t pipe)
-{
- uint32_t count;
- uint32_t dtln;
- uint16_t buffer;
- uint16_t mxps;
- uint16_t status;
- uint16_t mbw;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
-
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
- mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
-
- if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
- {
- status = USB_FUNCTION_READOVER;
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- count = g_usb0_function_data_count[pipe];
- }
- else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
- {
- status = USB_FUNCTION_READEND;
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- count = dtln;
-
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- }
- }
- else /* continue Receive data */
- {
- status = USB_FUNCTION_READING;
- count = dtln;
-
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- }
- }
-
- if (count == 0) /* 0 length packet */
- {
- USB200.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
- }
- else
- {
- usb0_function_read_c_fifo(pipe, (uint16_t)count);
- }
-
- g_usb0_function_data_count[pipe] -= count;
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer_d0
-* Description : Reads data from the buffer allocated in the pipe specified in
-* : the argument.
-* : Reads data by CPU transfer using D0FIFO.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : USB_FUNCTION_READEND ; Read end
-* : USB_FUNCTION_READSHRT ; short data
-* : USB_FUNCTION_READING ; Continue of data read
-* : USB_FUNCTION_READOVER ; buffer over
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer_d0 (uint16_t pipe)
-{
- uint32_t count;
- uint32_t dtln;
- uint16_t buffer;
- uint16_t mxps;
- uint16_t status;
- uint16_t mbw;
- uint16_t pipebuf_size;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
-
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
- mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
-
- if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
- {
- status = USB_FUNCTION_READOVER;
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- count = g_usb0_function_data_count[pipe];
- }
- else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
- {
- status = USB_FUNCTION_READEND;
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- count = dtln;
-
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- }
- }
- else /* continue Receive data */
- {
- status = USB_FUNCTION_READING;
- count = dtln;
-
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- }
- else
- {
- pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
-
- if (count != pipebuf_size)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- }
- }
- }
-
- if (count == 0) /* 0 length packet */
- {
- USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
- }
- else
- {
- usb0_function_read_d0_fifo(pipe, (uint16_t)count);
- }
-
- g_usb0_function_data_count[pipe] -= count;
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_buffer_d1
-* Description : Reads data from the buffer allocated in the pipe specified
-* : in the argument.
-* : Reads data by CPU transfer using D1FIFO.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : USB_FUNCTION_READEND ; Read end
-* : USB_FUNCTION_READSHRT ; short data
-* : USB_FUNCTION_READING ; Continue of data read
-* : USB_FUNCTION_READOVER ; buffer over
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_buffer_d1 (uint16_t pipe)
-{
- uint32_t count;
- uint32_t dtln;
- uint16_t buffer;
- uint16_t mxps;
- uint16_t status;
- uint16_t mbw;
- uint16_t pipebuf_size;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
-
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
- mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
-
- if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
- {
- status = USB_FUNCTION_READOVER;
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- count = g_usb0_function_data_count[pipe];
- }
- else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
- {
- status = USB_FUNCTION_READEND;
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- count = dtln;
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- }
- }
- else /* continue Receive data */
- {
- status = USB_FUNCTION_READING;
- count = dtln;
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- }
- else
- {
- pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
-
- if (count != pipebuf_size)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- usb0_function_set_pid_nak(pipe); /* Set NAK */
- }
- }
- }
-
- if (count == 0) /* 0 length packet */
- {
- USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
- }
- else
- {
- usb0_function_read_d1_fifo(pipe, (uint16_t)count);
- }
-
- g_usb0_function_data_count[pipe] -= count;
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_dma
-* Description : Reads data from the buffer allocated in the pipe specified
-* : in the argument.
-* : Reads data by DMA transfer using D0FIFO or D1FIFO.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : USB_FUNCTION_READEND ; Read end
-* : USB_FUNCTION_READSHRT ; short data
-* : USB_FUNCTION_READING ; Continue of data read
-* : USB_FUNCTION_READOVER ; buffer over
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_function_read_dma (uint16_t pipe)
-{
- uint16_t status;
-
- g_usb0_function_PipeIgnore[pipe] = 0;
- if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
- {
- status = usb0_function_read_dma_d0(pipe);
- }
- else
- {
- status = usb0_function_read_dma_d1(pipe);
- }
-
- switch (status)
- {
- case USB_FUNCTION_READING: /* Continue of data read */
- break;
-
- case USB_FUNCTION_READZERO: /* End of data read */
- usb0_function_disable_brdy_int(pipe);
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- break;
-
- case USB_FUNCTION_READEND: /* End of data read */
- case USB_FUNCTION_READSHRT: /* End of data read */
- usb0_function_disable_brdy_int(pipe);
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
- }
- break;
-
- case USB_FUNCTION_READOVER: /* buffer over */
- usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
- }
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
- break;
-
- case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
- default:
- usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
- break;
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_dma_d0
-* Description : Writes data in the buffer allocated in the pipe specified
-* : in the argument.
-* : Reads data by DMA transfer using D0FIFO.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : USB_FUNCTION_READEND ; Read end
-* : USB_FUNCTION_READSHRT ; short data
-* : USB_FUNCTION_READZERO ; zero data
-* : USB_FUNCTION_READING ; Continue of data read
-* : USB_FUNCTION_READOVER ; buffer over
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_read_dma_d0 (uint16_t pipe)
-{
- uint32_t count;
- uint32_t dtln;
- uint16_t buffer;
- uint16_t mxps;
- uint16_t status;
- uint16_t mbw;
- uint16_t dfacc = 0;
- uint16_t pipebuf_size;
-
- g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- count = g_usb0_function_data_count[pipe];
- status = USB_FUNCTION_READING;
- }
- else
- {
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
-
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
- mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
-
- if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
- {
- status = USB_FUNCTION_READOVER;
- count = g_usb0_function_data_count[pipe];
- }
- else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
- {
- status = USB_FUNCTION_READEND;
- count = dtln;
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- }
- }
- else /* continue Receive data */
- {
- status = USB_FUNCTION_READING;
- count = dtln;
-
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- }
- else
- {
- pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
- if (count != pipebuf_size)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- }
- }
- }
- }
-
- if (count == 0) /* 0 length packet */
- {
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
- status = USB_FUNCTION_READZERO; /* Null Packet receive */
- }
- else
- {
- usb0_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
- /* transaction counter No set */
- /* FRDY = 1, DTLN = 0 -> BRDY */
- }
- }
- else
- {
- dfacc = usb0_function_set_dfacc_d0(mbw, count);
-
- if (mbw == USB_FUNCTION_BITMBW_32)
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2; /* 32bit transfer */
- }
- else if (mbw == USB_FUNCTION_BITMBW_16)
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1; /* 16bit transfer */
- }
- else
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0; /* 8bit transfer */
- }
-
- g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe; /* not use in read operation */
- g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0; /* not use in read operation */
-
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo = USB_FUNCTION_D0FIFO_DMA;
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir = USB_FUNCTION_FIFO2BUF;
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
- g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes = count;
-
- if (status == USB_FUNCTION_READING)
- {
- g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
- }
- else
- {
- g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
- }
-
- Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
-
- usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
- RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
- 1,
- USB_DnFIFOSEL_DREQE_SHIFT,
- USB_DnFIFOSEL_DREQE);
- }
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- g_usb0_function_data_count[pipe] -= count;
- g_usb0_function_data_pointer[pipe] += count;
- g_usb0_function_PipeDataSize[pipe] += count;
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_dma_d1
-* Description : Reads data from the buffer allocated in the pipe specified in
-* : the argument.
-* : Reads data by DMA transfer using D1FIFO.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : USB_FUNCTION_READEND ; Read end
-* : USB_FUNCTION_READSHRT ; short data
-* : USB_FUNCTION_READZERO ; zero data
-* : USB_FUNCTION_READING ; Continue of data read
-* : USB_FUNCTION_READOVER ; buffer over
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-static uint16_t usb0_function_read_dma_d1 (uint16_t pipe)
-{
- uint32_t count;
- uint32_t dtln;
- uint16_t buffer;
- uint16_t mxps;
- uint16_t status;
- uint16_t mbw;
- uint16_t dfacc=0;
- uint16_t pipebuf_size;
-
- g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- count = g_usb0_function_data_count[pipe];
- status = USB_FUNCTION_READING;
- }
- else
- {
- buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
- if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
- {
- return DEVDRV_USBF_FIFOERROR;
- }
-
- dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
- mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
-
- if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
- {
- status = USB_FUNCTION_READOVER;
- count = g_usb0_function_data_count[pipe];
- }
- else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
- {
- status = USB_FUNCTION_READEND;
- count = dtln;
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- }
- }
- else /* continue Receive data */
- {
- status = USB_FUNCTION_READING;
- count = dtln;
- if (count == 0)
- {
- status = USB_FUNCTION_READSHRT; /* Null Packet receive */
- }
-
- if ((count % mxps) != 0)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- }
- else
- {
- pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
- if (count != pipebuf_size)
- {
- status = USB_FUNCTION_READSHRT; /* Short Packet receive */
- }
- }
- }
- }
-
- if (count == 0) /* 0 length packet */
- {
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
- status = USB_FUNCTION_READZERO; /* Null Packet receive */
- }
- else
- {
- usb0_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
- /* transaction counter No set */
- /* FRDY = 1, DTLN = 0 -> BRDY */
- }
- }
- else
- {
- dfacc = usb0_function_set_dfacc_d1(mbw, count);
-
- if (mbw == USB_FUNCTION_BITMBW_32)
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2; /* 32bit transfer */
- }
- else if (mbw == USB_FUNCTION_BITMBW_16)
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1; /* 16bit transfer */
- }
- else
- {
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0; /* 8bit transfer */
- }
-
- g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe; /* not use in read operation */
- g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0; /* not use in read operation */
-
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo = USB_FUNCTION_D1FIFO_DMA;
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir = USB_FUNCTION_FIFO2BUF;
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
- g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes = count;
-
- if (status == USB_FUNCTION_READING)
- {
- g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
- }
- else
- {
- g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
- }
-
- Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
-
- usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
-
- RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
- 1,
- USB_DnFIFOSEL_DREQE_SHIFT,
- USB_DnFIFOSEL_DREQE);
- }
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- g_usb0_function_data_count[pipe] -= count;
- g_usb0_function_data_pointer[pipe] += count;
- g_usb0_function_PipeDataSize[pipe] += count;
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_change_fifo_port
-* Description : Allocates FIF0 specified by the argument in the pipe assigned
-* : by the argument. After allocating FIF0, waits in the software
-* : till the corresponding pipe becomes ready.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t fifosel ; Select FIFO
-* : uint16_t isel ; FIFO Access Direction
-* : uint16_t mbw ; FIFO Port Access Bit Width
-* Return Value : DEVDRV_USBF_FIFOERROR ; Error
-* : Others ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
-*******************************************************************************/
-uint16_t usb0_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
- uint16_t buffer;
- uint32_t loop;
- volatile uint32_t loop2;
-
- usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
-
- for (loop = 0; loop < 4; loop++)
- {
- switch (fifosel)
- {
- case USB_FUNCTION_CUSE:
- buffer = USB200.CFIFOCTR;
- break;
-
- case USB_FUNCTION_D0USE:
- case USB_FUNCTION_D0DMA:
- buffer = USB200.D0FIFOCTR;
- break;
-
- case USB_FUNCTION_D1USE:
- case USB_FUNCTION_D1DMA:
- buffer = USB200.D1FIFOCTR;
- break;
-
- default:
- buffer = 0;
- break;
- }
-
- if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
- {
- return buffer;
- }
-
- loop2 = 25;
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
-
- return DEVDRV_USBF_FIFOERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_curpipe
-* Description : Allocates FIF0 specified by the argument in the pipe assigned
-* : by the argument.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t fifosel ; Select FIFO
-* : uint16_t isel ; FIFO Access Direction
-* : uint16_t mbw ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
- uint16_t buffer;
- uint32_t loop;
- volatile uint32_t loop2;
-
- g_usb0_function_mbw[pipe] = mbw;
-
- switch (fifosel)
- {
- case USB_FUNCTION_CUSE:
- buffer = USB200.CFIFOSEL;
- buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
- buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
- USB200.CFIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
- (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
- buffer |= (uint16_t)(isel | pipe | mbw);
- USB200.CFIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
- (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- break;
-
- case USB_FUNCTION_D0DMA:
- case USB_FUNCTION_D0USE:
- buffer = USB200.D0FIFOSEL;
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
- USB200.D0FIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
- (buffer & USB_FUNCTION_BITCURPIPE))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
- buffer |= (uint16_t)(pipe | mbw);
- USB200.D0FIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
- (buffer & USB_FUNCTION_BITCURPIPE))
- {
- break;
- }
-
- loop2 = 100;
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- break;
-
- case USB_FUNCTION_D1DMA:
- case USB_FUNCTION_D1USE:
- buffer = USB200.D1FIFOSEL;
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
- USB200.D1FIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
- (buffer & USB_FUNCTION_BITCURPIPE))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
- buffer |= (uint16_t)(pipe | mbw);
- USB200.D1FIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
- (buffer & USB_FUNCTION_BITCURPIPE))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- break;
-
- default:
- break;
- }
-
- /* Cautions !!!
- * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
- * For details, please look at the data sheet. */
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_curpipe2
-* Description : Allocates FIF0 specified by the argument in the pipe assigned
-* : by the argument.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t fifosel ; Select FIFO
-* : uint16_t isel ; FIFO Access Direction
-* : uint16_t mbw ; FIFO Port Access Bit Width
-* : uint16_t dfacc ; DFACC Access mode
-* Return Value : none
-*******************************************************************************/
-void usb0_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
-{
- uint16_t buffer;
- uint32_t loop;
-#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
- uint32_t dummy;
-#endif
- volatile uint32_t loop2;
-
- g_usb0_function_mbw[pipe] = mbw;
-
- switch (fifosel)
- {
- case USB_FUNCTION_CUSE:
- buffer = USB200.CFIFOSEL;
- buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
- buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
- USB200.CFIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
- (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
- {
- break;
- }
-
- loop2 = 100;
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
- buffer |= (uint16_t)(isel | pipe | mbw);
- USB200.CFIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
- (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- break;
-
- case USB_FUNCTION_D0DMA:
- case USB_FUNCTION_D0USE:
- buffer = USB200.D0FIFOSEL;
-#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
- if (dfacc != 0)
- {
- buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
- }
-#else
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
- USB200.D0FIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
-
-#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
- if (dfacc != 0)
- {
- dummy = USB200.D0FIFO.UINT32;
- }
-#endif
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
- buffer |= (uint16_t)(pipe | mbw);
- USB200.D0FIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- break;
-
- case USB_FUNCTION_D1DMA:
- case USB_FUNCTION_D1USE:
- buffer = USB200.D1FIFOSEL;
-#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
-
- if (dfacc != 0)
- {
- buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
- }
-#else
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
-#endif
- USB200.D1FIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
-#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
- if (dfacc != 0)
- {
- dummy = USB200.D1FIFO.UINT32;
- loop = dummy; // avoid warning.
- }
-#endif
- buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
- buffer |= (uint16_t)(pipe | mbw);
- USB200.D1FIFOSEL = buffer;
-
- for (loop = 0; loop < 4; loop++)
- {
- if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
- {
- break;
- }
-
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
- }
- break;
-
- default:
- break;
- }
-
- /* Cautions !!!
- * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
- * For details, please look at the data sheet. */
- loop2 = 100;
-
- while (loop2-- > 0)
- {
- /* wait */
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_c_fifo
-* Description : Writes data in CFIFO.
-* : Writes data by BYTE/WORD/LONG according to access size
-* : to the pipe specified by the arguments.
-* : Before executing this function, allocating CFIF0 in the specified pipe
-* : should be completed.
-* : Before executing this function, access size to the specified pipe
-* : should be fixed and set in g_usb0_function_mbw[].
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t count ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_write_c_fifo (uint16_t pipe, uint16_t count)
-{
- uint16_t even;
-
- if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
- {
- for (even = count; even; --even)
- {
- USB200.CFIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
- g_usb0_function_data_pointer[pipe] += 1;
- }
- }
- else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
- {
- for (even = (uint16_t)(count / 2); even; --even)
- {
- USB200.CFIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
- g_usb0_function_data_pointer[pipe] += 2;
- }
- }
- else
- {
- for (even = (uint16_t)(count / 4); even; --even)
- {
- USB200.CFIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
- g_usb0_function_data_pointer[pipe] += 4;
- }
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_c_fifo
-* Description : Reads data from CFIFO.
-* : Reads data by BYTE/WORD/LONG according to access size
-* : to the pipe specified by the arguments.
-* : Before executing this function, allocating CFIF0 in the specified pipe
-* : should be completed.
-* : Before executing this function, access size to the specified pipe
-* : should be fixed and set in g_usb0_function_mbw[].
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t count ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_read_c_fifo (uint16_t pipe, uint16_t count)
-{
- uint16_t even;
-
- if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
- {
- for (even = count; even; --even)
- {
- *g_usb0_function_data_pointer[pipe] = USB200.CFIFO.UINT8[HH];
- g_usb0_function_data_pointer[pipe] += 1;
- }
- }
- else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
- {
- for (even = (uint16_t)((count + 1) / 2); even; --even)
- {
- *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT16[H];
- g_usb0_function_data_pointer[pipe] += 2;
- }
- }
- else
- {
- for (even = (uint16_t)((count + 3) / 4); even; --even)
- {
- *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT32;
- g_usb0_function_data_pointer[pipe] += 4;
- }
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_d0_fifo
-* Description : Writes data in D0FIFO.
-* : Writes data by BYTE/WORD/LONG according to access size
-* : to the pipe specified by the arguments.
-* : Before executing this function, allocating CFIF0 in the specified pipe
-* : should be completed.
-* : Before executing this function, access size to the specified pipe
-* : should be fixed and set in g_usb0_function_mbw[].
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t count ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_write_d0_fifo (uint16_t pipe, uint16_t count)
-{
- uint16_t even;
-
- if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
- {
- for (even = count; even; --even)
- {
- USB200.D0FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
- g_usb0_function_data_pointer[pipe] += 1;
- }
- }
- else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
- {
- for (even = (uint16_t)(count / 2); even; --even)
- {
- USB200.D0FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
- g_usb0_function_data_pointer[pipe] += 2;
- }
- }
- else
- {
- for (even = (uint16_t)(count / 4); even; --even)
- {
- USB200.D0FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
- g_usb0_function_data_pointer[pipe] += 4;
- }
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_d0_fifo
-* Description : Reads data from D0FIFO.
-* : Reads data by BYTE/WORD/LONG according to access size
-* : to the pipe specified by the arguments.
-* : Before executing this function, allocating DOFIF0 in the specified pipe
-* : should be completed.
-* : Before executing this function, access size to the specified pipe
-* : should be fixed and set in g_usb0_function_mbw[].
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t count ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_read_d0_fifo (uint16_t pipe, uint16_t count)
-{
- uint16_t even;
-
- if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
- {
- for (even = count; even; --even)
- {
- *g_usb0_function_data_pointer[pipe] = USB200.D0FIFO.UINT8[HH];
- g_usb0_function_data_pointer[pipe] += 1;
- }
- }
- else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
- {
- for (even = (uint16_t)((count + 1) / 2); even; --even)
- {
- *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT16[H];
- g_usb0_function_data_pointer[pipe] += 2;
- }
- }
- else
- {
- for (even = (uint16_t)((count + 3) / 4); even; --even)
- {
- *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT32;
- g_usb0_function_data_pointer[pipe] += 4;
- }
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_write_d1_fifo
-* Description : Writes data in D1FIFO.
-* : Writes data by BYTE/WORD/LONG according to access size
-* : to the pipe specified by the arguments.
-* : Before executing this function, allocating D1FIF0 in the specified pipe
-* : should be completed.
-* : Before executing this function, access size to the specified pipe
-* : should be fixed and set in g_usb0_function_mbw[].
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t count ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_write_d1_fifo (uint16_t pipe, uint16_t count)
-{
- uint16_t even;
-
- if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
- {
- for (even = count; even; --even)
- {
- USB200.D1FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
- g_usb0_function_data_pointer[pipe] += 1;
- }
- }
- else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
- {
- for (even = (uint16_t)(count / 2); even; --even)
- {
- USB200.D1FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
- g_usb0_function_data_pointer[pipe] += 2;
- }
- }
- else
- {
- for (even = (uint16_t)(count / 4); even; --even)
- {
- USB200.D1FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
- g_usb0_function_data_pointer[pipe] += 4;
- }
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_read_d1_fifo
-* Description : Reads data from D1FIFO.
-* : Reads data by BYTE/WORD/LONG according to access size
-* : to the pipe specified by the arguments.
-* : Before executing this function, allocating D1FIF0 in the specified pipe
-* : should be completed.
-* : Before executing this function, access size to the specified pipe
-* : should be fixed and set in g_usb0_function_mbw[].
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t count ; Data Size(Byte)
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_read_d1_fifo (uint16_t pipe, uint16_t count)
-{
- uint16_t even;
-
- if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
- {
- for (even = count; even; --even)
- {
- *g_usb0_function_data_pointer[pipe] = USB200.D1FIFO.UINT8[HH];
- g_usb0_function_data_pointer[pipe] += 1;
- }
- }
- else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
- {
- for (even = (uint16_t)((count + 1) / 2); even; --even)
- {
- *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT16[H];
- g_usb0_function_data_pointer[pipe] += 2;
- }
- }
- else
- {
- for (even = (uint16_t)((count + 3) / 4); even; --even)
- {
- *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT32;
- g_usb0_function_data_pointer[pipe] += 4;
- }
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_com_get_dmasize
-* Description : Calculates access width of DMA transfer by the argument to
-* : return as the Return Value.
-* Arguments : uint32_t trncount : transfer byte
-* : uint32_t dtptr : transfer data pointer
-* Return Value : DMA transfer size : 0 8bit
-* : : 1 16bit
-* : : 2 32bit
-*******************************************************************************/
-static uint32_t usb0_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
-{
- uint32_t size;
-
- if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
- {
- /* When transfer byte count is odd */
- /* or transfer data area is 8-bit alignment */
- size = 0; /* 8bit */
- }
- else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
- {
- /* When the transfer byte count is multiples of 2 */
- /* or the transfer data area is 16-bit alignment */
- size = 1; /* 16bit */
- }
- else
- {
- /* When the transfer byte count is multiples of 4 */
- /* or the transfer data area is 32-bit alignment */
- size = 2; /* 32bit */
- }
-
- return size;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_get_mbw
-* Description : Calculates access width of DMA to return the value set in MBW.
-* Arguments : uint32_t trncount : transfer byte
-* : uint32_t dtptr : transfer data pointer
-* Return Value : FIFO transfer size : USB_FUNCTION_BITMBW_8 8bit
-* : : USB_FUNCTION_BITMBW_16 16bit
-* : : USB_FUNCTION_BITMBW_32 32bit
-*******************************************************************************/
-uint16_t usb0_function_get_mbw (uint32_t trncount, uint32_t dtptr)
-{
- uint32_t size;
- uint16_t mbw;
-
- size = usb0_function_com_get_dmasize(trncount, dtptr);
-
- if (size == 0)
- {
- /* 8bit */
- mbw = USB_FUNCTION_BITMBW_8;
- }
- else if (size == 1)
- {
- /* 16bit */
- mbw = USB_FUNCTION_BITMBW_16;
- }
- else
- {
- /* 32bit */
- mbw = USB_FUNCTION_BITMBW_32;
- }
-
- return mbw;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_transaction_counter
-* Description : Sets transaction counter by the argument(PIPEnTRN).
-* : Clears transaction before setting to enable transaction counter setting.
-* Arguments : uint16_t pipe ; Pipe number
-* : uint32_t bsize : Data transfer size
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
-{
- uint16_t mxps;
- uint16_t cnt;
-
- if (bsize == 0)
- {
- return;
- }
-
- mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
-
- if ((bsize % mxps) == 0)
- {
- cnt = (uint16_t)(bsize / mxps);
- }
- else
- {
- cnt = (uint16_t)((bsize / mxps) + 1);
- }
-
- switch (pipe)
- {
- case USB_FUNCTION_PIPE1:
- RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPE1TRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPE2:
- RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPE2TRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPE3:
- RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPE3TRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPE4:
- RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPE4TRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPE5:
- RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPE5TRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPE9:
- RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPE9TRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPEA:
- RZA_IO_RegWrite_16(&USB200.PIPEATRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPEATRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPEATRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPEB:
- RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPEBTRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPEC:
- RZA_IO_RegWrite_16(&USB200.PIPECTRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPECTRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPECTRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPED:
- RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPEDTRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPEE:
- RZA_IO_RegWrite_16(&USB200.PIPEETRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPEETRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPEETRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- case USB_FUNCTION_PIPEF:
- RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- USB200.PIPEFTRN = cnt;
- RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
- 1,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- break;
-
- default:
- break;
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_transaction_counter
-* Description : Clears the transaction counter by the argument.
-* : After executing this function, the transaction counter is invalid.
-* Arguments : uint16_t pipe ; Pipe number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_transaction_counter (uint16_t pipe)
-{
- switch (pipe)
- {
- case USB_FUNCTION_PIPE1:
- RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPE2:
- RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPE3:
- RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPE4:
- RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPE5:
- RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPE9:
- RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPEA:
- RZA_IO_RegWrite_16(&USB200.PIPEATRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPEATRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPEB:
- RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPEC:
- RZA_IO_RegWrite_16(&USB200.PIPECTRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPECTRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPED:
- RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPEE:
- RZA_IO_RegWrite_16(&USB200.PIPEETRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPEETRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- case USB_FUNCTION_PIPEF:
- RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
- 0,
- USB_PIPEnTRE_TRENB_SHIFT,
- USB_PIPEnTRE_TRENB);
- RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
- 1,
- USB_PIPEnTRE_TRCLR_SHIFT,
- USB_PIPEnTRE_TRCLR);
- break;
-
- default:
- break;
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_stop_transfer
-* Description : Stops the USB transfer in the pipe specified by the argument.
-* : After stopping the USB transfer, clears the buffer allocated in
-* : the pipe.
-* : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
-* : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
-* : in the corresponding pipe becomes invalid. Sequence bit is also
-* : cleared.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : none
-*******************************************************************************/
-void usb0_function_stop_transfer (uint16_t pipe)
-{
- uint16_t usefifo;
- uint32_t remain;
- uint16_t fifo;
-
- usb0_function_set_pid_nak(pipe);
-
- usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
- switch (usefifo)
- {
- case USB_FUNCTION_D0FIFO_USE:
- usb0_function_clear_transaction_counter(pipe);
- USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
- fifo = USB_FUNCTION_D0USE;
- break;
-
- case USB_FUNCTION_D1FIFO_USE:
- usb0_function_clear_transaction_counter(pipe);
- USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
- fifo = USB_FUNCTION_D1USE;
- break;
-
- case USB_FUNCTION_D0FIFO_DMA:
- remain = Userdef_USB_usb0_function_stop_dma0();
- usb0_function_dma_stop_d0(pipe, remain);
- usb0_function_clear_transaction_counter(pipe);
- USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
- fifo = USB_FUNCTION_D0DMA;
- break;
-
- case USB_FUNCTION_D1FIFO_DMA:
- remain = Userdef_USB_usb0_function_stop_dma1();
- usb0_function_dma_stop_d1(pipe, remain);
- usb0_function_clear_transaction_counter(pipe);
- USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
- fifo = USB_FUNCTION_D1DMA;
- break;
-
- default:
- usb0_function_clear_transaction_counter(pipe);
- USB200.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
- fifo = USB_FUNCTION_CUSE;
- break;
- }
-
- usb0_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
-
- /* Interrupt of pipe set is disabled */
- usb0_function_disable_brdy_int(pipe);
- usb0_function_disable_nrdy_int(pipe);
- usb0_function_disable_bemp_int(pipe);
-
- usb0_function_aclrm(pipe);
- usb0_function_set_csclr(pipe);
-
- if ( g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
- {
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
- }
-
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_dfacc_d0
-* Description : Sets the DFACC setting value in D0FIFO using the transfer size.
-* Arguments : uint16_t mbw ; MBW
-* : uint16_t count ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb0_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
-{
- uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 0;
-#else
- if (mbw == USB_FUNCTION_BITMBW_32)
- {
- if ((count % 32) == 0)
- {
- /* 32byte transfer */
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 2,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 2;
- }
- else if ((count % 16) == 0)
- {
- /* 16byte transfer */
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 1,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 1;
- }
- else
- {
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 0;
- }
- }
- else if (mbw == USB_FUNCTION_BITMBW_16)
- {
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 0;
- }
- else
- {
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D0FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 0;
- }
-#endif
- return dfacc;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_set_dfacc_d1
-* Description : Set the DFACC setting value in D1FIFO using the transfer size.
-* Arguments : uint16_t mbw ; MBW
-* : uint16_t count ; data count
-* Return Value : DFACC Access mode
-*******************************************************************************/
-static uint16_t usb0_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
-{
- uint16_t dfacc = 0;
-
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 0;
-#else
- if (mbw == USB_FUNCTION_BITMBW_32)
- {
- if ((count % 32) == 0)
- {
- /* 32byte transfer */
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 2,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 2;
- }
- else if ((count % 16) == 0)
- {
- /* 16byte transfer */
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 1,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 1;
- }
- else
- {
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 0;
- }
- }
- else if (mbw == USB_FUNCTION_BITMBW_16)
- {
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 0;
- }
- else
- {
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_DFACC_SHIFT,
- USB_DnFBCFG_DFACC);
- RZA_IO_RegWrite_16(&USB200.D1FBCFG,
- 0,
- USB_DnFBCFG_TENDE_SHIFT,
- USB_DnFBCFG_TENDE);
- dfacc = 0;
- }
-#endif
-
- return dfacc;
-}
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/common/usb0_function_dma.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,346 +0,0 @@
-/*******************************************************************************
-* 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_dma.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
-*******************************************************************************/
-static void usb0_function_dmaint(uint16_t fifo);
-static void usb0_function_dmaint_buf2fifo(uint16_t pipe);
-static void usb0_function_dmaint_fifo2buf(uint16_t pipe);
-
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_stop_d0
-* Description : D0FIFO DMA stop
-* Arguments : uint16_t pipe : pipe number
-* : uint32_t remain : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
-{
- uint16_t dtln;
- uint16_t dfacc;
- uint16_t buffer;
- uint16_t sds_b = 1;
-
- dfacc = RZA_IO_RegRead_16(&USB200.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
- if (dfacc == 2)
- {
- sds_b = 32;
- }
- else if (dfacc == 1)
- {
- sds_b = 16;
- }
- else
- {
- if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
- {
- sds_b = 4;
- }
- else if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
- {
- sds_b = 2;
- }
- else
- {
- sds_b = 1;
- }
- }
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
- {
- buffer = USB200.D0FIFOCTR;
- dtln = (buffer & USB_FUNCTION_BITDTLN);
-
- if ((dtln % sds_b) != 0)
- {
- remain += (sds_b - (dtln % sds_b));
- }
- g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
- g_usb0_function_data_count[pipe] = remain;
- }
- }
-
- RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_stop_d1
-* Description : D1FIFO DMA stop
-* Arguments : uint16_t pipe : pipe number
-* : uint32_t remain : transfer byte
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
-{
- uint16_t dtln;
- uint16_t dfacc;
- uint16_t buffer;
- uint16_t sds_b = 1;
-
- dfacc = RZA_IO_RegRead_16(&USB200.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
-
- if (dfacc == 2)
- {
- sds_b = 32;
- }
- else if (dfacc == 1)
- {
- sds_b = 16;
- }
- else
- {
- if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
- {
- sds_b = 4;
- }
- else if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
- {
- sds_b = 2;
- }
- else
- {
- sds_b = 1;
- }
- }
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
- {
- if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
- {
- buffer = USB200.D1FIFOCTR;
- dtln = (buffer & USB_FUNCTION_BITDTLN);
-
- if ((dtln % sds_b) != 0)
- {
- remain += (sds_b - (dtln % sds_b));
- }
- g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
- g_usb0_function_data_count[pipe] = remain;
- }
- }
-
- RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_interrupt_d0fifo
-* Description : This function is DMA interrupt handler entry.
-* : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
-* : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
-* : specified by dma->fifo.
-* : Register this function as DMA complete interrupt.
-* Arguments : uint32_t int_sense ; Interrupts detection mode
-* : ; INTC_LEVEL_SENSITIVE : Level sense
-* : ; INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_interrupt_d0fifo (uint32_t int_sense)
-{
- usb0_function_dmaint(USB_FUNCTION_D0FIFO);
- g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dma_interrupt_d1fifo
-* Description : This function is DMA interrupt handler entry.
-* : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
-* : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
-* : specified by dma->fifo.
-* : Register this function as DMA complete interrupt.
-* Arguments : uint32_t int_sense ; Interrupts detection mode
-* : ; INTC_LEVEL_SENSITIVE : Level sense
-* : ; INTC_EDGE_TRIGGER : Edge trigger
-* Return Value : none
-*******************************************************************************/
-void usb0_function_dma_interrupt_d1fifo (uint32_t int_sense)
-{
- usb0_function_dmaint(USB_FUNCTION_D1FIFO);
- g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dmaint
-* Description : This function is DMA transfer end interrupt
-* Arguments : uint16_t fifo ; fifo number
-* : ; USB_FUNCTION_D0FIFO
-* : ; USB_FUNCTION_D1FIFO
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_dmaint (uint16_t fifo)
-{
- uint16_t pipe;
-
- pipe = g_usb0_function_DmaPipe[fifo];
-
- if (g_usb0_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
- {
- usb0_function_dmaint_buf2fifo(pipe);
- }
- else
- {
- usb0_function_dmaint_fifo2buf(pipe);
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dmaint_fifo2buf
-* Description : Executes read completion from FIFO by DMAC.
-* Arguments : uint16_t pipe : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_dmaint_fifo2buf (uint16_t pipe)
-{
- uint32_t remain;
- uint16_t useport;
-
- if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
- {
- useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
- if (useport == USB_FUNCTION_D0FIFO_DMA)
- {
- remain = Userdef_USB_usb0_function_stop_dma0();
- usb0_function_dma_stop_d0(pipe, remain);
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
- {
- USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- }
- else
- {
- usb0_function_enable_brdy_int(pipe);
- }
- }
- }
- else
- {
- remain = Userdef_USB_usb0_function_stop_dma1();
- usb0_function_dma_stop_d1(pipe, remain);
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
- {
- USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- }
- else
- {
- usb0_function_enable_brdy_int(pipe);
- }
- }
- }
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_dmaint_buf2fifo
-* Description : Executes write completion in FIFO by DMAC.
-* Arguments : uint16_t pipe : pipe number
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_dmaint_buf2fifo (uint16_t pipe)
-{
- uint32_t remain;
- uint16_t useport;
-
- useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
-
- if (useport == USB_FUNCTION_D0FIFO_DMA)
- {
- remain = Userdef_USB_usb0_function_stop_dma0();
- usb0_function_dma_stop_d0(pipe, remain);
-
- if (g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
- {
- RZA_IO_RegWrite_16(&USB200.D0FIFOCTR,
- 1,
- USB_DnFIFOCTR_BVAL_SHIFT,
- USB_DnFIFOCTR_BVAL);
- }
- }
- else
- {
- remain = Userdef_USB_usb0_function_stop_dma1();
- usb0_function_dma_stop_d1(pipe, remain);
-
- if (g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
- {
- RZA_IO_RegWrite_16(&USB200.D1FIFOCTR,
- 1,
- USB_DnFIFOCTR_BVAL_SHIFT,
- USB_DnFIFOCTR_BVAL);
- }
- }
-
- usb0_function_enable_bemp_int(pipe);
-}
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/common/usb0_function_intrn.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,249 +0,0 @@
-/*******************************************************************************
-* 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_intrn.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_brdy_int
-* Description : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
-* : According to the pipe that interrupt is generated in,
-* : reads/writes buffer allocated in the pipe.
-* : This function is executed in the BRDY interrupt handler.
-* : This function clears BRDY interrupt status and BEMP interrupt
-* : status.
-* Arguments : uint16_t Status ; BRDYSTS Register Value
-* : uint16_t Int_enbl ; BRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_brdy_int (uint16_t status, uint16_t int_enb)
-{
- uint32_t int_sense = 0;
- uint16_t pipe;
- uint16_t pipebit;
-
- for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
- {
- pipebit = g_usb0_function_bit_set[pipe];
-
- if ((status & pipebit) && (int_enb & pipebit))
- {
- USB200.BRDYSTS = (uint16_t)~pipebit;
- USB200.BEMPSTS = (uint16_t)~pipebit;
- if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
- {
- if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
- {
- usb0_function_dma_interrupt_d0fifo(int_sense);
- }
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- usb0_function_read_dma(pipe);
- usb0_function_disable_brdy_int(pipe);
- }
- else
- {
- USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- }
- }
- else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
- {
- if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
- {
- usb0_function_dma_interrupt_d1fifo(int_sense);
- }
-
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
- {
- usb0_function_read_dma(pipe);
- usb0_function_disable_brdy_int(pipe);
- }
- else
- {
- USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- }
- }
- else
- {
- if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
- {
- usb0_function_read_buffer(pipe);
- }
- else
- {
- usb0_function_write_buffer(pipe);
- }
- }
- }
- }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_nrdy_int
-* Description : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
-* : Checks NRDY interrupt cause by PID. When the cause if STALL,
-* : regards the pipe state as STALL and ends the processing.
-* : Then the cause is not STALL, increments the error count to
-* : communicate again. When the error count is 3, determines
-* : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
-* : This function is executed in the NRDY interrupt handler.
-* : This function clears NRDY interrupt status.
-* Arguments : uint16_t status ; NRDYSTS Register Value
-* : uint16_t int_enb ; NRDYENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb0_function_nrdy_int (uint16_t status, uint16_t int_enb)
-{
- uint16_t pid;
- uint16_t pipe;
- uint16_t bitcheck;
-
- bitcheck = (uint16_t)(status & int_enb);
-
- USB200.NRDYSTS = (uint16_t)~status;
-
- for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
- {
- if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
- {
- if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
- {
- if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
- {
- pid = usb0_function_get_pid(pipe);
- if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
- {
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
- }
- else
- {
- g_usb0_function_PipeIgnore[pipe]++;
- if (g_usb0_function_PipeIgnore[pipe] == 3)
- {
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
- }
- else
- {
- usb0_function_set_pid_buf(pipe);
- }
- }
- }
- }
- else
- {
- /* USB Function */
- }
- }
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_bemp_int
-* Description : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
-* Arguments : uint16_t status ; BEMPSTS Register Value
-* : uint16_t int_enb ; BEMPENB Register Value
-* Return Value : none
-*******************************************************************************/
-void usb0_function_bemp_int (uint16_t status, uint16_t int_enb)
-{
- uint16_t pid;
- uint16_t pipe;
- uint16_t bitcheck;
- uint16_t inbuf;
-
- bitcheck = (uint16_t)(status & int_enb);
-
- USB200.BEMPSTS = (uint16_t)~status;
-
- for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
- {
- if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
- {
- pid = usb0_function_get_pid(pipe);
-
- if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
- {
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
- }
- else
- {
- inbuf = usb0_function_get_inbuf(pipe);
-
- if (inbuf == 0)
- {
- usb0_function_disable_bemp_int(pipe);
- usb0_function_set_pid_nak(pipe);
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- }
- }
- }
- }
-}
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/common/usb0_function_lib.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2026 +0,0 @@
-/*******************************************************************************
-* 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/function/usb0_function_api.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,441 +0,0 @@
-/*******************************************************************************
-* 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_api.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"
-#include "dev_drv.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_api_function_init
-* Description : Initializes the USB module in the USB function mode.
-* Arguments : uint8_t int_level ; interruput level
-* : uint16_t mode : Speed modes
-* : : USB_FUCNTION_HIGH_SPEED: High-speed device
-* : : USB_FUCNTION_FULL_SPEED: Full-speed device
-* : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
-* : ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
-{
- volatile uint8_t dummy_buf;
-
- CPG.STBCR7 &= 0xfd; /* The clock of USB0 modules is permitted */
- dummy_buf = CPG.STBCR7; /* (Dummy read) */
-
- usb0_function_setting_interrupt(int_level);
-
- usb0_function_reset_module(clockmode); /* reset USB module with setting tranciever */
- /* and HSE=1 */
-
- usb0_function_init_status(); /* clear variables */
-
- usb0_function_InitModule(mode); /* select USB Function and Interrupt Enable */
- /* Detect USB Device to attach or detach */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_api_function_IsConfigured
-* Description : Checks if the USB device is configured to return the result as
-* : the return value.
-* Arguments : none
-* Return Value : DEVDRV_USBF_YES : Configured & Configured Suspend
-* : DEVDRV_USBF_NO : not Configured
-*******************************************************************************/
-uint16_t usb0_api_function_IsConfigured (void)
-{
- uint16_t dvst;
-
- dvst = usb0_function_GetDeviceState();
-
- if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
- (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
- {
- return DEVDRV_USBF_YES;
- }
-
- return DEVDRV_USBF_NO;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_GetDeviceState
-* Description : Returns the state of USB device.
-* Arguments : none
-* Return Value : Device States
-*******************************************************************************/
-uint16_t usb0_function_GetDeviceState (void)
-{
- uint16_t dvsq;
- uint16_t dvst;
-
- dvsq = USB200.INTSTS0;
- switch(dvsq & USB_FUNCTION_BITDVSQ)
- {
- case USB_FUNCTION_DS_POWR: /* Power state *//* power-on */
- dvst = USB_FUNCTION_DVST_POWERED;
- break;
-
- case USB_FUNCTION_DS_DFLT: /* Default state *//* bus-reset */
- dvst = USB_FUNCTION_DVST_DEFAULT;
- break;
-
- case USB_FUNCTION_DS_ADDS: /* Address state */
- dvst = USB_FUNCTION_DVST_ADDRESS;
- break;
-
- case USB_FUNCTION_DS_CNFG: /* Configured state */
- dvst = USB_FUNCTION_DVST_CONFIGURED;
- break;
-
- case USB_FUNCTION_DS_SPD_CNFG: /* Configured Suspend state */
- dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
- break;
-
- case USB_FUNCTION_DS_SPD_POWR: /* Power Suspend state */
- case USB_FUNCTION_DS_SPD_DFLT: /* Default Suspend state */
- case USB_FUNCTION_DS_SPD_ADDR: /* Address Suspend state */
- dvst = USB_FUNCTION_DVST_SUSPEND;
- break;
-
- default: /* error */
- dvst = USB_FUNCTION_DVST_SUSPEND;
- break;
- }
-
- return dvst;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_start_receive_transfer
-* Description : Starts USB data reception using the pipe specified in the argument.
-* : The FIFO for using is set in the pipe definition table.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t size ; Data Size
-* : uint8_t *data ; Data data Address
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
- usb0_function_start_receive_transfer(pipe, size, data);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_start_send_transfer
-* Description : Starts the USB data communication using pipe specified by the argument.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t size ; Data Size
-* : uint8_t *data ; Data data Address
-* Return Value : DEVDRV_USBF_WRITEEND ; Write end
-* : DEVDRV_USBF_WRITESHRT ; short data
-* : DEVDRV_USBF_WRITING ; Continue of data write
-* : DEVDRV_USBF_WRITEDMA ; Write DMA
-* : DEVDRV_USBF_FIFOERROR ; FIFO status
-*******************************************************************************/
-uint16_t usb0_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
-{
- uint16_t status;
-
- status = usb0_function_start_send_transfer(pipe, size, data);
-
- return status;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_check_pipe_status
-* Description : Starts USB data reception using the pipe specified in the argument.
-* : The FIFO for using is set in the pipe definition table.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint32_t *size ; Data Size
-* Return Value : Pipe Status
-*******************************************************************************/
-uint16_t usb0_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
-{
- if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
- {
- *size = g_usb0_function_PipeDataSize[pipe];
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
- return DEVDRV_USBF_PIPE_DONE;
- }
- else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
- {
- *size = 0;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
- return DEVDRV_USBF_PIPE_NORES;
- }
- else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
- {
- *size = 0;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
- return DEVDRV_USBF_PIPE_STALL;
- }
- else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
- {
- *size = 0;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
-
- return DEVDRV_USBF_FIFOERROR;
- }
- else
- {
- /* Do Nothing */
- }
-
- return g_usb0_function_pipe_status[pipe];
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_clear_pipe_status
-* Description : Starts USB data reception using the pipe specified in the argument.
-* : The FIFO for using is set in the pipe definition table.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : Pipe Status
-*******************************************************************************/
-void usb0_api_function_clear_pipe_status (uint16_t pipe)
-{
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
- g_usb0_function_PipeDataSize[pipe] = 0;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_set_pid_buf (uint16_t pipe)
-{
- usb0_function_set_pid_buf(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_set_pid_nak (uint16_t pipe)
-{
- usb0_function_set_pid_nak(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_set_pid_stall (uint16_t pipe)
-{
- usb0_function_set_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_clear_pid_stall (uint16_t pipe)
-{
- usb0_function_clear_pid_stall(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_get_pid
-* Description : Returns the pipe state specified by the argument.
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-uint16_t usb0_api_function_get_pid (uint16_t pipe)
-{
- uint16_t pid;
-
- pid = usb0_function_get_pid(pipe);
-
- return pid;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_check_stall
-* Description :
-* Arguments : uint16_t pipe ; Pipe Number
-* Return Value : PID
-*******************************************************************************/
-int32_t usb0_api_function_check_stall (uint16_t pipe)
-{
- uint16_t pid;
-
- pid = usb0_function_get_pid(pipe);
-
- if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
- {
- return DEVDRV_USBF_STALL;
- }
-
- return DEVDRV_SUCCESS;
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_set_sqclr (uint16_t pipe)
-{
- usb0_function_set_sqclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_set_sqset (uint16_t pipe)
-{
- usb0_function_set_sqset(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_set_csclr (uint16_t pipe)
-{
- usb0_function_set_csclr(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_set_curpipe
-* Description : Allocates FIF0 specifed by the argument in the pipe assigned
-* : by the argument.
-* Arguments : uint16_t pipe ; Pipe Number
-* : uint16_t fifosel ; Select FIFO
-* : uint16_t isel ; FIFO Access Direction
-* : uint16_t mbw ; FIFO Port Access Bit Width
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
-{
- usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_clear_brdy_sts (uint16_t pipe)
-{
- usb0_function_clear_brdy_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_clear_bemp_sts (uint16_t pipe)
-{
- usb0_function_clear_bemp_sts(pipe);
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_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_api_function_clear_nrdy_sts (uint16_t pipe)
-{
- usb0_function_clear_nrdy_sts(pipe);
-}
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/function/usb0_function_controlrw.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*******************************************************************************
-* 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_controlrw.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_api_function_CtrlReadStart
-* Description : Executes the USB control read transfer.
-* : USB host controller <- USB device
-* Arguments : uint16_t size ; Data Size
-* : uint8_t *data ; Data Address
-* Return Value : DEVDRV_USBF_WRITEEND ; End of data write
-* : DEVDRV_USBF_WRITESHRT ; End of short data write
-* : DEVDRV_USBF_WRITING ; Continue of data write
-* : DEVDRV_USBF_FIFOERROR ; FIFO access error
-*******************************************************************************/
-uint16_t usb0_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
-{
- uint16_t status;
- uint16_t mbw;
-
- usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
- g_usb0_function_data_count[USB_FUNCTION_PIPE0] = size;
- g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
- (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
- usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
- USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
- status = usb0_function_write_buffer_c(USB_FUNCTION_PIPE0);
-
- /* Peripheral Control sequence */
- switch (status)
- {
- case DEVDRV_USBF_WRITESHRT: /* End of data write */
- case DEVDRV_USBF_WRITEEND: /* End of data write (not null) */
- case DEVDRV_USBF_WRITING: /* Continue of data write */
- usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0); /* Enable Empty Interrupt */
- usb0_function_set_pid_buf(USB_FUNCTION_PIPE0); /* Set BUF */
- break;
-
- case DEVDRV_USBF_FIFOERROR: /* FIFO access error */
- break;
-
- default:
- break;
- }
-
- return status; /* End or Err or Continue */
-}
-
-/*******************************************************************************
-* Function Name: usb0_api_function_CtrlWriteStart
-* Description : Executes the USB control write transfer.
-* : USB host controller -> USB device
-* Arguments : uint16_t size ; Data Size
-* : uint8_t *data ; Data Address
-* Return Value : none
-*******************************************************************************/
-void usb0_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
-{
- uint16_t mbw;
-
- usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
-
- g_usb0_function_data_count[USB_FUNCTION_PIPE0] = size;
- g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
-
- mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
- (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
- usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
- USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
-
- usb0_function_enable_brdy_int(USB_FUNCTION_PIPE0);
- usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/function/usb0_function_global.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*******************************************************************************
-* 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_global.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
-*******************************************************************************/
-const uint16_t g_usb0_function_bit_set[16] =
-{
- 0x0001, 0x0002, 0x0004, 0x0008,
- 0x0010, 0x0020, 0x0040, 0x0080,
- 0x0100, 0x0200, 0x0400, 0x0800,
- 0x1000, 0x2000, 0x4000, 0x8000
-};
-
-uint32_t g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint8_t * g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-uint16_t g_usb0_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint32_t g_usb0_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-USB_FUNCTION_DMA_t g_usb0_function_DmaInfo[2];
-uint16_t g_usb0_function_DmaPipe[2];
-uint16_t g_usb0_function_DmaBval[2];
-uint16_t g_usb0_function_DmaStatus[2];
-
-uint16_t g_usb0_function_CtrZeroLengthFlag;
-
-//uint16_t g_usb0_function_ConfigNum;
-//uint16_t g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
-//uint16_t g_usb0_function_RemoteWakeupFlag;
-uint16_t g_usb0_function_TestModeFlag;
-uint16_t g_usb0_function_TestModeSelectors;
-
-//uint16_t g_usb0_function_ReqType;
-//uint16_t g_usb0_function_ReqTypeType;
-//uint16_t g_usb0_function_ReqTypeRecip;
-//uint16_t g_usb0_function_ReqRequest;
-//uint16_t g_usb0_function_ReqValue;
-//uint16_t g_usb0_function_ReqIndex;
-//uint16_t g_usb0_function_ReqLength;
-
-//uint16_t g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
-
-uint16_t g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
-uint16_t g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
-
-
-/*******************************************************************************
-* Function Name: usb0_function_init_status
-* Description : Initialization USB Sample Driver Variable.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_init_status (void)
-{
- uint16_t pipe;
-
- //g_usb0_function_ConfigNum = 0;
- //g_usb0_function_RemoteWakeupFlag = DEVDRV_USBF_OFF;
- g_usb0_function_TestModeFlag = DEVDRV_USBF_OFF;
- g_usb0_function_CtrZeroLengthFlag = 0;
-
-#if 0
- usb0_function_clear_alt();
-#endif
-
- for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
- {
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
- g_usb0_function_PipeDataSize[pipe] = 0;
- g_usb0_function_data_count[pipe] = 0;
-
- /* pipe configuration in usb0_function_ResetEP() */
- g_usb0_function_pipecfg[pipe] = 0;
- g_usb0_function_pipebuf[pipe] = 0;
- g_usb0_function_pipemaxp[pipe] = 0;
- g_usb0_function_pipeperi[pipe] = 0;
- }
-}
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/function/usb0_function_sig.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +0,0 @@
-/*******************************************************************************
-* 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_sig.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)
-*******************************************************************************/
-static void usb0_function_EnableINTModule(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_InitModule
-* Description : Initializes the USB module in the USB function mode.
-* Arguments : uint16_t mode ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
-* : ; other ; Full-speed Mode
-* Return Value : none
-*******************************************************************************/
-void usb0_function_InitModule (uint16_t mode)
-{
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 0,
- USB_SYSCFG_DCFM_SHIFT,
- USB_SYSCFG_DCFM); /* USB function */
-
- /* USB module operation enabled */
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 1,
- USB_SYSCFG_USBE_SHIFT,
- USB_SYSCFG_USBE);
-
- if (mode == USB_FUNCTION_HIGH_SPEED)
- {
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 1,
- USB_SYSCFG_HSE_SHIFT,
- USB_SYSCFG_HSE); /* Hi-Speed Mode */
- }
- else
- {
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 0,
- USB_SYSCFG_HSE_SHIFT,
- USB_SYSCFG_HSE);
- }
-
- /* for power-on */
- if (usb0_function_CheckVBUStaus() == DEVDRV_USBF_ON)
- {
- usb0_function_EnableINTModule(); /* Interrupt Enable */
- usb0_function_USB_FUNCTION_Attach(); /* pull-up D+ and open D- */
- }
- else
- {
- usb0_function_USB_FUNCTION_Detach(); /* USB Detach */
- /* with Interrupt Enable */
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_CheckVBUStaus
-* Description : Checks the USB-VBUS state to returns the connection state to
-* : the USB host.
-* Arguments : none
-* Return Value : DEVDRV_USBF_ON : VBUS ON
-* : DEVDRV_USBF_OFF : VBUS OFF
-*******************************************************************************/
-uint16_t usb0_function_CheckVBUStaus (void)
-{
- uint16_t buf1;
- uint16_t buf2;
- uint16_t buf3;
-
- /* monitor VBUS pins */
- do
- {
- buf1 = RZA_IO_RegRead_16(&USB200.INTSTS0,
- USB_INTSTS0_VBSTS_SHIFT,
- USB_INTSTS0_VBSTS);
- Userdef_USB_usb0_function_delay_10us(1);
- buf2 = RZA_IO_RegRead_16(&USB200.INTSTS0,
- USB_INTSTS0_VBSTS_SHIFT,
- USB_INTSTS0_VBSTS);
- Userdef_USB_usb0_function_delay_10us(1);
- buf3 = RZA_IO_RegRead_16(&USB200.INTSTS0,
- USB_INTSTS0_VBSTS_SHIFT,
- USB_INTSTS0_VBSTS);
- } while ((buf1 != buf2) || (buf2 != buf3));
-
- if (buf1 == DEVDRV_USBF_OFF)
- {
- return DEVDRV_USBF_OFF; /* detach */
- }
-
- return DEVDRV_USBF_ON; /* attach */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Attach
-* Description : Connects to the USB host controller.
-* : This function pulls up D+.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_USB_FUNCTION_Attach (void)
-{
- Userdef_USB_usb0_function_attach();
-
- Userdef_USB_usb0_function_delay_xms(10);
-
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 1,
- USB_SYSCFG_DPRPU_SHIFT,
- USB_SYSCFG_DPRPU); /* Pull-up D+ and open D- */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Detach
-* Description : Disconnects from the USB host controller.
-* : This function opens D+/D-.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_USB_FUNCTION_Detach (void)
-{
- uint16_t pipe;
-
- Userdef_USB_usb0_function_detach();
-
- for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
- {
- if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
- {
- usb0_function_stop_transfer(pipe);
- }
- }
-
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 0,
- USB_SYSCFG_DPRPU_SHIFT,
- USB_SYSCFG_DPRPU); /* open D+ and D- */
-
- /* Detach Recovery */
- Userdef_USB_usb0_function_delay_500ns(); /* need 1us=500ns * 2 wait */
- Userdef_USB_usb0_function_delay_500ns();
-
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 1,
- USB_SYSCFG_DCFM_SHIFT,
- USB_SYSCFG_DCFM);
- Userdef_USB_usb0_function_delay_500ns(); /* need 100ns wait but 500ns S/W wait */
-
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 0,
- USB_SYSCFG_DCFM_SHIFT,
- USB_SYSCFG_DCFM);
-
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 0,
- USB_SYSCFG_USBE_SHIFT,
- USB_SYSCFG_USBE); /* soft reset module */
- Userdef_USB_usb0_function_delay_500ns();
-
- RZA_IO_RegWrite_16(&USB200.SYSCFG0,
- 1,
- USB_SYSCFG_USBE_SHIFT,
- USB_SYSCFG_USBE);
-
- usb0_function_EnableINTModule(); /* Interrupt Enable */
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_BusReset
-* Description : This function is executed when the USB device is transitioned
-* : to POWERD_STATE. Sets the device descriptor according to the
-* : connection speed determined by the USB reset hand shake.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-#if 0 /*The USBHAL in mbed does not need this function*/
-void usb0_function_USB_FUNCTION_BusReset (void)
-{
- usb0_function_init_status(); /* memory clear */
-
- if (usb0_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
- {
- usb0_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED); /* Device Descriptor reset */
- }
- else
- {
- usb0_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED); /* Device Descriptor reset */
- }
-
- usb0_function_ResetDCP(); /* Default Control PIPE reset */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Resume
-* Description : This function is executed when the USB device detects a resume
-* : signal.
-* : The USB sample driver does not operate for this function.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-#if 0 /*The USBHAL in mbed does not need this function*/
-void usb0_function_USB_FUNCTION_Resume (void)
-{
- /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_Suspend
-* Description : This function is executed when the USB device detects a suspend
-* : signal.
-* : The USB sample driver does not operate for this function.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-#if 0 /*The USBHAL in mbed does not need this function*/
-void usb0_function_USB_FUNCTION_Suspend (void)
-{
- /* NOP */
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_USB_FUNCTION_TestMode
-* Description : This function is executed when the USB device is transitioned U
-* : to TEST_MODE by the USB standard request.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_USB_FUNCTION_TestMode (void)
-{
- switch (g_usb0_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
- {
- case USB_FUNCTION_FUNCTION_TEST_J:
- case USB_FUNCTION_FUNCTION_TEST_K:
- case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
- case USB_FUNCTION_FUNCTION_TEST_PACKET:
- RZA_IO_RegWrite_16(&USB200.TESTMODE,
- (g_usb0_function_TestModeSelectors >> 8),
- USB_TESTMODE_UTST_SHIFT,
- USB_TESTMODE_UTST);
- break;
-
- case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
- default:
- break;
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_EnableINTModule
-* Description : Enables USB interrupt.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_EnableINTModule (void)
-{
- uint16_t buf;
-
- buf = USB200.INTENB0;
- buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
- USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
- USB200.INTENB0 = buf;
-
- usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);
-}
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/function/usb0_function_sub.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,453 +0,0 @@
-/*******************************************************************************
-* 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_sub.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)
-*******************************************************************************/
-#if 0
-extern const uint16_t *g_usb0_function_EndPntPtr[];
-extern uint8_t g_usb0_function_DeviceDescriptor[];
-extern uint8_t *g_usb0_function_ConfigurationPtr[];
-#endif
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: usb0_function_ResetDCP
-* Description : Initializes the default control pipe(DCP).
-* Outline : Reset default control pipe
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_ResetDCP (void)
-{
- USB200.DCPCFG = 0;
-#if 0
- USB200.DCPMAXP = g_usb0_function_DeviceDescriptor[7];
-#else
- USB200.DCPMAXP = 64;
-#endif
-
- USB200.CFIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
- USB200.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
- USB200.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_ResetEP
-* Description : Initializes the end point.
-* Arguments : uint16_t num ; Configuration Number
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_ResetEP (uint16_t num)
-{
- uint16_t pipe;
- uint16_t ep;
- uint16_t index;
- uint16_t buf;
- uint16_t * tbl;
-
- tbl = (uint16_t *)(g_usb0_function_EndPntPtr[num - 1]);
-
- for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
- {
- if (g_usb0_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
- {
- index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb0_function_EPTableIndex[ep]);
- pipe = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
-
- g_usb0_function_PipeTbl[pipe] = (uint16_t)( ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
- ep |
- (tbl[index + 0] & USB_FUNCTION_FIFO_USE) );
-
- if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
- {
- tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
-#ifdef __USB_DMA_BFRE_ENABLE__
- /* this routine cannnot be perfomred if read operation is executed in buffer size */
- if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
- ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
- {
- tbl[index + 1] |= USB_FUNCTION_BFREON;
- }
-#endif
- }
-
- /* Interrupt Disable */
- buf = USB200.BRDYENB;
- buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
- USB200.BRDYENB = buf;
- buf = USB200.NRDYENB;
- buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
- USB200.NRDYENB = buf;
- buf = USB200.BEMPENB;
- buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
- USB200.BEMPENB = buf;
-
- usb0_function_set_pid_nak(pipe);
-
- /* CurrentPIPE Clear */
- if (RZA_IO_RegRead_16(&USB200.CFIFOSEL,
- USB_CFIFOSEL_CURPIPE_SHIFT,
- USB_CFIFOSEL_CURPIPE) == pipe)
- {
- RZA_IO_RegWrite_16(&USB200.CFIFOSEL,
- 0,
- USB_CFIFOSEL_CURPIPE_SHIFT,
- USB_CFIFOSEL_CURPIPE);
- }
-
- if (RZA_IO_RegRead_16(&USB200.D0FIFOSEL,
- USB_DnFIFOSEL_CURPIPE_SHIFT,
- USB_DnFIFOSEL_CURPIPE) == pipe)
- {
- RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
- 0,
- USB_DnFIFOSEL_CURPIPE_SHIFT,
- USB_DnFIFOSEL_CURPIPE);
- }
-
- if (RZA_IO_RegRead_16(&USB200.D1FIFOSEL,
- USB_DnFIFOSEL_CURPIPE_SHIFT,
- USB_DnFIFOSEL_CURPIPE) == pipe)
- {
- RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
- 0,
- USB_DnFIFOSEL_CURPIPE_SHIFT,
- USB_DnFIFOSEL_CURPIPE);
- }
-
- /* PIPE Configuration */
- USB200.PIPESEL = pipe;
- USB200.PIPECFG = tbl[index + 1];
- USB200.PIPEBUF = tbl[index + 2];
- USB200.PIPEMAXP = tbl[index + 3];
- USB200.PIPEPERI = tbl[index + 4];
-
- g_usb0_function_pipecfg[pipe] = tbl[index + 1];
- g_usb0_function_pipebuf[pipe] = tbl[index + 2];
- g_usb0_function_pipemaxp[pipe] = tbl[index + 3];
- g_usb0_function_pipeperi[pipe] = tbl[index + 4];
-
- /* Buffer Clear */
- usb0_function_set_sqclr(pipe);
- usb0_function_aclrm(pipe);
-
- /* init Global */
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
- g_usb0_function_PipeDataSize[pipe] = 0;
- }
- }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_EpToPipe
-* Description : Returns the pipe which end point specified by the argument is
-* : allocated to.
-* Arguments : uint16_t ep ; Direction + Endpoint Number
-* Return Value : USB_FUNCTION_EP_ERROR : Error
-* : Others : Pipe Number
-*******************************************************************************/
-uint16_t usb0_function_EpToPipe (uint16_t ep)
-{
- uint16_t pipe;
-
- for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
- {
- if ((g_usb0_function_PipeTbl[pipe] & 0x00ff) == ep)
- {
- return pipe;
- }
- }
-
- return USB_FUNCTION_EP_ERROR;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_InitEPTable
-* Description : Sets the end point by the Alternate setting value of the
-* : configuration number and the interface number specified by the
-* : argument.
-* Arguments : uint16_t Con_Num ; Configuration Number
-* : uint16_t Int_Num ; Interface Number
-* : uint16_t Alt_Num ; Alternate Setting
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
-{
- uint8_t * ptr;
- uint16_t point_interface;
- uint16_t point_endpoint;
- uint16_t length;
- uint16_t start;
- uint16_t numbers;
- uint16_t endpoint;
-
- ptr = (uint8_t *)g_usb0_function_ConfigurationPtr[Con_Num - 1];
- point_interface = *ptr;
- length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
- ptr += *ptr;
- start = 0;
- numbers = 0;
- point_endpoint = 0;
-
- for (; point_interface < length;)
- {
- switch (*(ptr + 1)) /* Descriptor Type ? */
- {
- case USB_FUNCTION_DT_INTERFACE: /* Interface */
- if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
- {
- numbers = *(ptr + 4);
- }
- else
- {
- start += *(ptr + 4);
- }
- point_interface += *ptr;
- ptr += *ptr;
- break;
-
- case USB_FUNCTION_DT_ENDPOINT: /* Endpoint */
- if (point_endpoint < numbers)
- {
- endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
- g_usb0_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
- ++point_endpoint;
- }
- point_interface += *ptr;
- ptr += *ptr;
- break;
-
- case USB_FUNCTION_DT_DEVICE: /* Device */
- case USB_FUNCTION_DT_CONFIGURATION: /* Configuration */
- case USB_FUNCTION_DT_STRING: /* String */
- default: /* Class, Vendor, else */
- point_interface += *ptr;
- ptr += *ptr;
- break;
- }
- }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_GetConfigNum
-* Description : Returns the number of configuration referring to the number of
-* : configuration described in the device descriptor.
-* Arguments : none
-* Return Value : Number of possible configurations (bNumConfigurations).
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_GetConfigNum (void)
-{
- return (uint16_t)g_usb0_function_DeviceDescriptor[17];
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_GetInterfaceNum
-* Description : Returns the number of interface referring to the number of
-* : interface described in the configuration descriptor.
-* Arguments : uint16_t num ; Configuration Number
-* Return Value : Number of this interface (bNumInterfaces).
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_GetInterfaceNum (uint16_t num)
-{
- return (uint16_t)(*(g_usb0_function_ConfigurationPtr[num - 1] + 4));
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_GetAltNum
-* Description : Returns the Alternate setting value of the configuration number
-* : and the interface number specified by the argument.
-* Arguments : uint16_t Con_Num ; Configuration Number
-* : uint16_t Int_Num ; Interface Number
-* Return Value : Value used to select this alternate setting(bAlternateSetting).
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
-{
- uint8_t * ptr;
- uint16_t point;
- uint16_t alt_num = 0;
- uint16_t length;
-
- ptr = (uint8_t *)(g_usb0_function_ConfigurationPtr[Con_Num - 1]);
- point = ptr[0];
- ptr += ptr[0]; /* InterfaceDescriptor[0] */
- length = (uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 2));
- length |= (uint16_t)((uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
-
- for (; point < length;) /* Search Descriptor Table size */
- {
- switch (ptr[1]) /* Descriptor Type ? */
- {
- case USB_FUNCTION_DT_INTERFACE: /* Interface */
- if (Int_Num == ptr[2])
- {
- alt_num = (uint16_t)ptr[3]; /* Alternate Number count */
- }
- point += ptr[0];
- ptr += ptr[0];
- break;
-
- case USB_FUNCTION_DT_DEVICE: /* Device */
- case USB_FUNCTION_DT_CONFIGURATION: /* Configuration */
- case USB_FUNCTION_DT_STRING: /* String */
- case USB_FUNCTION_DT_ENDPOINT: /* Endpoint */
- default: /* Class, Vendor, else */
- point += ptr[0];
- ptr += ptr[0];
- break;
- }
- }
- return alt_num;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_CheckRemoteWakeup
-* Description : Returns the result of the remote wake up function is supported
-* : or not referring to the configuration descriptor.
-* Arguments : none
-* Return Value : DEVDRV_USBF_ON : Support Remote Wakeup
-* : DEVDRV_USBF_OFF : not Support Remote Wakeup
-*******************************************************************************/
-#if 0
-uint16_t usb0_function_CheckRemoteWakeup (void)
-{
- uint8_t atr;
-
- if (g_usb0_function_ConfigNum == 0)
- {
- return DEVDRV_USBF_OFF;
- }
-
- atr = *(g_usb0_function_ConfigurationPtr[g_usb0_function_ConfigNum - 1] + 7);
-
- if (atr & USB_FUNCTION_CF_RWUP)
- {
- return DEVDRV_USBF_ON;
- }
-
- return DEVDRV_USBF_OFF;
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_alt
-* Description : Initializes the Alternate setting area.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_clear_alt (void)
-{
- int i;
-
- for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
- {
- g_usb0_function_Alternate[i] = 0; /* Alternate */
- }
-}
-#endif
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_pipe_tbl
-* Description : Initializes pipe definition table.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void usb0_function_clear_pipe_tbl (void)
-{
- int pipe;
-
- for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
- {
- g_usb0_function_PipeTbl[pipe] = 0;
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_clear_ep_table_index
-* Description : Initializes the end point table index.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-#if 0
-void usb0_function_clear_ep_table_index (void)
-{
- int ep;
-
- for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
- {
- g_usb0_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
- }
-}
-#endif
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/userdef/usb0_function_dmacdrv.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,698 +0,0 @@
-/*******************************************************************************
-* 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_dmacdrv.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 <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "rza_io_regrw.h"
-#include "usb0_function_dmacdrv.h"
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DMAC_INDEFINE (255) /* Macro definition when REQD bit is not used */
-
-/* ==== Request setting information for on-chip peripheral module ==== */
-typedef enum dmac_peri_req_reg_type
-{
- DMAC_REQ_MID,
- DMAC_REQ_RID,
- DMAC_REQ_AM,
- DMAC_REQ_LVL,
- DMAC_REQ_REQD
-} dmac_peri_req_reg_type_t;
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-/* ==== Prototype declaration ==== */
-
-/* ==== Global variable ==== */
-/* On-chip peripheral module request setting table */
-static const uint8_t usb0_function_dmac_peri_req_init_table[8][5] =
-{
- /* MID,RID,AM,LVL,REQD */
- {32, 3, 2, 1, 1}, /* USB_0 channel 0 transmit FIFO empty */
- {32, 3, 2, 1, 0}, /* USB_0 channel 0 receive FIFO full */
- {33, 3, 2, 1, 1}, /* USB_0 channel 1 transmit FIFO empty */
- {33, 3, 2, 1, 0}, /* USB_0 channel 1 receive FIFO full */
- {34, 3, 2, 1, 1}, /* USB_1 channel 0 transmit FIFO empty */
- {34, 3, 2, 1, 0}, /* USB_1 channel 0 receive FIFO full */
- {35, 3, 2, 1, 1}, /* USB_1 channel 1 transmit FIFO empty */
- {35, 3, 2, 1, 0}, /* USB_1 channel 1 receive FIFO full */
-};
-
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_PeriReqInit
-* Description : Sets the register mode for DMA mode and the on-chip peripheral
-* : module request for transfer request for DMAC channel 1.
-* : Executes DMAC initial setting using the DMA information
-* : specified by the argument *trans_info and the enabled/disabled
-* : continuous transfer specified by the argument continuation.
-* : Registers DMAC channel 1 interrupt handler function and sets
-* : the interrupt priority level. Then enables transfer completion
-* : interrupt.
-* Arguments : dmac_transinfo_t *trans_info : Setting information to DMAC register
-* : uint32_t dmamode : DMA mode (only for DMAC_MODE_REGISTER)
-* : uint32_t continuation : Set continuous transfer to be valid
-* : after DMA transfer has been completed
-* : DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-* : DMAC_SAMPLE_SINGLE : Do not execute continuous transfer
-* : uint32_t request_factor : Factor for on-chip peripheral module request
-* : DMAC_REQ_OSTM0TINT : OSTM_0 compare match
-* : DMAC_REQ_OSTM1TINT : OSTM_1 compare match
-* : DMAC_REQ_TGI0A : MTU2_0 input capture/compare match
-* : :
-* : uint32_t req_direction: Setting value of CHCFG_n register REQD bit
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC1_PeriReqInit (const dmac_transinfo_t * trans_info,
- uint32_t dmamode, uint32_t continuation,
- uint32_t request_factor, uint32_t req_direction)
-{
- /* ==== Register mode ==== */
- if (DMAC_MODE_REGISTER == dmamode)
- {
- /* ==== Next0 register set ==== */
- DMAC1.N0SA_n = trans_info->src_addr; /* Start address of transfer source */
- DMAC1.N0DA_n = trans_info->dst_addr; /* Start address of transfer destination */
- DMAC1.N0TB_n = trans_info->count; /* Total transfer byte count */
-
- /* DAD : Transfer destination address counting direction */
- /* SAD : Transfer source address counting direction */
- /* DDS : Transfer destination transfer size */
- /* SDS : Transfer source transfer size */
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- trans_info->daddr_dir,
- DMAC1_CHCFG_n_DAD_SHIFT,
- DMAC1_CHCFG_n_DAD);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- trans_info->saddr_dir,
- DMAC1_CHCFG_n_SAD_SHIFT,
- DMAC1_CHCFG_n_SAD);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- trans_info->dst_size,
- DMAC1_CHCFG_n_DDS_SHIFT,
- DMAC1_CHCFG_n_DDS);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- trans_info->src_size,
- DMAC1_CHCFG_n_SDS_SHIFT,
- DMAC1_CHCFG_n_SDS);
-
- /* DMS : Register mode */
- /* RSEL : Select Next0 register set */
- /* SBE : No discharge of buffer data when aborted */
- /* DEM : No DMA interrupt mask */
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 0,
- DMAC1_CHCFG_n_DMS_SHIFT,
- DMAC1_CHCFG_n_DMS);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 0,
- DMAC1_CHCFG_n_RSEL_SHIFT,
- DMAC1_CHCFG_n_RSEL);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 0,
- DMAC1_CHCFG_n_SBE_SHIFT,
- DMAC1_CHCFG_n_SBE);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 0,
- DMAC1_CHCFG_n_DEM_SHIFT,
- DMAC1_CHCFG_n_DEM);
-
- /* ---- Continuous transfer ---- */
- if (DMAC_SAMPLE_CONTINUATION == continuation)
- {
- /* REN : Execute continuous transfer */
- /* RSW : Change register set when DMA transfer is completed. */
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 1,
- DMAC1_CHCFG_n_REN_SHIFT,
- DMAC1_CHCFG_n_REN);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 1,
- DMAC1_CHCFG_n_RSW_SHIFT,
- DMAC1_CHCFG_n_RSW);
- }
- /* ---- Single transfer ---- */
- else
- {
- /* REN : Do not execute continuous transfer */
- /* RSW : Do not change register set when DMA transfer is completed. */
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 0,
- DMAC1_CHCFG_n_REN_SHIFT,
- DMAC1_CHCFG_n_REN);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 0,
- DMAC1_CHCFG_n_RSW_SHIFT,
- DMAC1_CHCFG_n_RSW);
- }
-
- /* TM : Single transfer */
- /* SEL : Channel setting */
- /* HIEN, LOEN : On-chip peripheral module request */
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 0,
- DMAC1_CHCFG_n_TM_SHIFT,
- DMAC1_CHCFG_n_TM);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 1,
- DMAC1_CHCFG_n_SEL_SHIFT,
- DMAC1_CHCFG_n_SEL);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 1,
- DMAC1_CHCFG_n_HIEN_SHIFT,
- DMAC1_CHCFG_n_HIEN);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- 0,
- DMAC1_CHCFG_n_LOEN_SHIFT,
- DMAC1_CHCFG_n_LOEN);
-
- /* ---- Set factor by specified on-chip peripheral module request ---- */
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
- DMAC1_CHCFG_n_AM_SHIFT,
- DMAC1_CHCFG_n_AM);
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
- DMAC1_CHCFG_n_LVL_SHIFT,
- DMAC1_CHCFG_n_LVL);
-
- if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
- {
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
- DMAC1_CHCFG_n_REQD_SHIFT,
- DMAC1_CHCFG_n_REQD);
- }
- else
- {
- RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
- req_direction,
- DMAC1_CHCFG_n_REQD_SHIFT,
- DMAC1_CHCFG_n_REQD);
- }
-
- RZA_IO_RegWrite_32(&DMAC01.DMARS,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
- DMAC01_DMARS_CH1_RID_SHIFT,
- DMAC01_DMARS_CH1_RID);
- RZA_IO_RegWrite_32(&DMAC01.DMARS,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
- DMAC01_DMARS_CH1_MID_SHIFT,
- DMAC01_DMARS_CH1_MID);
-
- /* PR : Round robin mode */
- RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
- 1,
- DMAC07_DCTRL_0_7_PR_SHIFT,
- DMAC07_DCTRL_0_7_PR);
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_Open
-* Description : Enables DMAC channel 1 transfer.
-* Arguments : uint32_t req : DMAC request mode
-* Return Value : 0 : Succeeded in enabling DMA transfer
-* : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb0_function_DMAC1_Open (uint32_t req)
-{
- int32_t ret;
- volatile uint8_t dummy;
-
- /* Transferable? */
- if ((0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
- DMAC1_CHSTAT_n_EN_SHIFT,
- DMAC1_CHSTAT_n_EN)) &&
- (0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
- DMAC1_CHSTAT_n_TACT_SHIFT,
- DMAC1_CHSTAT_n_TACT)))
- {
- /* Clear Channel Status Register */
- RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
- 1,
- DMAC1_CHCTRL_n_SWRST_SHIFT,
- DMAC1_CHCTRL_n_SWRST);
- dummy = RZA_IO_RegRead_32(&DMAC1.CHCTRL_n,
- DMAC1_CHCTRL_n_SWRST_SHIFT,
- DMAC1_CHCTRL_n_SWRST);
- /* Enable DMA transfer */
- RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
- 1,
- DMAC1_CHCTRL_n_SETEN_SHIFT,
- DMAC1_CHCTRL_n_SETEN);
-
- /* ---- Request by software ---- */
- if (DMAC_REQ_MODE_SOFT == req)
- {
- /* DMA transfer Request by software */
- RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
- 1,
- DMAC1_CHCTRL_n_STG_SHIFT,
- DMAC1_CHCTRL_n_STG);
- }
-
- ret = 0;
- }
- else
- {
- ret = -1;
- }
-
- return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_Close
-* Description : Aborts DMAC channel 1 transfer. Returns the remaining transfer
-* : byte count at the time of DMA transfer abort to the argument
-* : *remain.
-* Arguments : uint32_t * remain : Remaining transfer byte count when
-* : : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC1_Close (uint32_t * remain)
-{
-
- /* ==== Abort transfer ==== */
- RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
- 1,
- DMAC1_CHCTRL_n_CLREN_SHIFT,
- DMAC1_CHCTRL_n_CLREN);
-
- while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
- DMAC1_CHSTAT_n_TACT_SHIFT,
- DMAC1_CHSTAT_n_TACT))
- {
- /* Loop until transfer is aborted */
- }
-
- while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
- DMAC1_CHSTAT_n_EN_SHIFT,
- DMAC1_CHSTAT_n_EN))
- {
- /* Loop until 0 is set in EN before checking the remaining transfer byte count */
- }
- /* ==== Obtain remaining transfer byte count ==== */
- *remain = DMAC1.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC1_Load_Set
-* Description : Sets the transfer source address, transfer destination
-* : address, and total transfer byte count respectively
-* : specified by the argument src_addr, dst_addr, and count to
-* : DMAC channel 1 as DMA transfer information.
-* : Sets the register set selected by the CHCFG_n register
-* : RSEL bit from the Next0 or Next1 register set.
-* : This function should be called when DMA transfer of DMAC
-* : channel 1 is aboted.
-* Arguments : uint32_t src_addr : Transfer source address
-* : uint32_t dst_addr : Transfer destination address
-* : uint32_t count : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC1_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
- uint8_t reg_set;
-
- /* Obtain register set in use */
- reg_set = RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
- DMAC1_CHSTAT_n_SR_SHIFT,
- DMAC1_CHSTAT_n_SR);
-
- /* ==== Load ==== */
- if (0 == reg_set)
- {
- /* ---- Next0 Register Set ---- */
- DMAC1.N0SA_n = src_addr; /* Start address of transfer source */
- DMAC1.N0DA_n = dst_addr; /* Start address of transfer destination */
- DMAC1.N0TB_n = count; /* Total transfer byte count */
- }
- else
- {
- /* ---- Next1 Register Set ---- */
- DMAC1.N1SA_n = src_addr; /* Start address of transfer source */
- DMAC1.N1DA_n = dst_addr; /* Start address of transfer destination */
- DMAC1.N1TB_n = count; /* Total transfer byte count */
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_PeriReqInit
-* Description : Sets the register mode for DMA mode and the on-chip peripheral
-* : module request for transfer request for DMAC channel 2.
-* : Executes DMAC initial setting using the DMA information
-* : specified by the argument *trans_info and the enabled/disabled
-* : continuous transfer specified by the argument continuation.
-* : Registers DMAC channel 2 interrupt handler function and sets
-* : the interrupt priority level. Then enables transfer completion
-* : interrupt.
-* Arguments : dmac_transinfo_t * trans_info : Setting information to DMAC
-* : : register
-* : uint32_t dmamode : DMA mode (only for DMAC_MODE_REGISTER)
-* : uint32_t continuation : Set continuous transfer to be valid
-* : : after DMA transfer has been completed
-* : DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
-* : DMAC_SAMPLE_SINGLE : Do not execute continuous
-* : : transfer
-* : uint32_t request_factor : Factor for on-chip peripheral module
-* : : request
-* : DMAC_REQ_OSTM0TINT : OSTM_0 compare match
-* : DMAC_REQ_OSTM1TINT : OSTM_1 compare match
-* : DMAC_REQ_TGI0A : MTU2_0 input capture/compare match
-* : :
-* : uint32_t req_direction : Setting value of CHCFG_n register
-* : : REQD bit
-*******************************************************************************/
-void usb0_function_DMAC2_PeriReqInit (const dmac_transinfo_t * trans_info,
- uint32_t dmamode, uint32_t continuation,
- uint32_t request_factor, uint32_t req_direction)
-{
- /* ==== Register mode ==== */
- if (DMAC_MODE_REGISTER == dmamode)
- {
- /* ==== Next0 register set ==== */
- DMAC2.N0SA_n = trans_info->src_addr; /* Start address of transfer source */
- DMAC2.N0DA_n = trans_info->dst_addr; /* Start address of transfer destination */
- DMAC2.N0TB_n = trans_info->count; /* Total transfer byte count */
-
- /* DAD : Transfer destination address counting direction */
- /* SAD : Transfer source address counting direction */
- /* DDS : Transfer destination transfer size */
- /* SDS : Transfer source transfer size */
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- trans_info->daddr_dir,
- DMAC2_CHCFG_n_DAD_SHIFT,
- DMAC2_CHCFG_n_DAD);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- trans_info->saddr_dir,
- DMAC2_CHCFG_n_SAD_SHIFT,
- DMAC2_CHCFG_n_SAD);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- trans_info->dst_size,
- DMAC2_CHCFG_n_DDS_SHIFT,
- DMAC2_CHCFG_n_DDS);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- trans_info->src_size,
- DMAC2_CHCFG_n_SDS_SHIFT,
- DMAC2_CHCFG_n_SDS);
-
- /* DMS : Register mode */
- /* RSEL : Select Next0 register set */
- /* SBE : No discharge of buffer data when aborted */
- /* DEM : No DMA interrupt mask */
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 0,
- DMAC2_CHCFG_n_DMS_SHIFT,
- DMAC2_CHCFG_n_DMS);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 0,
- DMAC2_CHCFG_n_RSEL_SHIFT,
- DMAC2_CHCFG_n_RSEL);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 0,
- DMAC2_CHCFG_n_SBE_SHIFT,
- DMAC2_CHCFG_n_SBE);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 0,
- DMAC2_CHCFG_n_DEM_SHIFT,
- DMAC2_CHCFG_n_DEM);
-
- /* ---- Continuous transfer ---- */
- if (DMAC_SAMPLE_CONTINUATION == continuation)
- {
- /* REN : Execute continuous transfer */
- /* RSW : Change register set when DMA transfer is completed. */
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 1,
- DMAC2_CHCFG_n_REN_SHIFT,
- DMAC2_CHCFG_n_REN);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 1,
- DMAC2_CHCFG_n_RSW_SHIFT,
- DMAC2_CHCFG_n_RSW);
- }
- /* ---- Single transfer ---- */
- else
- {
- /* REN : Do not execute continuous transfer */
- /* RSW : Do not change register set when DMA transfer is completed. */
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 0,
- DMAC2_CHCFG_n_REN_SHIFT,
- DMAC2_CHCFG_n_REN);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 0,
- DMAC2_CHCFG_n_RSW_SHIFT,
- DMAC2_CHCFG_n_RSW);
- }
-
- /* TM : Single transfer */
- /* SEL : Channel setting */
- /* HIEN, LOEN : On-chip peripheral module request */
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 0,
- DMAC2_CHCFG_n_TM_SHIFT,
- DMAC2_CHCFG_n_TM);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 2,
- DMAC2_CHCFG_n_SEL_SHIFT,
- DMAC2_CHCFG_n_SEL);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 1,
- DMAC2_CHCFG_n_HIEN_SHIFT,
- DMAC2_CHCFG_n_HIEN);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- 0,
- DMAC2_CHCFG_n_LOEN_SHIFT,
- DMAC2_CHCFG_n_LOEN);
-
- /* ---- Set factor by specified on-chip peripheral module request ---- */
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
- DMAC2_CHCFG_n_AM_SHIFT,
- DMAC2_CHCFG_n_AM);
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
- DMAC2_CHCFG_n_LVL_SHIFT,
- DMAC2_CHCFG_n_LVL);
- if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
- {
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
- DMAC2_CHCFG_n_REQD_SHIFT,
- DMAC2_CHCFG_n_REQD);
- }
- else
- {
- RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
- req_direction,
- DMAC2_CHCFG_n_REQD_SHIFT,
- DMAC2_CHCFG_n_REQD);
- }
- RZA_IO_RegWrite_32(&DMAC23.DMARS,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
- DMAC23_DMARS_CH2_RID_SHIFT,
- DMAC23_DMARS_CH2_RID);
- RZA_IO_RegWrite_32(&DMAC23.DMARS,
- usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
- DMAC23_DMARS_CH2_MID_SHIFT,
- DMAC23_DMARS_CH2_MID);
-
- /* PR : Round robin mode */
- RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
- 1,
- DMAC07_DCTRL_0_7_PR_SHIFT,
- DMAC07_DCTRL_0_7_PR);
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_Open
-* Description : Enables DMAC channel 2 transfer.
-* Arguments : uint32_t req : DMAC request mode
-* Return Value : 0 : Succeeded in enabling DMA transfer
-* : -1 : Failed to enable DMA transfer (due to DMA operation)
-*******************************************************************************/
-int32_t usb0_function_DMAC2_Open (uint32_t req)
-{
- int32_t ret;
- volatile uint8_t dummy;
-
- /* Transferable? */
- if ((0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
- DMAC2_CHSTAT_n_EN_SHIFT,
- DMAC2_CHSTAT_n_EN)) &&
- (0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
- DMAC2_CHSTAT_n_TACT_SHIFT,
- DMAC2_CHSTAT_n_TACT)))
- {
- /* Clear Channel Status Register */
- RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
- 1,
- DMAC2_CHCTRL_n_SWRST_SHIFT,
- DMAC2_CHCTRL_n_SWRST);
- dummy = RZA_IO_RegRead_32(&DMAC2.CHCTRL_n,
- DMAC2_CHCTRL_n_SWRST_SHIFT,
- DMAC2_CHCTRL_n_SWRST);
- /* Enable DMA transfer */
- RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
- 1,
- DMAC2_CHCTRL_n_SETEN_SHIFT,
- DMAC2_CHCTRL_n_SETEN);
-
- /* ---- Request by software ---- */
- if (DMAC_REQ_MODE_SOFT == req)
- {
- /* DMA transfer Request by software */
- RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
- 1,
- DMAC2_CHCTRL_n_STG_SHIFT,
- DMAC2_CHCTRL_n_STG);
- }
-
- ret = 0;
- }
- else
- {
- ret = -1;
- }
-
- return ret;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_Close
-* Description : Aborts DMAC channel 2 transfer. Returns the remaining transfer
-* : byte count at the time of DMA transfer abort to the argument
-* : *remain.
-* Arguments : uint32_t * remain : Remaining transfer byte count when
-* : : DMA transfer is aborted
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC2_Close (uint32_t * remain)
-{
-
- /* ==== Abort transfer ==== */
- RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
- 1,
- DMAC2_CHCTRL_n_CLREN_SHIFT,
- DMAC2_CHCTRL_n_CLREN);
-
- while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
- DMAC2_CHSTAT_n_TACT_SHIFT,
- DMAC2_CHSTAT_n_TACT))
- {
- /* Loop until transfer is aborted */
- }
-
- while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
- DMAC2_CHSTAT_n_EN_SHIFT,
- DMAC2_CHSTAT_n_EN))
- {
- /* Loop until 0 is set in EN before checking the remaining transfer byte count */
- }
- /* ==== Obtain remaining transfer byte count ==== */
- *remain = DMAC2.CRTB_n;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_DMAC2_Load_Set
-* Description : Sets the transfer source address, transfer destination
-* : address, and total transfer byte count respectively
-* : specified by the argument src_addr, dst_addr, and count to
-* : DMAC channel 2 as DMA transfer information.
-* : Sets the register set selected by the CHCFG_n register
-* : RSEL bit from the Next0 or Next1 register set.
-* : This function should be called when DMA transfer of DMAC
-* : channel 2 is aboted.
-* Arguments : uint32_t src_addr : Transfer source address
-* : uint32_t dst_addr : Transfer destination address
-* : uint32_t count : Total transfer byte count
-* Return Value : none
-*******************************************************************************/
-void usb0_function_DMAC2_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
-{
- uint8_t reg_set;
-
- /* Obtain register set in use */
- reg_set = RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
- DMAC2_CHSTAT_n_SR_SHIFT,
- DMAC2_CHSTAT_n_SR);
-
- /* ==== Load ==== */
- if (0 == reg_set)
- {
- /* ---- Next0 Register Set ---- */
- DMAC2.N0SA_n = src_addr; /* Start address of transfer source */
- DMAC2.N0DA_n = dst_addr; /* Start address of transfer destination */
- DMAC2.N0TB_n = count; /* Total transfer byte count */
- }
- else
- {
- /* ---- Next1 Register Set ---- */
- DMAC2.N1SA_n = src_addr; /* Start address of transfer source */
- DMAC2.N1DA_n = dst_addr; /* Start address of transfer destination */
- DMAC2.N1TB_n = count; /* Total transfer byte count */
- }
-}
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/src/userdef/usb0_function_userdef.c Thu Mar 26 14:30:20 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,762 +0,0 @@
-/*******************************************************************************
-* 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_userdef.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 <stdio.h>
-#include "r_typedefs.h"
-#include "iodefine.h"
-#include "devdrv_usb_function_api.h"
-#include "usb0_function_dmacdrv.h" /* common DMAC driver for USB */
-
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define DUMMY_ACCESS OSTM0CNT
-
-/* #define CACHE_WRITEBACK */
-
-
-/*******************************************************************************
-Imported global variables and functions (from other files)
-*******************************************************************************/
-extern int32_t io_cwb(unsigned long start, unsigned long end);
-
-
-/*******************************************************************************
-Exported global variables and functions (to be accessed by other files)
-*******************************************************************************/
-static void usb0_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
- uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void usb0_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
- uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
-static void Userdef_USB_usb0_function_delay_10us_2(void);
-
-
-/*******************************************************************************
-Private global variables and functions
-*******************************************************************************/
-
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_d0fifo_dmaintid
-* Description : get D0FIFO DMA Interrupt ID
-* Arguments : none
-* Return Value : D0FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid (void)
-{
-#if 0
- return DMAINT1_IRQn;
-#else
- return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_d1fifo_dmaintid
-* Description : get D1FIFO DMA Interrupt ID
-* Arguments : none
-* Return Value : D1FIFO DMA Interrupt ID
-*******************************************************************************/
-IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid (void)
-{
-#if 0
- return DMAINT1_IRQn;
-#else
- return 0xFFFF;
-#endif
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_attach
-* Description : Wait for the software of 1ms.
-* : Alter this function according to the user's system.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_attach (void)
-{
- printf("\n");
- printf("channel 0 attach device\n");
- printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_detach
-* Description : Wait for the software of 1ms.
-* : Alter this function according to the user's system.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_detach (void)
-{
- printf("\n");
- printf("channel 0 detach device\n");
- printf("\n");
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_1ms
-* Description : Wait for the software of 1ms.
-* : Alter this function according to the user's system.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_1ms (void)
-{
- volatile int i;
- volatile unsigned long tmp;
-
- /*
- * Wait 1ms (Please change for your MCU).
- */
- for (i = 0; i < 1440; ++i)
- {
- tmp = DUMMY_ACCESS;
- }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_xms
-* Description : Wait for the software in the period of time specified by the
-* : argument.
-* : Alter this function according to the user's system.
-* Arguments : uint32_t msec ; Wait Time (msec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_xms (uint32_t msec)
-{
- volatile unsigned short i;
-
- for (i = 0; i < msec; ++i)
- {
- Userdef_USB_usb0_function_delay_1ms();
- }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_10us
-* Description : Waits for software for the period specified by the argument.
-* : Alter this function according to the user's system.
-* Arguments : uint32_t usec ; Wait Time(x 10usec)
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_10us (uint32_t usec)
-{
- volatile int i;
-
- /* Wait 10us (Please change for your MCU) */
- for (i = 0; i < usec; ++i)
- {
- Userdef_USB_usb0_function_delay_10us_2();
- }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_10us_2
-* Description : Waits for software for the period specified by the argument.
-* : Alter this function according to the user's system.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-static void Userdef_USB_usb0_function_delay_10us_2 (void)
-{
- volatile int i;
- volatile unsigned long tmp;
-
- /* Wait 1us (Please change for your MCU) */
- for (i = 0; i < 14; ++i)
- {
- tmp = DUMMY_ACCESS;
- }
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_delay_500ns
-* Description : Wait for software for 500ns.
-* : Alter this function according to the user's system.
-* Arguments : none
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_delay_500ns (void)
-{
- volatile int i;
- volatile unsigned long tmp;
-
- /* Wait 500ns (Please change for your MCU) */
- /* Wait 500ns I clock 266MHz */
- tmp = DUMMY_ACCESS;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_start_dma
-* Description : Enables DMA transfer on the information specified by the argument.
-* : Set DMAC register by this function to enable DMA transfer.
-* : After executing this function, USB module is set to start DMA
-* : transfer. DMA transfer should not wait for DMA transfer complete.
-* Arguments : USB_FUNCTION_DMA_t *dma : DMA parameter
-* : typedef struct{
-* : uint32_t fifo; FIFO for using
-* : uint32_t buffer; Start address of transfer source/destination
-* : uint32_t bytes; Transfer size(Byte)
-* : uint32_t dir; Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
-* : uint32_t size; DMA transfer size
-* : } USB_FUNCTION_DMA_t;
-* : uint16_t dfacc ; 0 : cycle steal mode
-* : 1 : 16byte continuous mode
-* : 2 : 32byte continuous mode
-* Return Value : none
-*******************************************************************************/
-void Userdef_USB_usb0_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
-{
- uint32_t trncount;
- uint32_t src;
- uint32_t dst;
- uint32_t size;
- uint32_t dir;
-#ifdef CACHE_WRITEBACK
- uint32_t ptr;
-#endif
-
- trncount = dma->bytes;
- dir = dma->dir;
-
- if (dir == USB_FUNCTION_FIFO2BUF)
- {
- /* DxFIFO determination */
- dst = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- src = (uint32_t)(&USB200.D0FIFO.UINT32);
- }
- else
- {
- src = (uint32_t)(&USB200.D1FIFO.UINT32);
- }
- size = dma->size;
-
- if (size == 0)
- {
- src += 3; /* byte access */
- }
- else if (size == 1)
- {
- src += 2; /* short access */
- }
- else
- {
- /* Do Nothing */
- }
-#else
- size = dma->size;
-
- if (size == 2)
- {
- /* 32bit access */
- if (dfacc == 2)
- {
- /* 32byte access */
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- src = (uint32_t)(&USB200.D0FIFOB0);
- }
- else
- {
- src = (uint32_t)(&USB200.D1FIFOB0);
- }
- }
- else if (dfacc == 1)
- {
- /* 16byte access */
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- src = (uint32_t)(&USB200.D0FIFOB0);
- }
- else
- {
- src = (uint32_t)(&USB200.D1FIFOB0);
- }
- }
- else
- {
- /* normal access */
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- src = (uint32_t)(&USB200.D0FIFO.UINT32);
- }
- else
- {
- src = (uint32_t)(&USB200.D1FIFO.UINT32);
- }
- }
- }
- else if (size == 1)
- {
- /* 16bit access */
- dfacc = 0; /* force normal access */
-
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- src = (uint32_t)(&USB200.D0FIFO.UINT32);
- }
- else
- {
- src = (uint32_t)(&USB200.D1FIFO.UINT32);
- }
- src += 2; /* short access */
- }
- else
- {
- /* 8bit access */
- dfacc = 0; /* force normal access */
-
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- src = (uint32_t)(&USB200.D0FIFO.UINT32);
- }
- else
- {
- src = (uint32_t)(&USB200.D1FIFO.UINT32);
- }
- src += 3; /* byte access */
- }
-#endif
- }
- else
- {
- /* DxFIFO determination */
- src = dma->buffer;
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- dst = (uint32_t)(&USB200.D0FIFO.UINT32);
- }
- else
- {
- dst = (uint32_t)(&USB200.D1FIFO.UINT32);
- }
- size = dma->size;
-
- if (size == 0)
- {
- dst += 3; /* byte access */
- }
- else if (size == 1)
- {
- dst += 2; /* short access */
- }
- else
- {
- /* Do Nothing */
- }
-#else
- size = dma->size;
-
- if (size == 2)
- {
- /* 32bit access */
- if (dfacc == 2)
- {
- /* 32byte access */
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- dst = (uint32_t)(&USB200.D0FIFOB0);
- }
- else
- {
- dst = (uint32_t)(&USB200.D1FIFOB0);
- }
- }
- else if (dfacc == 1)
- {
- /* 16byte access */
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- dst = (uint32_t)(&USB200.D0FIFOB0);
- }
- else
- {
- dst = (uint32_t)(&USB200.D1FIFOB0);
- }
- }
- else
- {
- /* normal access */
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- dst = (uint32_t)(&USB200.D0FIFO.UINT32);
- }
- else
- {
- dst = (uint32_t)(&USB200.D1FIFO.UINT32);
- }
- }
- }
- else if (size == 1)
- {
- /* 16bit access */
- dfacc = 0; /* force normal access */
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- dst = (uint32_t)(&USB200.D0FIFO.UINT32);
- }
- else
- {
- dst = (uint32_t)(&USB200.D1FIFO.UINT32);
- }
- dst += 2; /* short access */
- }
- else
- {
- /* 8bit access */
- dfacc = 0; /* force normal access */
-
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- dst = (uint32_t)(&USB200.D0FIFO.UINT32);
- }
- else
- {
- dst = (uint32_t)(&USB200.D1FIFO.UINT32);
- }
- dst += 3; /* byte access */
- }
-#endif
- }
-
-#ifdef CACHE_WRITEBACK
- ptr = (uint32_t)dma->buffer;
-
- if ((ptr & 0x20000000ul) == 0)
- {
- io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
- }
-#endif
-
- if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
- {
- usb0_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
- }
- else
- {
- usb0_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
- }
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_dmac0
-* Description : Enables DMA transfer on the information specified by the argument.
-* Arguments : uint32_t src : src address
-* : uint32_t dst : dst address
-* : uint32_t count : transfer byte
-* : uint32_t size : transfer size
-* : uint32_t dir : direction
-* : uint32_t fifo : FIFO(D0FIFO or D1FIFO)
-* : uint16_t dfacc : 0 : normal access
-* : : 1 : 16byte access
-* : : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
- uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
- dmac_transinfo_t trans_info;
- uint32_t request_factor = 0;
- int32_t ret;
-
- /* ==== Variable setting for DMAC initialization ==== */
- trans_info.src_addr = (uint32_t)src; /* Start address of transfer source */
- trans_info.dst_addr = (uint32_t)dst; /* Start address of transfer destination */
- trans_info.count = (uint32_t)count; /* Total byte count to be transferred */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
- if (size == 0)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
- }
- else if (size == 1)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
- }
- else if (size == 2)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
- }
- else
- {
- printf("size error!!\n");
- }
-#else
- if (dfacc == 2)
- {
- /* 32byte access */
- trans_info.src_size = DMAC_TRANS_SIZE_256; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_256; /* Transfer destination transfer size */
- }
- else if (dfacc == 1)
- {
- /* 16byte access */
- trans_info.src_size = DMAC_TRANS_SIZE_128; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_128; /* Transfer destination transfer size */
- }
- else
- {
- /* normal access */
- if (size == 0)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
- }
- else if (size == 1)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
- }
- else if (size == 2)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
- }
- else
- {
- printf("size error!!\n");
- }
- }
-#endif
-
- if (dir == USB_FUNCTION_FIFO2BUF)
- {
- request_factor =DMAC_REQ_USB0_DMA0_RX; /* USB_0 channel 0 receive FIFO full */
- trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer source address */
- trans_info.daddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer destination address */
- }
- else if (dir == USB_FUNCTION_BUF2FIFO)
- {
- request_factor =DMAC_REQ_USB0_DMA0_TX; /* USB_0 channel 0 receive FIFO empty */
- trans_info.saddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer source address */
- trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer destination address */
- }
- else
- {
- /* Do Nothing */
- }
-
- /* ==== DMAC initialization ==== */
- usb0_function_DMAC1_PeriReqInit((const dmac_transinfo_t *)&trans_info,
- DMAC_MODE_REGISTER,
- DMAC_SAMPLE_SINGLE,
- request_factor,
- 0); /* Don't care DMAC_REQ_REQD is setting in
- usb0_function_DMAC1_PeriReqInit() */
-
- /* ==== DMAC startup ==== */
- ret = usb0_function_DMAC1_Open(DMAC_REQ_MODE_PERI);
- if (ret != 0)
- {
- printf("DMAC1 Open error!!\n");
- }
-
- return;
-}
-
-/*******************************************************************************
-* Function Name: usb0_function_enable_dmac1
-* Description : Enables DMA transfer on the information specified by the argument.
-* Arguments : uint32_t src : src address
-* : uint32_t dst : dst address
-* : uint32_t count : transfer byte
-* : uint32_t size : transfer size
-* : uint32_t dir : direction
-* : uint32_t fifo : FIFO(D0FIFO or D1FIFO)
-* : uint16_t dfacc : 0 : normal access
-* : : 1 : 16byte access
-* : : 2 : 32byte access
-* Return Value : none
-*******************************************************************************/
-static void usb0_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
- uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
-{
- dmac_transinfo_t trans_info;
- uint32_t request_factor = 0;
- int32_t ret;
-
- /* ==== Variable setting for DMAC initialization ==== */
- trans_info.src_addr = (uint32_t)src; /* Start address of transfer source */
- trans_info.dst_addr = (uint32_t)dst; /* Start address of transfer destination */
- trans_info.count = (uint32_t)count; /* Total byte count to be transferred */
-#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
- if (size == 0)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
- }
- else if (size == 1)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
- }
- else if (size == 2)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
- }
- else
- {
- printf("size error!!\n");
- }
-#else
- if (dfacc == 2)
- {
- /* 32byte access */
- trans_info.src_size = DMAC_TRANS_SIZE_256; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_256; /* Transfer destination transfer size */
- }
- else if (dfacc == 1)
- {
- /* 16byte access */
- trans_info.src_size = DMAC_TRANS_SIZE_128; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_128; /* Transfer destination transfer size */
- }
- else
- {
- /* normal access */
- if (size == 0)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
- }
- else if (size == 1)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
- }
- else if (size == 2)
- {
- trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
- trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
- }
- else
- {
- printf("size error!!\n");
- }
- }
-#endif
-
- if (dir == USB_FUNCTION_FIFO2BUF)
- {
- request_factor =DMAC_REQ_USB0_DMA1_RX; /* USB_0 channel 0 receive FIFO full */
- trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer source address */
- trans_info.daddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer destination address */
- }
- else if (dir == USB_FUNCTION_BUF2FIFO)
- {
- request_factor =DMAC_REQ_USB0_DMA1_TX; /* USB_0 channel 0 receive FIFO empty */
- trans_info.saddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer source address */
- trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer destination address */
- }
- else
- {
- /* Do Nothing */
- }
-
- /* ==== DMAC initialization ==== */
- usb0_function_DMAC2_PeriReqInit((const dmac_transinfo_t *)&trans_info,
- DMAC_MODE_REGISTER,
- DMAC_SAMPLE_SINGLE,
- request_factor,
- 0); /* Don't care DMAC_REQ_REQD is setting in
- usb0_function_DMAC1_PeriReqInit() */
-
- /* ==== DMAC startup ==== */
- ret = usb0_function_DMAC2_Open(DMAC_REQ_MODE_PERI);
- if (ret != 0)
- {
- printf("DMAC2 Open error!!\n");
- }
-
- return;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_stop_dma0
-* Description : Disables DMA transfer.
-* : This function should be executed to DMAC executed at the time
-* : of specification of D0_FIF0_DMA in dma->fifo.
-* Arguments : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-* : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb0_function_stop_dma0 (void)
-{
- uint32_t remain;
-
- /* ==== DMAC release ==== */
- usb0_function_DMAC1_Close(&remain);
-
- return remain;
-}
-
-/*******************************************************************************
-* Function Name: Userdef_USB_usb0_function_stop_dma1
-* Description : Disables DMA transfer.
-* : This function should be executed to DMAC executed at the time
-* : of specification of D1_FIF0_DMA in dma->fifo.
-* Arguments : none
-* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
-* : regarding to the bus width.
-*******************************************************************************/
-uint32_t Userdef_USB_usb0_function_stop_dma1 (void)
-{
- uint32_t remain;
-
- /* ==== DMAC release ==== */
- usb0_function_DMAC2_Close(&remain);
-
- return remain;
-}
-
-/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function.h Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,171 @@
+/*******************************************************************************
+* 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.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB0_FUNCTION_H
+#define USB0_FUNCTION_H
+
+
+/*******************************************************************************
+Includes <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "devdrv_usb_function_api.h"
+#include "usb_function.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern const uint16_t g_usb0_function_bit_set[];
+extern uint32_t g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint8_t *g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+extern uint16_t g_usb0_function_PipeIgnore[];
+extern uint16_t g_usb0_function_PipeTbl[];
+extern uint16_t g_usb0_function_pipe_status[];
+extern uint32_t g_usb0_function_PipeDataSize[];
+
+extern USB_FUNCTION_DMA_t g_usb0_function_DmaInfo[];
+extern uint16_t g_usb0_function_DmaPipe[];
+extern uint16_t g_usb0_function_DmaBval[];
+extern uint16_t g_usb0_function_DmaStatus[];
+
+extern uint16_t g_usb0_function_CtrZeroLengthFlag;
+
+extern uint16_t g_usb0_function_ConfigNum;
+extern uint16_t g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
+extern uint16_t g_usb0_function_RemoteWakeupFlag;
+extern uint16_t g_usb0_function_TestModeFlag;
+extern uint16_t g_usb0_function_TestModeSelectors;
+
+extern uint16_t g_usb0_function_ReqType;
+extern uint16_t g_usb0_function_ReqTypeType;
+extern uint16_t g_usb0_function_ReqTypeRecip;
+extern uint16_t g_usb0_function_ReqRequest;
+extern uint16_t g_usb0_function_ReqValue;
+extern uint16_t g_usb0_function_ReqIndex;
+extern uint16_t g_usb0_function_ReqLength;
+
+extern uint16_t g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+extern uint16_t g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+/* ==== common ==== */
+void usb0_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
+void usb0_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
+uint16_t usb0_function_is_hispeed(void);
+uint16_t usb0_function_is_hispeed_enable(void);
+uint16_t usb0_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb0_function_write_buffer(uint16_t pipe);
+uint16_t usb0_function_write_buffer_c(uint16_t pipe);
+uint16_t usb0_function_write_buffer_d0(uint16_t pipe);
+uint16_t usb0_function_write_buffer_d1(uint16_t pipe);
+void usb0_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb0_function_read_buffer(uint16_t pipe);
+uint16_t usb0_function_read_buffer_c(uint16_t pipe);
+uint16_t usb0_function_read_buffer_d0(uint16_t pipe);
+uint16_t usb0_function_read_buffer_d1(uint16_t pipe);
+uint16_t usb0_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void usb0_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void usb0_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
+uint16_t usb0_function_get_mbw(uint32_t trncount, uint32_t dtptr);
+uint16_t usb0_function_read_dma(uint16_t pipe);
+void usb0_function_brdy_int(uint16_t status, uint16_t int_enb);
+void usb0_function_nrdy_int(uint16_t status, uint16_t int_enb);
+void usb0_function_bemp_int(uint16_t status, uint16_t int_enb);
+void usb0_function_setting_interrupt(uint8_t level);
+void usb0_function_reset_module(uint16_t clockmode);
+uint16_t usb0_function_get_buf_size(uint16_t pipe);
+uint16_t usb0_function_get_mxps(uint16_t pipe);
+void usb0_function_clear_brdy_sts(uint16_t pipe);
+void usb0_function_clear_bemp_sts(uint16_t pipe);
+void usb0_function_clear_nrdy_sts(uint16_t pipe);
+void usb0_function_set_pid_buf(uint16_t pipe);
+void usb0_function_set_pid_nak(uint16_t pipe);
+void usb0_function_set_pid_stall(uint16_t pipe);
+void usb0_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb0_function_get_pid(uint16_t pipe);
+void usb0_function_set_sqclr(uint16_t pipe);
+void usb0_function_set_sqset(uint16_t pipe);
+void usb0_function_set_csclr(uint16_t pipe);
+void usb0_function_aclrm(uint16_t pipe);
+void usb0_function_set_aclrm(uint16_t pipe);
+void usb0_function_clr_aclrm(uint16_t pipe);
+uint16_t usb0_function_get_sqmon(uint16_t pipe);
+uint16_t usb0_function_get_inbuf(uint16_t pipe);
+
+/* ==== function ==== */
+void usb0_function_init_status(void);
+void usb0_function_InitModule(uint16_t mode);
+uint16_t usb0_function_CheckVBUStaus(void);
+void usb0_function_USB_FUNCTION_Attach(void);
+void usb0_function_USB_FUNCTION_Detach(void);
+void usb0_function_USB_FUNCTION_BusReset(void);
+void usb0_function_USB_FUNCTION_Resume(void);
+void usb0_function_USB_FUNCTION_Suspend(void);
+void usb0_function_USB_FUNCTION_TestMode(void);
+void usb0_function_ResetDCP(void);
+void usb0_function_ResetEP(uint16_t num);
+uint16_t usb0_function_EpToPipe(uint16_t ep);
+void usb0_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
+uint16_t usb0_function_GetConfigNum(void);
+uint16_t usb0_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
+uint16_t usb0_function_CheckRemoteWakeup(void);
+void usb0_function_clear_alt(void);
+void usb0_function_clear_pipe_tbl(void);
+void usb0_function_clear_ep_table_index(void);
+uint16_t usb0_function_GetInterfaceNum(uint16_t num);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* USB0_FUNCTION_H */
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_api.h Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,104 @@
+/*******************************************************************************
+* 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_api.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB0_FUNCTION_API_H
+#define USB0_FUNCTION_API_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Includes <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Variable Externs
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void usb0_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
+uint16_t usb0_api_function_IsConfigured(void);
+uint16_t usb0_function_GetDeviceState(void);
+uint16_t usb0_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
+void usb0_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
+uint16_t usb0_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb0_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
+void usb0_api_function_clear_pipe_status(uint16_t pipe);
+void usb0_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+void usb0_api_function_set_pid_buf(uint16_t pipe);
+void usb0_api_function_set_pid_nak(uint16_t pipe);
+void usb0_api_function_set_pid_stall(uint16_t pipe);
+void usb0_api_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb0_api_function_get_pid(uint16_t pipe);
+int32_t usb0_api_function_check_stall(uint16_t pipe);
+void usb0_api_function_set_sqclr(uint16_t pipe);
+void usb0_api_function_set_sqset(uint16_t pipe);
+void usb0_api_function_set_csclr(uint16_t pipe);
+void usb0_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void usb0_api_function_clear_brdy_sts(uint16_t pipe);
+void usb0_api_function_clear_bemp_sts(uint16_t pipe);
+void usb0_api_function_clear_nrdy_sts(uint16_t pipe);
+
+void usb0_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb0_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB0_FUNCTION_API_H */
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function_dmacdrv.h Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* 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_dmacdrv.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB0_FUNCTION_DMACDRV_H
+#define USB0_FUNCTION_DMACDRV_H
+
+
+/*******************************************************************************
+Includes <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+typedef struct dmac_transinfo
+{
+ uint32_t src_addr; /* Transfer source address */
+ uint32_t dst_addr; /* Transfer destination address */
+ uint32_t count; /* Transfer byte count */
+ uint32_t src_size; /* Transfer source data size */
+ uint32_t dst_size; /* Transfer destination data size */
+ uint32_t saddr_dir; /* Transfer source address direction */
+ uint32_t daddr_dir; /* Transfer destination address direction */
+} dmac_transinfo_t;
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+/* ==== Transfer specification of the sample program ==== */
+#define DMAC_SAMPLE_SINGLE (0) /* Single transfer */
+#define DMAC_SAMPLE_CONTINUATION (1) /* Continuous transfer (use REN bit) */
+
+/* ==== DMA modes ==== */
+#define DMAC_MODE_REGISTER (0) /* Register mode */
+#define DMAC_MODE_LINK (1) /* Link mode */
+
+/* ==== Transfer requests ==== */
+#define DMAC_REQ_MODE_EXT (0) /* External request */
+#define DMAC_REQ_MODE_PERI (1) /* On-chip peripheral module request */
+#define DMAC_REQ_MODE_SOFT (2) /* Auto-request (request by software) */
+
+/* ==== DMAC transfer sizes ==== */
+#define DMAC_TRANS_SIZE_8 (0) /* 8 bits */
+#define DMAC_TRANS_SIZE_16 (1) /* 16 bits */
+#define DMAC_TRANS_SIZE_32 (2) /* 32 bits */
+#define DMAC_TRANS_SIZE_64 (3) /* 64 bits */
+#define DMAC_TRANS_SIZE_128 (4) /* 128 bits */
+#define DMAC_TRANS_SIZE_256 (5) /* 256 bits */
+#define DMAC_TRANS_SIZE_512 (6) /* 512 bits */
+#define DMAC_TRANS_SIZE_1024 (7) /* 1024 bits */
+
+/* ==== Address increment for transferring ==== */
+#define DMAC_TRANS_ADR_NO_INC (1) /* Not increment */
+#define DMAC_TRANS_ADR_INC (0) /* Increment */
+
+/* ==== Method for detecting DMA request ==== */
+#define DMAC_REQ_DET_FALL (0) /* Falling edge detection */
+#define DMAC_REQ_DET_RISE (1) /* Rising edge detection */
+#define DMAC_REQ_DET_LOW (2) /* Low level detection */
+#define DMAC_REQ_DET_HIGH (3) /* High level detection */
+
+/* ==== Request Direction ==== */
+#define DMAC_REQ_DIR_SRC (0) /* DMAREQ is the source/ DMAACK is active when reading */
+#define DMAC_REQ_DIR_DST (1) /* DMAREQ is the destination/ DMAACK is active when writing */
+
+/* ==== Descriptors ==== */
+#define DMAC_DESC_HEADER (0) /* Header */
+#define DMAC_DESC_SRC_ADDR (1) /* Source Address */
+#define DMAC_DESC_DST_ADDR (2) /* Destination Address */
+#define DMAC_DESC_COUNT (3) /* Transaction Byte */
+#define DMAC_DESC_CHCFG (4) /* Channel Confg */
+#define DMAC_DESC_CHITVL (5) /* Channel Interval */
+#define DMAC_DESC_CHEXT (6) /* Channel Extension */
+#define DMAC_DESC_LINK_ADDR (7) /* Link Address */
+
+/* ==== On-chip peripheral module requests ===== */
+typedef enum dmac_request_factor
+{
+ DMAC_REQ_USB0_DMA0_TX, /* USB_0 channel 0 transmit FIFO empty */
+ DMAC_REQ_USB0_DMA0_RX, /* USB_0 channel 0 receive FIFO full */
+ DMAC_REQ_USB0_DMA1_TX, /* USB_0 channel 1 transmit FIFO empty */
+ DMAC_REQ_USB0_DMA1_RX, /* USB_0 channel 1 receive FIFO full */
+ DMAC_REQ_USB1_DMA0_TX, /* USB_1 channel 0 transmit FIFO empty */
+ DMAC_REQ_USB1_DMA0_RX, /* USB_1 channel 0 receive FIFO full */
+ DMAC_REQ_USB1_DMA1_TX, /* USB_1 channel 1 transmit FIFO empty */
+ DMAC_REQ_USB1_DMA1_RX, /* USB_1 channel 1 receive FIFO full */
+} dmac_request_factor_t;
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void usb0_function_DMAC1_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+ uint32_t request_factor, uint32_t req_direction);
+int32_t usb0_function_DMAC1_Open(uint32_t req);
+void usb0_function_DMAC1_Close(uint32_t *remain);
+void usb0_function_DMAC1_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+void usb0_function_DMAC2_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+ uint32_t request_factor, uint32_t req_direction);
+int32_t usb0_function_DMAC2_Open(uint32_t req);
+void usb0_function_DMAC2_Close(uint32_t *remain);
+void usb0_function_DMAC2_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB0_FUNCTION_DMACDRV_H */
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dataio.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,2933 @@
+/*******************************************************************************
+* 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_dataio.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
+*******************************************************************************/
+static uint16_t g_usb0_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
+
+static void usb0_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
+static void usb0_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void usb0_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static void usb0_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void usb0_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static uint16_t usb0_function_read_dma_d0(uint16_t pipe);
+static uint16_t usb0_function_read_dma_d1(uint16_t pipe);
+static uint16_t usb0_function_write_dma_d0(uint16_t pipe);
+static uint16_t usb0_function_write_dma_d1(uint16_t pipe);
+
+static void usb0_function_read_c_fifo(uint16_t pipe, uint16_t count);
+static void usb0_function_write_c_fifo(uint16_t Pipe, uint16_t count);
+static void usb0_function_read_d0_fifo(uint16_t pipe, uint16_t count);
+static void usb0_function_write_d0_fifo(uint16_t pipe, uint16_t count);
+static void usb0_function_read_d1_fifo(uint16_t pipe, uint16_t count);
+static void usb0_function_write_d1_fifo(uint16_t pipe, uint16_t count);
+
+static void usb0_function_clear_transaction_counter(uint16_t pipe);
+static void usb0_function_set_transaction_counter(uint16_t pipe, uint32_t count);
+
+static uint32_t usb0_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
+
+static uint16_t usb0_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
+static uint16_t usb0_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
+
+
+/*******************************************************************************
+* Function Name: usb0_function_start_send_transfer
+* Description : Starts the USB data communication using pipe specified by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t status;
+ uint16_t usefifo;
+ uint16_t mbw;
+
+ g_usb0_function_data_count[pipe] = size;
+ g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ usb0_function_clear_bemp_sts(pipe);
+ usb0_function_clear_brdy_sts(pipe);
+ usb0_function_clear_nrdy_sts(pipe);
+
+ mbw = usb0_function_get_mbw(size, (uint32_t)data);
+
+ usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ switch (usefifo)
+ {
+ case USB_FUNCTION_D0FIFO_USE:
+ case USB_FUNCTION_D0FIFO_DMA:
+ usefifo = USB_FUNCTION_D0USE;
+ break;
+
+ case USB_FUNCTION_D1FIFO_USE:
+ case USB_FUNCTION_D1FIFO_DMA:
+ usefifo = USB_FUNCTION_D1USE;
+ break;
+
+ default:
+ usefifo = USB_FUNCTION_CUSE;
+ break;
+ };
+
+ usb0_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
+
+ usb0_function_clear_transaction_counter(pipe);
+
+ usb0_function_aclrm(pipe);
+
+ status = usb0_function_write_buffer(pipe);
+
+ if (status != DEVDRV_USBF_FIFOERROR)
+ {
+ usb0_function_set_pid_buf(pipe);
+ }
+
+ return status;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer
+* Description : Writes data in the buffer allocated in the pipe specified by
+* : the argument. The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer (uint16_t pipe)
+{
+ uint16_t status;
+ uint16_t usefifo;
+
+ g_usb0_function_PipeIgnore[pipe] = 0;
+ usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ switch (usefifo)
+ {
+ case USB_FUNCTION_D0FIFO_USE:
+ status = usb0_function_write_buffer_d0(pipe);
+ break;
+
+ case USB_FUNCTION_D1FIFO_USE:
+ status = usb0_function_write_buffer_d1(pipe);
+ break;
+
+ case USB_FUNCTION_D0FIFO_DMA:
+ status = usb0_function_write_dma_d0(pipe);
+ break;
+
+ case USB_FUNCTION_D1FIFO_DMA:
+ status = usb0_function_write_dma_d1(pipe);
+ break;
+
+ default:
+ status = usb0_function_write_buffer_c(pipe);
+ break;
+ };
+
+ switch (status)
+ {
+ case DEVDRV_USBF_WRITING: /* Continue of data write */
+ usb0_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
+ usb0_function_enable_brdy_int(pipe); /* Enable Ready Interrupt */
+ break;
+
+ case DEVDRV_USBF_WRITEEND: /* End of data write */
+ case DEVDRV_USBF_WRITESHRT: /* End of data write */
+ usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ usb0_function_clear_nrdy_sts(pipe);
+ usb0_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
+ /* for last transfer */
+ usb0_function_enable_bemp_int(pipe); /* Enable Empty Interrupt */
+ break;
+
+ case DEVDRV_USBF_WRITEDMA: /* DMA write */
+ usb0_function_clear_nrdy_sts(pipe);
+ usb0_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
+ break;
+
+ case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
+ default:
+ usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ usb0_function_disable_bemp_int(pipe); /* Disable Empty Interrupt */
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer_c
+* Description : Writes data in the buffer allocated in the pipe specified in
+* : the argument. Writes data by CPU transfer using CFIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer_c (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+
+ if (g_usb0_function_CtrZeroLengthFlag == 1)
+ {
+ g_usb0_function_CtrZeroLengthFlag = 0; /* Zero Length Packet Flag CLR */
+ return DEVDRV_USBF_WRITEEND;
+ }
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+ if (pipe == USB_FUNCTION_PIPE0)
+ {
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+ }
+ else
+ {
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+ }
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb0_function_get_buf_size(pipe); /* Data buffer size */
+ mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
+ {
+ status = DEVDRV_USBF_WRITEEND; /* write continues */
+ count = g_usb0_function_data_count[pipe];
+
+ if (count == 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+ }
+ else
+ {
+ status = DEVDRV_USBF_WRITING; /* write continues */
+ count = (uint32_t)size;
+ }
+
+ usb0_function_write_c_fifo(pipe, (uint16_t)count);
+
+ if (g_usb0_function_data_count[pipe] < (uint32_t)size)
+ {
+ g_usb0_function_data_count[pipe] = 0;
+
+ if (RZA_IO_RegRead_16(&USB200.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
+ {
+ USB200.CFIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
+ g_usb0_function_CtrZeroLengthFlag = 1; /* Zero Length Packet Flag */
+ }
+ }
+ else
+ {
+ g_usb0_function_data_count[pipe] -= count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer_d0
+* Description : Writes data in the buffer allocated in the pipe specified in the argument.
+* : Writes data by CPU transfer using D0FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer_d0 (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb0_function_get_buf_size(pipe); /* Data buffer size */
+ mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
+ {
+ status = DEVDRV_USBF_WRITEEND; /* write continues */
+ count = g_usb0_function_data_count[pipe];
+
+ if (count == 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+ }
+ else
+ {
+ status = DEVDRV_USBF_WRITING; /* write continues */
+ count = (uint32_t)size;
+ }
+
+ usb0_function_write_d0_fifo(pipe, (uint16_t)count);
+
+ if (g_usb0_function_data_count[pipe] < (uint32_t)size)
+ {
+ g_usb0_function_data_count[pipe] = 0;
+ if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+ {
+ USB200.D0FIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
+ }
+ }
+ else
+ {
+ g_usb0_function_data_count[pipe] -= count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_buffer_d1
+* Description : Writes data in the buffer allocated in the pipe specified in the argument.
+* : Writes data by CPU transfer using D1FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_write_buffer_d1 (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb0_function_get_buf_size(pipe); /* Data buffer size */
+ mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb0_function_data_count[pipe] <= (uint32_t)size)
+ {
+ status = DEVDRV_USBF_WRITEEND; /* write continues */
+ count = g_usb0_function_data_count[pipe];
+
+ if (count == 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+ }
+ else
+ {
+ status = DEVDRV_USBF_WRITING; /* write continues */
+ count = (uint32_t)size;
+ }
+
+ usb0_function_write_d1_fifo(pipe, (uint16_t)count);
+
+ if (g_usb0_function_data_count[pipe] < (uint32_t)size)
+ {
+ g_usb0_function_data_count[pipe] = 0;
+
+ if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+ {
+ USB200.D1FIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
+ }
+ }
+ else
+ {
+ g_usb0_function_data_count[pipe] -= count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_dma_d0
+* Description : Writes data in the buffer allocated in the pipe specified in the argument.
+* : Writes data by DMA transfer using D0FIFO.
+* : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND : Write end
+* : DEVDRV_USBF_WRITESHRT : short data
+* : DEVDRV_USBF_WRITING : Continue of data write
+* : DEVDRV_USBF_WRITEDMA : Write DMA
+* : DEVDRV_USBF_FIFOERROR : FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_write_dma_d0 (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t dfacc = 0;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb0_function_get_buf_size(pipe); /* Data buffer size */
+ count = g_usb0_function_data_count[pipe];
+
+ if (count != 0)
+ {
+ g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
+
+ if ((count % size) != 0)
+ {
+ g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
+ }
+ else
+ {
+ g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
+ }
+
+ dfacc = usb0_function_set_dfacc_d0(mbw, count);
+
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2; /* 32bit transfer */
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1; /* 16bit transfer */
+ }
+ else
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0; /* 8bit transfer */
+ }
+
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo = USB_FUNCTION_D0FIFO_DMA;
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir = USB_FUNCTION_BUF2FIFO;
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes = count;
+
+ Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+ usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+ RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+ g_usb0_function_data_count[pipe] = 0;
+ g_usb0_function_data_pointer[pipe] += count;
+ status = DEVDRV_USBF_WRITEDMA; /* DMA write */
+ }
+ else
+ {
+ if (RZA_IO_RegRead_16(&USB200.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+ {
+ RZA_IO_RegWrite_16(&USB200.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+ }
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_dma_d1
+* Description : Writes data in the buffer allocated in the pipe specified in the argument.
+* : Writes data by DMA transfer using D1FIFO.
+* : The DMA-ch for using is specified by Userdef_USB_usb0_function_start_dma().
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND : Write end
+* : DEVDRV_USBF_WRITESHRT : short data
+* : DEVDRV_USBF_WRITING : Continue of data write
+* : DEVDRV_USBF_WRITEDMA : Write DMA
+* : DEVDRV_USBF_FIFOERROR : FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_write_dma_d1 (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t dfacc=0;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb0_function_get_buf_size(pipe); /* Data buffer size */
+ count = g_usb0_function_data_count[pipe];
+
+ if (count != 0)
+ {
+ g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
+ if ((count % size) != 0)
+ {
+ g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
+ }
+ else
+ {
+ g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
+ }
+
+ dfacc = usb0_function_set_dfacc_d1(mbw, count);
+
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2; /* 32bit transfer */
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1; /* 16bit transfer */
+ }
+ else
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0; /* 8bit transfer */
+ }
+
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo = USB_FUNCTION_D1FIFO_DMA;
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir = USB_FUNCTION_BUF2FIFO;
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes = count;
+
+ Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+ usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+ RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+ g_usb0_function_data_count[pipe] = 0;
+ g_usb0_function_data_pointer[pipe] += count;
+
+ status = DEVDRV_USBF_WRITEDMA; /* DMA write */
+ }
+ else
+ {
+ if (RZA_IO_RegRead_16(&USB200.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+ {
+ RZA_IO_RegWrite_16(&USB200.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+ }
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_transfer
+* Description : Starts USB data reception using the pipe specified in the argument.
+* : The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb0_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t usefifo;
+
+ usb0_function_clear_bemp_sts(pipe);
+ usb0_function_clear_brdy_sts(pipe);
+ usb0_function_clear_nrdy_sts(pipe);
+
+ usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ switch (usefifo)
+ {
+ case USB_FUNCTION_D0FIFO_USE:
+ usb0_function_start_receive_trns_d0(pipe, size, data);
+ break;
+
+ case USB_FUNCTION_D1FIFO_USE:
+ usb0_function_start_receive_trns_d1(pipe, size, data);
+ break;
+
+ case USB_FUNCTION_D0FIFO_DMA:
+ usb0_function_start_receive_dma_d0(pipe, size, data);
+ break;
+
+ case USB_FUNCTION_D1FIFO_DMA:
+ usb0_function_start_receive_dma_d1(pipe, size, data);
+ break;
+
+ default:
+ usb0_function_start_receive_trns_c(pipe, size, data);
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_trns_c
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by CPU transfer using CFIFO.
+* : When storing data in the buffer allocated in the pipe specified in the
+* : argument, BRDY interrupt is generated to read data
+* : in the interrupt.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb0_function_set_pid_nak(pipe);
+ g_usb0_function_data_count[pipe] = size;
+ g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb0_function_PipeIgnore[pipe] = 0;
+
+ g_usb0_function_PipeDataSize[pipe] = size;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb0_function_get_mbw(size, (uint32_t)data);
+ usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
+ USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+ usb0_function_set_transaction_counter(pipe, size);
+
+ usb0_function_aclrm(pipe);
+
+ usb0_function_enable_nrdy_int(pipe);
+ usb0_function_enable_brdy_int(pipe);
+
+ usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_trns_d0
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by CPU transfer using D0FIFO.
+* : This function does not read data from the buffer.
+* : When storing data in the buffer allocated in the pipe specified
+* : in the argument, BRDY interrupt is generated to read data in the
+* : interrupt.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb0_function_set_pid_nak(pipe);
+ g_usb0_function_data_count[pipe] = size;
+ g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb0_function_PipeIgnore[pipe] = 0;
+
+ g_usb0_function_PipeDataSize[pipe] = size;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb0_function_get_mbw(size, (uint32_t)data);
+ usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+ usb0_function_set_transaction_counter(pipe, size);
+
+ usb0_function_aclrm(pipe);
+
+ usb0_function_enable_nrdy_int(pipe);
+ usb0_function_enable_brdy_int(pipe);
+
+ usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_trns_d1
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by CPU transfer using D1FIFO.
+* : This function does not read data from the buffer.
+* : When storing data in the buffer allocated in the pipe specified
+* : in the argument, BRDY interrupt is generated to read data.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb0_function_set_pid_nak(pipe);
+ g_usb0_function_data_count[pipe] = size;
+ g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb0_function_PipeIgnore[pipe] = 0;
+
+ g_usb0_function_PipeDataSize[pipe] = size;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb0_function_get_mbw(size, (uint32_t)data);
+ usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+ usb0_function_set_transaction_counter(pipe, size);
+
+ usb0_function_aclrm(pipe);
+
+ usb0_function_enable_nrdy_int(pipe);
+ usb0_function_enable_brdy_int(pipe);
+
+ usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_dma_d0
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by DMA transfer using D0FIFO.
+* : This function does not read data from the buffer.
+* : When storing data in the buffer allocated in the pipe specified
+* : in the argument, delivered read request to DMAC to read data from
+* : the buffer by DMAC.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb0_function_set_pid_nak(pipe);
+ g_usb0_function_data_count[pipe] = size;
+ g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb0_function_PipeIgnore[pipe] = 0;
+
+ g_usb0_function_PipeDataSize[pipe] = 0;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb0_function_get_mbw(size, (uint32_t)data);
+ usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+ usb0_function_set_transaction_counter(pipe, size);
+
+ usb0_function_aclrm(pipe);
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ usb0_function_read_dma(pipe);
+
+ usb0_function_enable_nrdy_int(pipe);
+ usb0_function_enable_brdy_int(pipe);
+ }
+ else
+ {
+ usb0_function_enable_nrdy_int(pipe);
+ usb0_function_enable_brdy_int(pipe);
+ }
+
+ usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_start_receive_dma_d1
+* Description : Read data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by DMA transfer using D0FIFO.
+* : This function does not read data from the buffer.
+* : When storing data in the buffer allocated in the pipe specified
+* : in the argument, delivered read request to DMAC to read data from
+* : the buffer by DMAC.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb0_function_set_pid_nak(pipe);
+ g_usb0_function_data_count[pipe] = size;
+ g_usb0_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb0_function_PipeIgnore[pipe] = 0;
+
+ g_usb0_function_PipeDataSize[pipe] = 0;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb0_function_get_mbw(size, (uint32_t)data);
+ usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+ usb0_function_set_transaction_counter(pipe, size);
+
+ usb0_function_aclrm(pipe);
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ usb0_function_read_dma(pipe);
+
+ usb0_function_enable_nrdy_int(pipe);
+ usb0_function_enable_brdy_int(pipe);
+ }
+ else
+ {
+ usb0_function_enable_nrdy_int(pipe);
+ usb0_function_enable_brdy_int(pipe);
+ }
+
+ usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer
+* Description : Reads data from the buffer allocated in the pipe specified
+* : in the argument.
+* : Uses FIF0 set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer (uint16_t pipe)
+{
+ uint16_t status;
+
+ g_usb0_function_PipeIgnore[pipe] = 0;
+
+ if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+ {
+ status = usb0_function_read_buffer_d0(pipe);
+ }
+ else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+ {
+ status = usb0_function_read_buffer_d1(pipe);
+ }
+ else
+ {
+ status = usb0_function_read_buffer_c(pipe);
+ }
+
+ switch (status)
+ {
+ case USB_FUNCTION_READING: /* Continue of data read */
+ break;
+
+ case USB_FUNCTION_READEND: /* End of data read */
+ case USB_FUNCTION_READSHRT: /* End of data read */
+ usb0_function_disable_brdy_int(pipe);
+ g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ break;
+
+ case USB_FUNCTION_READOVER: /* buffer over */
+ if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+ {
+ USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+ {
+ USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else
+ {
+ USB200.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+
+ case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
+ default:
+ usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer_c
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by CPU transfer using CFIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer_c (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ count = g_usb0_function_data_count[pipe];
+ }
+ else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ USB200.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else
+ {
+ usb0_function_read_c_fifo(pipe, (uint16_t)count);
+ }
+
+ g_usb0_function_data_count[pipe] -= count;
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer_d0
+* Description : Reads data from the buffer allocated in the pipe specified in
+* : the argument.
+* : Reads data by CPU transfer using D0FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer_d0 (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t pipebuf_size;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ count = g_usb0_function_data_count[pipe];
+ }
+ else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ else
+ {
+ pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
+
+ if (count != pipebuf_size)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else
+ {
+ usb0_function_read_d0_fifo(pipe, (uint16_t)count);
+ }
+
+ g_usb0_function_data_count[pipe] -= count;
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_buffer_d1
+* Description : Reads data from the buffer allocated in the pipe specified
+* : in the argument.
+* : Reads data by CPU transfer using D1FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_buffer_d1 (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t pipebuf_size;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ count = g_usb0_function_data_count[pipe];
+ }
+ else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ else
+ {
+ pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
+
+ if (count != pipebuf_size)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb0_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else
+ {
+ usb0_function_read_d1_fifo(pipe, (uint16_t)count);
+ }
+
+ g_usb0_function_data_count[pipe] -= count;
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_dma
+* Description : Reads data from the buffer allocated in the pipe specified
+* : in the argument.
+* : Reads data by DMA transfer using D0FIFO or D1FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_function_read_dma (uint16_t pipe)
+{
+ uint16_t status;
+
+ g_usb0_function_PipeIgnore[pipe] = 0;
+ if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+ {
+ status = usb0_function_read_dma_d0(pipe);
+ }
+ else
+ {
+ status = usb0_function_read_dma_d1(pipe);
+ }
+
+ switch (status)
+ {
+ case USB_FUNCTION_READING: /* Continue of data read */
+ break;
+
+ case USB_FUNCTION_READZERO: /* End of data read */
+ usb0_function_disable_brdy_int(pipe);
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ break;
+
+ case USB_FUNCTION_READEND: /* End of data read */
+ case USB_FUNCTION_READSHRT: /* End of data read */
+ usb0_function_disable_brdy_int(pipe);
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+ }
+ break;
+
+ case USB_FUNCTION_READOVER: /* buffer over */
+ usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ g_usb0_function_PipeDataSize[pipe] -= g_usb0_function_data_count[pipe];
+ }
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+
+ case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
+ default:
+ usb0_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_dma_d0
+* Description : Writes data in the buffer allocated in the pipe specified
+* : in the argument.
+* : Reads data by DMA transfer using D0FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READZERO ; zero data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_read_dma_d0 (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t dfacc = 0;
+ uint16_t pipebuf_size;
+
+ g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ count = g_usb0_function_data_count[pipe];
+ status = USB_FUNCTION_READING;
+ }
+ else
+ {
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ count = g_usb0_function_data_count[pipe];
+ }
+ else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ else
+ {
+ pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
+ if (count != pipebuf_size)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ status = USB_FUNCTION_READZERO; /* Null Packet receive */
+ }
+ else
+ {
+ usb0_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+ /* transaction counter No set */
+ /* FRDY = 1, DTLN = 0 -> BRDY */
+ }
+ }
+ else
+ {
+ dfacc = usb0_function_set_dfacc_d0(mbw, count);
+
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2; /* 32bit transfer */
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1; /* 16bit transfer */
+ }
+ else
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0; /* 8bit transfer */
+ }
+
+ g_usb0_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe; /* not use in read operation */
+ g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] = 0; /* not use in read operation */
+
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo = USB_FUNCTION_D0FIFO_DMA;
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].dir = USB_FUNCTION_FIFO2BUF;
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+ g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes = count;
+
+ if (status == USB_FUNCTION_READING)
+ {
+ g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
+ }
+ else
+ {
+ g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
+ }
+
+ Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+ usb0_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+ RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
+ 1,
+ USB_DnFIFOSEL_DREQE_SHIFT,
+ USB_DnFIFOSEL_DREQE);
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ g_usb0_function_data_count[pipe] -= count;
+ g_usb0_function_data_pointer[pipe] += count;
+ g_usb0_function_PipeDataSize[pipe] += count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_dma_d1
+* Description : Reads data from the buffer allocated in the pipe specified in
+* : the argument.
+* : Reads data by DMA transfer using D1FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READZERO ; zero data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+static uint16_t usb0_function_read_dma_d1 (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t dfacc=0;
+ uint16_t pipebuf_size;
+
+ g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[pipe], (uint32_t)g_usb0_function_data_pointer[pipe]);
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ count = g_usb0_function_data_count[pipe];
+ status = USB_FUNCTION_READING;
+ }
+ else
+ {
+ buffer = usb0_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb0_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ count = g_usb0_function_data_count[pipe];
+ }
+ else if (g_usb0_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ else
+ {
+ pipebuf_size = usb0_function_get_buf_size(pipe); /* Data buffer size */
+ if (count != pipebuf_size)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ status = USB_FUNCTION_READZERO; /* Null Packet receive */
+ }
+ else
+ {
+ usb0_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+ /* transaction counter No set */
+ /* FRDY = 1, DTLN = 0 -> BRDY */
+ }
+ }
+ else
+ {
+ dfacc = usb0_function_set_dfacc_d1(mbw, count);
+
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2; /* 32bit transfer */
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1; /* 16bit transfer */
+ }
+ else
+ {
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0; /* 8bit transfer */
+ }
+
+ g_usb0_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe; /* not use in read operation */
+ g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] = 0; /* not use in read operation */
+
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo = USB_FUNCTION_D1FIFO_DMA;
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].dir = USB_FUNCTION_FIFO2BUF;
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb0_function_data_pointer[pipe];
+ g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes = count;
+
+ if (status == USB_FUNCTION_READING)
+ {
+ g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
+ }
+ else
+ {
+ g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
+ }
+
+ Userdef_USB_usb0_function_start_dma(&g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+ usb0_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+ RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
+ 1,
+ USB_DnFIFOSEL_DREQE_SHIFT,
+ USB_DnFIFOSEL_DREQE);
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ g_usb0_function_data_count[pipe] -= count;
+ g_usb0_function_data_pointer[pipe] += count;
+ g_usb0_function_PipeDataSize[pipe] += count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_change_fifo_port
+* Description : Allocates FIF0 specified by the argument in the pipe assigned
+* : by the argument. After allocating FIF0, waits in the software
+* : till the corresponding pipe becomes ready.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t fifosel ; Select FIFO
+* : uint16_t isel ; FIFO Access Direction
+* : uint16_t mbw ; FIFO Port Access Bit Width
+* Return Value : DEVDRV_USBF_FIFOERROR ; Error
+* : Others ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
+*******************************************************************************/
+uint16_t usb0_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+ uint16_t buffer;
+ uint32_t loop;
+ volatile uint32_t loop2;
+
+ usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ switch (fifosel)
+ {
+ case USB_FUNCTION_CUSE:
+ buffer = USB200.CFIFOCTR;
+ break;
+
+ case USB_FUNCTION_D0USE:
+ case USB_FUNCTION_D0DMA:
+ buffer = USB200.D0FIFOCTR;
+ break;
+
+ case USB_FUNCTION_D1USE:
+ case USB_FUNCTION_D1DMA:
+ buffer = USB200.D1FIFOCTR;
+ break;
+
+ default:
+ buffer = 0;
+ break;
+ }
+
+ if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
+ {
+ return buffer;
+ }
+
+ loop2 = 25;
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+
+ return DEVDRV_USBF_FIFOERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_curpipe
+* Description : Allocates FIF0 specified by the argument in the pipe assigned
+* : by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t fifosel ; Select FIFO
+* : uint16_t isel ; FIFO Access Direction
+* : uint16_t mbw ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+ uint16_t buffer;
+ uint32_t loop;
+ volatile uint32_t loop2;
+
+ g_usb0_function_mbw[pipe] = mbw;
+
+ switch (fifosel)
+ {
+ case USB_FUNCTION_CUSE:
+ buffer = USB200.CFIFOSEL;
+ buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+ buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+ USB200.CFIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+ (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(isel | pipe | mbw);
+ USB200.CFIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+ (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ case USB_FUNCTION_D0DMA:
+ case USB_FUNCTION_D0USE:
+ buffer = USB200.D0FIFOSEL;
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+ USB200.D0FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+ (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(pipe | mbw);
+ USB200.D0FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+ (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ case USB_FUNCTION_D1DMA:
+ case USB_FUNCTION_D1USE:
+ buffer = USB200.D1FIFOSEL;
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+ USB200.D1FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+ (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(pipe | mbw);
+ USB200.D1FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+ (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ /* Cautions !!!
+ * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+ * For details, please look at the data sheet. */
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_curpipe2
+* Description : Allocates FIF0 specified by the argument in the pipe assigned
+* : by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t fifosel ; Select FIFO
+* : uint16_t isel ; FIFO Access Direction
+* : uint16_t mbw ; FIFO Port Access Bit Width
+* : uint16_t dfacc ; DFACC Access mode
+* Return Value : none
+*******************************************************************************/
+void usb0_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
+{
+ uint16_t buffer;
+ uint32_t loop;
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ uint32_t dummy;
+#endif
+ volatile uint32_t loop2;
+
+ g_usb0_function_mbw[pipe] = mbw;
+
+ switch (fifosel)
+ {
+ case USB_FUNCTION_CUSE:
+ buffer = USB200.CFIFOSEL;
+ buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+ buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+ USB200.CFIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+ (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+ {
+ break;
+ }
+
+ loop2 = 100;
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(isel | pipe | mbw);
+ USB200.CFIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+ (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ case USB_FUNCTION_D0DMA:
+ case USB_FUNCTION_D0USE:
+ buffer = USB200.D0FIFOSEL;
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+ if (dfacc != 0)
+ {
+ buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+ }
+#else
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+ USB200.D0FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (dfacc != 0)
+ {
+ dummy = USB200.D0FIFO.UINT32;
+ }
+#endif
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(pipe | mbw);
+ USB200.D0FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ case USB_FUNCTION_D1DMA:
+ case USB_FUNCTION_D1USE:
+ buffer = USB200.D1FIFOSEL;
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+ if (dfacc != 0)
+ {
+ buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+ }
+#else
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+ USB200.D1FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (dfacc != 0)
+ {
+ dummy = USB200.D1FIFO.UINT32;
+ loop = dummy; // avoid warning.
+ }
+#endif
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(pipe | mbw);
+ USB200.D1FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB200.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ /* Cautions !!!
+ * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+ * For details, please look at the data sheet. */
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_c_fifo
+* Description : Writes data in CFIFO.
+* : Writes data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating CFIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb0_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_write_c_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ USB200.CFIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
+ g_usb0_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)(count / 2); even; --even)
+ {
+ USB200.CFIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
+ g_usb0_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)(count / 4); even; --even)
+ {
+ USB200.CFIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
+ g_usb0_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_c_fifo
+* Description : Reads data from CFIFO.
+* : Reads data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating CFIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb0_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_read_c_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ *g_usb0_function_data_pointer[pipe] = USB200.CFIFO.UINT8[HH];
+ g_usb0_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)((count + 1) / 2); even; --even)
+ {
+ *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT16[H];
+ g_usb0_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)((count + 3) / 4); even; --even)
+ {
+ *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.CFIFO.UINT32;
+ g_usb0_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_d0_fifo
+* Description : Writes data in D0FIFO.
+* : Writes data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating CFIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb0_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_write_d0_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ USB200.D0FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
+ g_usb0_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)(count / 2); even; --even)
+ {
+ USB200.D0FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
+ g_usb0_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)(count / 4); even; --even)
+ {
+ USB200.D0FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
+ g_usb0_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_d0_fifo
+* Description : Reads data from D0FIFO.
+* : Reads data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating DOFIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb0_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_read_d0_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ *g_usb0_function_data_pointer[pipe] = USB200.D0FIFO.UINT8[HH];
+ g_usb0_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)((count + 1) / 2); even; --even)
+ {
+ *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT16[H];
+ g_usb0_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)((count + 3) / 4); even; --even)
+ {
+ *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D0FIFO.UINT32;
+ g_usb0_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_write_d1_fifo
+* Description : Writes data in D1FIFO.
+* : Writes data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating D1FIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb0_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_write_d1_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ USB200.D1FIFO.UINT8[HH] = *g_usb0_function_data_pointer[pipe];
+ g_usb0_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)(count / 2); even; --even)
+ {
+ USB200.D1FIFO.UINT16[H] = *((uint16_t *)g_usb0_function_data_pointer[pipe]);
+ g_usb0_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)(count / 4); even; --even)
+ {
+ USB200.D1FIFO.UINT32 = *((uint32_t *)g_usb0_function_data_pointer[pipe]);
+ g_usb0_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_read_d1_fifo
+* Description : Reads data from D1FIFO.
+* : Reads data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating D1FIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb0_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_read_d1_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ *g_usb0_function_data_pointer[pipe] = USB200.D1FIFO.UINT8[HH];
+ g_usb0_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb0_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)((count + 1) / 2); even; --even)
+ {
+ *((uint16_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT16[H];
+ g_usb0_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)((count + 3) / 4); even; --even)
+ {
+ *((uint32_t *)g_usb0_function_data_pointer[pipe]) = USB200.D1FIFO.UINT32;
+ g_usb0_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_com_get_dmasize
+* Description : Calculates access width of DMA transfer by the argument to
+* : return as the Return Value.
+* Arguments : uint32_t trncount : transfer byte
+* : uint32_t dtptr : transfer data pointer
+* Return Value : DMA transfer size : 0 8bit
+* : : 1 16bit
+* : : 2 32bit
+*******************************************************************************/
+static uint32_t usb0_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
+{
+ uint32_t size;
+
+ if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
+ {
+ /* When transfer byte count is odd */
+ /* or transfer data area is 8-bit alignment */
+ size = 0; /* 8bit */
+ }
+ else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
+ {
+ /* When the transfer byte count is multiples of 2 */
+ /* or the transfer data area is 16-bit alignment */
+ size = 1; /* 16bit */
+ }
+ else
+ {
+ /* When the transfer byte count is multiples of 4 */
+ /* or the transfer data area is 32-bit alignment */
+ size = 2; /* 32bit */
+ }
+
+ return size;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_get_mbw
+* Description : Calculates access width of DMA to return the value set in MBW.
+* Arguments : uint32_t trncount : transfer byte
+* : uint32_t dtptr : transfer data pointer
+* Return Value : FIFO transfer size : USB_FUNCTION_BITMBW_8 8bit
+* : : USB_FUNCTION_BITMBW_16 16bit
+* : : USB_FUNCTION_BITMBW_32 32bit
+*******************************************************************************/
+uint16_t usb0_function_get_mbw (uint32_t trncount, uint32_t dtptr)
+{
+ uint32_t size;
+ uint16_t mbw;
+
+ size = usb0_function_com_get_dmasize(trncount, dtptr);
+
+ if (size == 0)
+ {
+ /* 8bit */
+ mbw = USB_FUNCTION_BITMBW_8;
+ }
+ else if (size == 1)
+ {
+ /* 16bit */
+ mbw = USB_FUNCTION_BITMBW_16;
+ }
+ else
+ {
+ /* 32bit */
+ mbw = USB_FUNCTION_BITMBW_32;
+ }
+
+ return mbw;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_transaction_counter
+* Description : Sets transaction counter by the argument(PIPEnTRN).
+* : Clears transaction before setting to enable transaction counter setting.
+* Arguments : uint16_t pipe ; Pipe number
+* : uint32_t bsize : Data transfer size
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
+{
+ uint16_t mxps;
+ uint16_t cnt;
+
+ if (bsize == 0)
+ {
+ return;
+ }
+
+ mxps = usb0_function_get_mxps(pipe); /* Max Packet Size */
+
+ if ((bsize % mxps) == 0)
+ {
+ cnt = (uint16_t)(bsize / mxps);
+ }
+ else
+ {
+ cnt = (uint16_t)((bsize / mxps) + 1);
+ }
+
+ switch (pipe)
+ {
+ case USB_FUNCTION_PIPE1:
+ RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPE1TRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE2:
+ RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPE2TRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE3:
+ RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPE3TRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE4:
+ RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPE4TRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE5:
+ RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPE5TRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE9:
+ RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPE9TRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEA:
+ RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPEATRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEB:
+ RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPEBTRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEC:
+ RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPECTRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPED:
+ RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPEDTRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEE:
+ RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPEETRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEF:
+ RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB200.PIPEFTRN = cnt;
+ RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_transaction_counter
+* Description : Clears the transaction counter by the argument.
+* : After executing this function, the transaction counter is invalid.
+* Arguments : uint16_t pipe ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_transaction_counter (uint16_t pipe)
+{
+ switch (pipe)
+ {
+ case USB_FUNCTION_PIPE1:
+ RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPE1TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE2:
+ RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPE2TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE3:
+ RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPE3TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE4:
+ RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPE4TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE5:
+ RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPE5TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE9:
+ RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPE9TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEA:
+ RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPEATRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEB:
+ RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPEBTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEC:
+ RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPECTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPED:
+ RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPEDTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEE:
+ RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPEETRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEF:
+ RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB200.PIPEFTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_stop_transfer
+* Description : Stops the USB transfer in the pipe specified by the argument.
+* : After stopping the USB transfer, clears the buffer allocated in
+* : the pipe.
+* : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
+* : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
+* : in the corresponding pipe becomes invalid. Sequence bit is also
+* : cleared.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb0_function_stop_transfer (uint16_t pipe)
+{
+ uint16_t usefifo;
+ uint32_t remain;
+ uint16_t fifo;
+
+ usb0_function_set_pid_nak(pipe);
+
+ usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+ switch (usefifo)
+ {
+ case USB_FUNCTION_D0FIFO_USE:
+ usb0_function_clear_transaction_counter(pipe);
+ USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_D0USE;
+ break;
+
+ case USB_FUNCTION_D1FIFO_USE:
+ usb0_function_clear_transaction_counter(pipe);
+ USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_D1USE;
+ break;
+
+ case USB_FUNCTION_D0FIFO_DMA:
+ remain = Userdef_USB_usb0_function_stop_dma0();
+ usb0_function_dma_stop_d0(pipe, remain);
+ usb0_function_clear_transaction_counter(pipe);
+ USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_D0DMA;
+ break;
+
+ case USB_FUNCTION_D1FIFO_DMA:
+ remain = Userdef_USB_usb0_function_stop_dma1();
+ usb0_function_dma_stop_d1(pipe, remain);
+ usb0_function_clear_transaction_counter(pipe);
+ USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_D1DMA;
+ break;
+
+ default:
+ usb0_function_clear_transaction_counter(pipe);
+ USB200.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_CUSE;
+ break;
+ }
+
+ usb0_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
+
+ /* Interrupt of pipe set is disabled */
+ usb0_function_disable_brdy_int(pipe);
+ usb0_function_disable_nrdy_int(pipe);
+ usb0_function_disable_bemp_int(pipe);
+
+ usb0_function_aclrm(pipe);
+ usb0_function_set_csclr(pipe);
+
+ if ( g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
+ {
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+ }
+
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_dfacc_d0
+* Description : Sets the DFACC setting value in D0FIFO using the transfer size.
+* Arguments : uint16_t mbw ; MBW
+* : uint16_t count ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb0_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
+{
+ uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+#else
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ if ((count % 32) == 0)
+ {
+ /* 32byte transfer */
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 2,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 2;
+ }
+ else if ((count % 16) == 0)
+ {
+ /* 16byte transfer */
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 1,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 1;
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+#endif
+ return dfacc;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_set_dfacc_d1
+* Description : Set the DFACC setting value in D1FIFO using the transfer size.
+* Arguments : uint16_t mbw ; MBW
+* : uint16_t count ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb0_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
+{
+ uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+#else
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ if ((count % 32) == 0)
+ {
+ /* 32byte transfer */
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 2,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 2;
+ }
+ else if ((count % 16) == 0)
+ {
+ /* 16byte transfer */
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 1,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 1;
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB200.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+#endif
+
+ return dfacc;
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_dma.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,346 @@
+/*******************************************************************************
+* 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_dma.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
+*******************************************************************************/
+static void usb0_function_dmaint(uint16_t fifo);
+static void usb0_function_dmaint_buf2fifo(uint16_t pipe);
+static void usb0_function_dmaint_fifo2buf(uint16_t pipe);
+
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_stop_d0
+* Description : D0FIFO DMA stop
+* Arguments : uint16_t pipe : pipe number
+* : uint32_t remain : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
+{
+ uint16_t dtln;
+ uint16_t dfacc;
+ uint16_t buffer;
+ uint16_t sds_b = 1;
+
+ dfacc = RZA_IO_RegRead_16(&USB200.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+ if (dfacc == 2)
+ {
+ sds_b = 32;
+ }
+ else if (dfacc == 1)
+ {
+ sds_b = 16;
+ }
+ else
+ {
+ if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
+ {
+ sds_b = 4;
+ }
+ else if (g_usb0_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
+ {
+ sds_b = 2;
+ }
+ else
+ {
+ sds_b = 1;
+ }
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+ {
+ buffer = USB200.D0FIFOCTR;
+ dtln = (buffer & USB_FUNCTION_BITDTLN);
+
+ if ((dtln % sds_b) != 0)
+ {
+ remain += (sds_b - (dtln % sds_b));
+ }
+ g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
+ g_usb0_function_data_count[pipe] = remain;
+ }
+ }
+
+ RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_stop_d1
+* Description : D1FIFO DMA stop
+* Arguments : uint16_t pipe : pipe number
+* : uint32_t remain : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
+{
+ uint16_t dtln;
+ uint16_t dfacc;
+ uint16_t buffer;
+ uint16_t sds_b = 1;
+
+ dfacc = RZA_IO_RegRead_16(&USB200.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+ if (dfacc == 2)
+ {
+ sds_b = 32;
+ }
+ else if (dfacc == 1)
+ {
+ sds_b = 16;
+ }
+ else
+ {
+ if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
+ {
+ sds_b = 4;
+ }
+ else if (g_usb0_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
+ {
+ sds_b = 2;
+ }
+ else
+ {
+ sds_b = 1;
+ }
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+ {
+ buffer = USB200.D1FIFOCTR;
+ dtln = (buffer & USB_FUNCTION_BITDTLN);
+
+ if ((dtln % sds_b) != 0)
+ {
+ remain += (sds_b - (dtln % sds_b));
+ }
+ g_usb0_function_PipeDataSize[pipe] = (g_usb0_function_data_count[pipe] - remain);
+ g_usb0_function_data_count[pipe] = remain;
+ }
+ }
+
+ RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_interrupt_d0fifo
+* Description : This function is DMA interrupt handler entry.
+* : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
+* : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
+* : specified by dma->fifo.
+* : Register this function as DMA complete interrupt.
+* Arguments : uint32_t int_sense ; Interrupts detection mode
+* : ; INTC_LEVEL_SENSITIVE : Level sense
+* : ; INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_interrupt_d0fifo (uint32_t int_sense)
+{
+ usb0_function_dmaint(USB_FUNCTION_D0FIFO);
+ g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dma_interrupt_d1fifo
+* Description : This function is DMA interrupt handler entry.
+* : Execute usb0_function_dmaint() after disabling DMA interrupt in this function.
+* : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
+* : specified by dma->fifo.
+* : Register this function as DMA complete interrupt.
+* Arguments : uint32_t int_sense ; Interrupts detection mode
+* : ; INTC_LEVEL_SENSITIVE : Level sense
+* : ; INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb0_function_dma_interrupt_d1fifo (uint32_t int_sense)
+{
+ usb0_function_dmaint(USB_FUNCTION_D1FIFO);
+ g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dmaint
+* Description : This function is DMA transfer end interrupt
+* Arguments : uint16_t fifo ; fifo number
+* : ; USB_FUNCTION_D0FIFO
+* : ; USB_FUNCTION_D1FIFO
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_dmaint (uint16_t fifo)
+{
+ uint16_t pipe;
+
+ pipe = g_usb0_function_DmaPipe[fifo];
+
+ if (g_usb0_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
+ {
+ usb0_function_dmaint_buf2fifo(pipe);
+ }
+ else
+ {
+ usb0_function_dmaint_fifo2buf(pipe);
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dmaint_fifo2buf
+* Description : Executes read completion from FIFO by DMAC.
+* Arguments : uint16_t pipe : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_dmaint_fifo2buf (uint16_t pipe)
+{
+ uint32_t remain;
+ uint16_t useport;
+
+ if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+ {
+ useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ if (useport == USB_FUNCTION_D0FIFO_DMA)
+ {
+ remain = Userdef_USB_usb0_function_stop_dma0();
+ usb0_function_dma_stop_d0(pipe, remain);
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
+ {
+ USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ else
+ {
+ usb0_function_enable_brdy_int(pipe);
+ }
+ }
+ }
+ else
+ {
+ remain = Userdef_USB_usb0_function_stop_dma1();
+ usb0_function_dma_stop_d1(pipe, remain);
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
+ {
+ USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ else
+ {
+ usb0_function_enable_brdy_int(pipe);
+ }
+ }
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_dmaint_buf2fifo
+* Description : Executes write completion in FIFO by DMAC.
+* Arguments : uint16_t pipe : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_dmaint_buf2fifo (uint16_t pipe)
+{
+ uint32_t remain;
+ uint16_t useport;
+
+ useport = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ if (useport == USB_FUNCTION_D0FIFO_DMA)
+ {
+ remain = Userdef_USB_usb0_function_stop_dma0();
+ usb0_function_dma_stop_d0(pipe, remain);
+
+ if (g_usb0_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
+ {
+ RZA_IO_RegWrite_16(&USB200.D0FIFOCTR,
+ 1,
+ USB_DnFIFOCTR_BVAL_SHIFT,
+ USB_DnFIFOCTR_BVAL);
+ }
+ }
+ else
+ {
+ remain = Userdef_USB_usb0_function_stop_dma1();
+ usb0_function_dma_stop_d1(pipe, remain);
+
+ if (g_usb0_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
+ {
+ RZA_IO_RegWrite_16(&USB200.D1FIFOCTR,
+ 1,
+ USB_DnFIFOCTR_BVAL_SHIFT,
+ USB_DnFIFOCTR_BVAL);
+ }
+ }
+
+ usb0_function_enable_bemp_int(pipe);
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/common/usb0_function_intrn.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,249 @@
+/*******************************************************************************
+* 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_intrn.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_brdy_int
+* Description : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
+* : According to the pipe that interrupt is generated in,
+* : reads/writes buffer allocated in the pipe.
+* : This function is executed in the BRDY interrupt handler.
+* : This function clears BRDY interrupt status and BEMP interrupt
+* : status.
+* Arguments : uint16_t Status ; BRDYSTS Register Value
+* : uint16_t Int_enbl ; BRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_brdy_int (uint16_t status, uint16_t int_enb)
+{
+ uint32_t int_sense = 0;
+ uint16_t pipe;
+ uint16_t pipebit;
+
+ for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+ {
+ pipebit = g_usb0_function_bit_set[pipe];
+
+ if ((status & pipebit) && (int_enb & pipebit))
+ {
+ USB200.BRDYSTS = (uint16_t)~pipebit;
+ USB200.BEMPSTS = (uint16_t)~pipebit;
+ if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+ {
+ if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
+ {
+ usb0_function_dma_interrupt_d0fifo(int_sense);
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ usb0_function_read_dma(pipe);
+ usb0_function_disable_brdy_int(pipe);
+ }
+ else
+ {
+ USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ }
+ else if ((g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
+ {
+ if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
+ {
+ usb0_function_dma_interrupt_d1fifo(int_sense);
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ usb0_function_read_dma(pipe);
+ usb0_function_disable_brdy_int(pipe);
+ }
+ else
+ {
+ USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ }
+ else
+ {
+ if (RZA_IO_RegRead_16(&g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
+ {
+ usb0_function_read_buffer(pipe);
+ }
+ else
+ {
+ usb0_function_write_buffer(pipe);
+ }
+ }
+ }
+ }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_nrdy_int
+* Description : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
+* : Checks NRDY interrupt cause by PID. When the cause if STALL,
+* : regards the pipe state as STALL and ends the processing.
+* : Then the cause is not STALL, increments the error count to
+* : communicate again. When the error count is 3, determines
+* : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
+* : This function is executed in the NRDY interrupt handler.
+* : This function clears NRDY interrupt status.
+* Arguments : uint16_t status ; NRDYSTS Register Value
+* : uint16_t int_enb ; NRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb0_function_nrdy_int (uint16_t status, uint16_t int_enb)
+{
+ uint16_t pid;
+ uint16_t pipe;
+ uint16_t bitcheck;
+
+ bitcheck = (uint16_t)(status & int_enb);
+
+ USB200.NRDYSTS = (uint16_t)~status;
+
+ for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+ {
+ if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
+ {
+ if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
+ {
+ if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
+ {
+ pid = usb0_function_get_pid(pipe);
+ if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+ {
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+ }
+ else
+ {
+ g_usb0_function_PipeIgnore[pipe]++;
+ if (g_usb0_function_PipeIgnore[pipe] == 3)
+ {
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+ }
+ else
+ {
+ usb0_function_set_pid_buf(pipe);
+ }
+ }
+ }
+ }
+ else
+ {
+ /* USB Function */
+ }
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_bemp_int
+* Description : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
+* Arguments : uint16_t status ; BEMPSTS Register Value
+* : uint16_t int_enb ; BEMPENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb0_function_bemp_int (uint16_t status, uint16_t int_enb)
+{
+ uint16_t pid;
+ uint16_t pipe;
+ uint16_t bitcheck;
+ uint16_t inbuf;
+
+ bitcheck = (uint16_t)(status & int_enb);
+
+ USB200.BEMPSTS = (uint16_t)~status;
+
+ for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+ {
+ if ((bitcheck&g_usb0_function_bit_set[pipe]) == g_usb0_function_bit_set[pipe])
+ {
+ pid = usb0_function_get_pid(pipe);
+
+ if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+ {
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+ }
+ else
+ {
+ inbuf = usb0_function_get_inbuf(pipe);
+
+ if (inbuf == 0)
+ {
+ usb0_function_disable_bemp_int(pipe);
+ usb0_function_set_pid_nak(pipe);
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ }
+ }
+ }
+}
+
+/* End of File */
--- /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 */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_api.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,441 @@
+/*******************************************************************************
+* 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_api.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"
+#include "dev_drv.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_api_function_init
+* Description : Initializes the USB module in the USB function mode.
+* Arguments : uint8_t int_level ; interruput level
+* : uint16_t mode : Speed modes
+* : : USB_FUCNTION_HIGH_SPEED: High-speed device
+* : : USB_FUCNTION_FULL_SPEED: Full-speed device
+* : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+* : ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
+{
+ volatile uint8_t dummy_buf;
+
+ CPG.STBCR7 &= 0xfd; /* The clock of USB0 modules is permitted */
+ dummy_buf = CPG.STBCR7; /* (Dummy read) */
+
+ usb0_function_setting_interrupt(int_level);
+
+ usb0_function_reset_module(clockmode); /* reset USB module with setting tranciever */
+ /* and HSE=1 */
+
+ usb0_function_init_status(); /* clear variables */
+
+ usb0_function_InitModule(mode); /* select USB Function and Interrupt Enable */
+ /* Detect USB Device to attach or detach */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_api_function_IsConfigured
+* Description : Checks if the USB device is configured to return the result as
+* : the return value.
+* Arguments : none
+* Return Value : DEVDRV_USBF_YES : Configured & Configured Suspend
+* : DEVDRV_USBF_NO : not Configured
+*******************************************************************************/
+uint16_t usb0_api_function_IsConfigured (void)
+{
+ uint16_t dvst;
+
+ dvst = usb0_function_GetDeviceState();
+
+ if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
+ (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
+ {
+ return DEVDRV_USBF_YES;
+ }
+
+ return DEVDRV_USBF_NO;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_GetDeviceState
+* Description : Returns the state of USB device.
+* Arguments : none
+* Return Value : Device States
+*******************************************************************************/
+uint16_t usb0_function_GetDeviceState (void)
+{
+ uint16_t dvsq;
+ uint16_t dvst;
+
+ dvsq = USB200.INTSTS0;
+ switch(dvsq & USB_FUNCTION_BITDVSQ)
+ {
+ case USB_FUNCTION_DS_POWR: /* Power state *//* power-on */
+ dvst = USB_FUNCTION_DVST_POWERED;
+ break;
+
+ case USB_FUNCTION_DS_DFLT: /* Default state *//* bus-reset */
+ dvst = USB_FUNCTION_DVST_DEFAULT;
+ break;
+
+ case USB_FUNCTION_DS_ADDS: /* Address state */
+ dvst = USB_FUNCTION_DVST_ADDRESS;
+ break;
+
+ case USB_FUNCTION_DS_CNFG: /* Configured state */
+ dvst = USB_FUNCTION_DVST_CONFIGURED;
+ break;
+
+ case USB_FUNCTION_DS_SPD_CNFG: /* Configured Suspend state */
+ dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
+ break;
+
+ case USB_FUNCTION_DS_SPD_POWR: /* Power Suspend state */
+ case USB_FUNCTION_DS_SPD_DFLT: /* Default Suspend state */
+ case USB_FUNCTION_DS_SPD_ADDR: /* Address Suspend state */
+ dvst = USB_FUNCTION_DVST_SUSPEND;
+ break;
+
+ default: /* error */
+ dvst = USB_FUNCTION_DVST_SUSPEND;
+ break;
+ }
+
+ return dvst;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_start_receive_transfer
+* Description : Starts USB data reception using the pipe specified in the argument.
+* : The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data data Address
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ usb0_function_start_receive_transfer(pipe, size, data);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_start_send_transfer
+* Description : Starts the USB data communication using pipe specified by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data data Address
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb0_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t status;
+
+ status = usb0_function_start_send_transfer(pipe, size, data);
+
+ return status;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_check_pipe_status
+* Description : Starts USB data reception using the pipe specified in the argument.
+* : The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t *size ; Data Size
+* Return Value : Pipe Status
+*******************************************************************************/
+uint16_t usb0_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
+{
+ if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
+ {
+ *size = g_usb0_function_PipeDataSize[pipe];
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+ return DEVDRV_USBF_PIPE_DONE;
+ }
+ else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
+ {
+ *size = 0;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+ return DEVDRV_USBF_PIPE_NORES;
+ }
+ else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
+ {
+ *size = 0;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+ return DEVDRV_USBF_PIPE_STALL;
+ }
+ else if (g_usb0_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
+ {
+ *size = 0;
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+ return DEVDRV_USBF_FIFOERROR;
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+
+ return g_usb0_function_pipe_status[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_clear_pipe_status
+* Description : Starts USB data reception using the pipe specified in the argument.
+* : The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : Pipe Status
+*******************************************************************************/
+void usb0_api_function_clear_pipe_status (uint16_t pipe)
+{
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+ g_usb0_function_PipeDataSize[pipe] = 0;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_set_pid_buf (uint16_t pipe)
+{
+ usb0_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_set_pid_nak (uint16_t pipe)
+{
+ usb0_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_set_pid_stall (uint16_t pipe)
+{
+ usb0_function_set_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_clear_pid_stall (uint16_t pipe)
+{
+ usb0_function_clear_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_get_pid
+* Description : Returns the pipe state specified by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb0_api_function_get_pid (uint16_t pipe)
+{
+ uint16_t pid;
+
+ pid = usb0_function_get_pid(pipe);
+
+ return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_check_stall
+* Description :
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+int32_t usb0_api_function_check_stall (uint16_t pipe)
+{
+ uint16_t pid;
+
+ pid = usb0_function_get_pid(pipe);
+
+ if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
+ {
+ return DEVDRV_USBF_STALL;
+ }
+
+ return DEVDRV_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_set_sqclr (uint16_t pipe)
+{
+ usb0_function_set_sqclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_set_sqset (uint16_t pipe)
+{
+ usb0_function_set_sqset(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_set_csclr (uint16_t pipe)
+{
+ usb0_function_set_csclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_set_curpipe
+* Description : Allocates FIF0 specifed by the argument in the pipe assigned
+* : by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t fifosel ; Select FIFO
+* : uint16_t isel ; FIFO Access Direction
+* : uint16_t mbw ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+ usb0_function_set_curpipe(pipe, fifosel, isel, mbw);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_clear_brdy_sts (uint16_t pipe)
+{
+ usb0_function_clear_brdy_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_clear_bemp_sts (uint16_t pipe)
+{
+ usb0_function_clear_bemp_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_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_api_function_clear_nrdy_sts (uint16_t pipe)
+{
+ usb0_function_clear_nrdy_sts(pipe);
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_controlrw.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* 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_controlrw.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_api_function_CtrlReadStart
+* Description : Executes the USB control read transfer.
+* : USB host controller <- USB device
+* Arguments : uint16_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND ; End of data write
+* : DEVDRV_USBF_WRITESHRT ; End of short data write
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_FIFOERROR ; FIFO access error
+*******************************************************************************/
+uint16_t usb0_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
+{
+ uint16_t status;
+ uint16_t mbw;
+
+ usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+ g_usb0_function_data_count[USB_FUNCTION_PIPE0] = size;
+ g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
+ (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
+ usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+ USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+ status = usb0_function_write_buffer_c(USB_FUNCTION_PIPE0);
+
+ /* Peripheral Control sequence */
+ switch (status)
+ {
+ case DEVDRV_USBF_WRITESHRT: /* End of data write */
+ case DEVDRV_USBF_WRITEEND: /* End of data write (not null) */
+ case DEVDRV_USBF_WRITING: /* Continue of data write */
+ usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0); /* Enable Empty Interrupt */
+ usb0_function_set_pid_buf(USB_FUNCTION_PIPE0); /* Set BUF */
+ break;
+
+ case DEVDRV_USBF_FIFOERROR: /* FIFO access error */
+ break;
+
+ default:
+ break;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb0_api_function_CtrlWriteStart
+* Description : Executes the USB control write transfer.
+* : USB host controller -> USB device
+* Arguments : uint16_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb0_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb0_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+ g_usb0_function_data_count[USB_FUNCTION_PIPE0] = size;
+ g_usb0_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+ mbw = usb0_function_get_mbw(g_usb0_function_data_count[USB_FUNCTION_PIPE0],
+ (uint32_t)g_usb0_function_data_pointer[USB_FUNCTION_PIPE0]);
+ usb0_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+ USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+ usb0_function_enable_brdy_int(USB_FUNCTION_PIPE0);
+ usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_global.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,144 @@
+/*******************************************************************************
+* 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_global.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
+*******************************************************************************/
+const uint16_t g_usb0_function_bit_set[16] =
+{
+ 0x0001, 0x0002, 0x0004, 0x0008,
+ 0x0010, 0x0020, 0x0040, 0x0080,
+ 0x0100, 0x0200, 0x0400, 0x0800,
+ 0x1000, 0x2000, 0x4000, 0x8000
+};
+
+uint32_t g_usb0_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint8_t * g_usb0_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+uint16_t g_usb0_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint32_t g_usb0_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+USB_FUNCTION_DMA_t g_usb0_function_DmaInfo[2];
+uint16_t g_usb0_function_DmaPipe[2];
+uint16_t g_usb0_function_DmaBval[2];
+uint16_t g_usb0_function_DmaStatus[2];
+
+uint16_t g_usb0_function_CtrZeroLengthFlag;
+
+//uint16_t g_usb0_function_ConfigNum;
+//uint16_t g_usb0_function_Alternate[USB_FUNCTION_ALT_NO];
+//uint16_t g_usb0_function_RemoteWakeupFlag;
+uint16_t g_usb0_function_TestModeFlag;
+uint16_t g_usb0_function_TestModeSelectors;
+
+//uint16_t g_usb0_function_ReqType;
+//uint16_t g_usb0_function_ReqTypeType;
+//uint16_t g_usb0_function_ReqTypeRecip;
+//uint16_t g_usb0_function_ReqRequest;
+//uint16_t g_usb0_function_ReqValue;
+//uint16_t g_usb0_function_ReqIndex;
+//uint16_t g_usb0_function_ReqLength;
+
+//uint16_t g_usb0_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+uint16_t g_usb0_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb0_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+* Function Name: usb0_function_init_status
+* Description : Initialization USB Sample Driver Variable.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_init_status (void)
+{
+ uint16_t pipe;
+
+ //g_usb0_function_ConfigNum = 0;
+ //g_usb0_function_RemoteWakeupFlag = DEVDRV_USBF_OFF;
+ g_usb0_function_TestModeFlag = DEVDRV_USBF_OFF;
+ g_usb0_function_CtrZeroLengthFlag = 0;
+
+#if 0
+ usb0_function_clear_alt();
+#endif
+
+ for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+ {
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+ g_usb0_function_PipeDataSize[pipe] = 0;
+ g_usb0_function_data_count[pipe] = 0;
+
+ /* pipe configuration in usb0_function_ResetEP() */
+ g_usb0_function_pipecfg[pipe] = 0;
+ g_usb0_function_pipebuf[pipe] = 0;
+ g_usb0_function_pipemaxp[pipe] = 0;
+ g_usb0_function_pipeperi[pipe] = 0;
+ }
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sig.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,330 @@
+/*******************************************************************************
+* 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_sig.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)
+*******************************************************************************/
+static void usb0_function_EnableINTModule(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_InitModule
+* Description : Initializes the USB module in the USB function mode.
+* Arguments : uint16_t mode ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
+* : ; other ; Full-speed Mode
+* Return Value : none
+*******************************************************************************/
+void usb0_function_InitModule (uint16_t mode)
+{
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 0,
+ USB_SYSCFG_DCFM_SHIFT,
+ USB_SYSCFG_DCFM); /* USB function */
+
+ /* USB module operation enabled */
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 1,
+ USB_SYSCFG_USBE_SHIFT,
+ USB_SYSCFG_USBE);
+
+ if (mode == USB_FUNCTION_HIGH_SPEED)
+ {
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 1,
+ USB_SYSCFG_HSE_SHIFT,
+ USB_SYSCFG_HSE); /* Hi-Speed Mode */
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 0,
+ USB_SYSCFG_HSE_SHIFT,
+ USB_SYSCFG_HSE);
+ }
+
+ /* for power-on */
+ if (usb0_function_CheckVBUStaus() == DEVDRV_USBF_ON)
+ {
+ usb0_function_EnableINTModule(); /* Interrupt Enable */
+ usb0_function_USB_FUNCTION_Attach(); /* pull-up D+ and open D- */
+ }
+ else
+ {
+ usb0_function_USB_FUNCTION_Detach(); /* USB Detach */
+ /* with Interrupt Enable */
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_CheckVBUStaus
+* Description : Checks the USB-VBUS state to returns the connection state to
+* : the USB host.
+* Arguments : none
+* Return Value : DEVDRV_USBF_ON : VBUS ON
+* : DEVDRV_USBF_OFF : VBUS OFF
+*******************************************************************************/
+uint16_t usb0_function_CheckVBUStaus (void)
+{
+ uint16_t buf1;
+ uint16_t buf2;
+ uint16_t buf3;
+
+ /* monitor VBUS pins */
+ do
+ {
+ buf1 = RZA_IO_RegRead_16(&USB200.INTSTS0,
+ USB_INTSTS0_VBSTS_SHIFT,
+ USB_INTSTS0_VBSTS);
+ Userdef_USB_usb0_function_delay_10us(1);
+ buf2 = RZA_IO_RegRead_16(&USB200.INTSTS0,
+ USB_INTSTS0_VBSTS_SHIFT,
+ USB_INTSTS0_VBSTS);
+ Userdef_USB_usb0_function_delay_10us(1);
+ buf3 = RZA_IO_RegRead_16(&USB200.INTSTS0,
+ USB_INTSTS0_VBSTS_SHIFT,
+ USB_INTSTS0_VBSTS);
+ } while ((buf1 != buf2) || (buf2 != buf3));
+
+ if (buf1 == DEVDRV_USBF_OFF)
+ {
+ return DEVDRV_USBF_OFF; /* detach */
+ }
+
+ return DEVDRV_USBF_ON; /* attach */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Attach
+* Description : Connects to the USB host controller.
+* : This function pulls up D+.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_USB_FUNCTION_Attach (void)
+{
+ Userdef_USB_usb0_function_attach();
+
+ Userdef_USB_usb0_function_delay_xms(10);
+
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 1,
+ USB_SYSCFG_DPRPU_SHIFT,
+ USB_SYSCFG_DPRPU); /* Pull-up D+ and open D- */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Detach
+* Description : Disconnects from the USB host controller.
+* : This function opens D+/D-.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_USB_FUNCTION_Detach (void)
+{
+ uint16_t pipe;
+
+ Userdef_USB_usb0_function_detach();
+
+ for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+ {
+ if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
+ {
+ usb0_function_stop_transfer(pipe);
+ }
+ }
+
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 0,
+ USB_SYSCFG_DPRPU_SHIFT,
+ USB_SYSCFG_DPRPU); /* open D+ and D- */
+
+ /* Detach Recovery */
+ Userdef_USB_usb0_function_delay_500ns(); /* need 1us=500ns * 2 wait */
+ Userdef_USB_usb0_function_delay_500ns();
+
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 1,
+ USB_SYSCFG_DCFM_SHIFT,
+ USB_SYSCFG_DCFM);
+ Userdef_USB_usb0_function_delay_500ns(); /* need 100ns wait but 500ns S/W wait */
+
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 0,
+ USB_SYSCFG_DCFM_SHIFT,
+ USB_SYSCFG_DCFM);
+
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 0,
+ USB_SYSCFG_USBE_SHIFT,
+ USB_SYSCFG_USBE); /* soft reset module */
+ Userdef_USB_usb0_function_delay_500ns();
+
+ RZA_IO_RegWrite_16(&USB200.SYSCFG0,
+ 1,
+ USB_SYSCFG_USBE_SHIFT,
+ USB_SYSCFG_USBE);
+
+ usb0_function_EnableINTModule(); /* Interrupt Enable */
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_BusReset
+* Description : This function is executed when the USB device is transitioned
+* : to POWERD_STATE. Sets the device descriptor according to the
+* : connection speed determined by the USB reset hand shake.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0 /*The USBHAL in mbed does not need this function*/
+void usb0_function_USB_FUNCTION_BusReset (void)
+{
+ usb0_function_init_status(); /* memory clear */
+
+ if (usb0_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
+ {
+ usb0_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED); /* Device Descriptor reset */
+ }
+ else
+ {
+ usb0_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED); /* Device Descriptor reset */
+ }
+
+ usb0_function_ResetDCP(); /* Default Control PIPE reset */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Resume
+* Description : This function is executed when the USB device detects a resume
+* : signal.
+* : The USB sample driver does not operate for this function.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0 /*The USBHAL in mbed does not need this function*/
+void usb0_function_USB_FUNCTION_Resume (void)
+{
+ /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_Suspend
+* Description : This function is executed when the USB device detects a suspend
+* : signal.
+* : The USB sample driver does not operate for this function.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0 /*The USBHAL in mbed does not need this function*/
+void usb0_function_USB_FUNCTION_Suspend (void)
+{
+ /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_USB_FUNCTION_TestMode
+* Description : This function is executed when the USB device is transitioned U
+* : to TEST_MODE by the USB standard request.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_USB_FUNCTION_TestMode (void)
+{
+ switch (g_usb0_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
+ {
+ case USB_FUNCTION_FUNCTION_TEST_J:
+ case USB_FUNCTION_FUNCTION_TEST_K:
+ case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
+ case USB_FUNCTION_FUNCTION_TEST_PACKET:
+ RZA_IO_RegWrite_16(&USB200.TESTMODE,
+ (g_usb0_function_TestModeSelectors >> 8),
+ USB_TESTMODE_UTST_SHIFT,
+ USB_TESTMODE_UTST);
+ break;
+
+ case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
+ default:
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_EnableINTModule
+* Description : Enables USB interrupt.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_EnableINTModule (void)
+{
+ uint16_t buf;
+
+ buf = USB200.INTENB0;
+ buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
+ USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
+ USB200.INTENB0 = buf;
+
+ usb0_function_enable_bemp_int(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/function/usb0_function_sub.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,453 @@
+/*******************************************************************************
+* 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_sub.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)
+*******************************************************************************/
+#if 0
+extern const uint16_t *g_usb0_function_EndPntPtr[];
+extern uint8_t g_usb0_function_DeviceDescriptor[];
+extern uint8_t *g_usb0_function_ConfigurationPtr[];
+#endif
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb0_function_ResetDCP
+* Description : Initializes the default control pipe(DCP).
+* Outline : Reset default control pipe
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_ResetDCP (void)
+{
+ USB200.DCPCFG = 0;
+#if 0
+ USB200.DCPMAXP = g_usb0_function_DeviceDescriptor[7];
+#else
+ USB200.DCPMAXP = 64;
+#endif
+
+ USB200.CFIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+ USB200.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+ USB200.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_ResetEP
+* Description : Initializes the end point.
+* Arguments : uint16_t num ; Configuration Number
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_ResetEP (uint16_t num)
+{
+ uint16_t pipe;
+ uint16_t ep;
+ uint16_t index;
+ uint16_t buf;
+ uint16_t * tbl;
+
+ tbl = (uint16_t *)(g_usb0_function_EndPntPtr[num - 1]);
+
+ for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+ {
+ if (g_usb0_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
+ {
+ index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb0_function_EPTableIndex[ep]);
+ pipe = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
+
+ g_usb0_function_PipeTbl[pipe] = (uint16_t)( ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
+ ep |
+ (tbl[index + 0] & USB_FUNCTION_FIFO_USE) );
+
+ if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
+ {
+ tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
+#ifdef __USB_DMA_BFRE_ENABLE__
+ /* this routine cannnot be perfomred if read operation is executed in buffer size */
+ if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
+ ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
+ {
+ tbl[index + 1] |= USB_FUNCTION_BFREON;
+ }
+#endif
+ }
+
+ /* Interrupt Disable */
+ buf = USB200.BRDYENB;
+ buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
+ USB200.BRDYENB = buf;
+ buf = USB200.NRDYENB;
+ buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
+ USB200.NRDYENB = buf;
+ buf = USB200.BEMPENB;
+ buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
+ USB200.BEMPENB = buf;
+
+ usb0_function_set_pid_nak(pipe);
+
+ /* CurrentPIPE Clear */
+ if (RZA_IO_RegRead_16(&USB200.CFIFOSEL,
+ USB_CFIFOSEL_CURPIPE_SHIFT,
+ USB_CFIFOSEL_CURPIPE) == pipe)
+ {
+ RZA_IO_RegWrite_16(&USB200.CFIFOSEL,
+ 0,
+ USB_CFIFOSEL_CURPIPE_SHIFT,
+ USB_CFIFOSEL_CURPIPE);
+ }
+
+ if (RZA_IO_RegRead_16(&USB200.D0FIFOSEL,
+ USB_DnFIFOSEL_CURPIPE_SHIFT,
+ USB_DnFIFOSEL_CURPIPE) == pipe)
+ {
+ RZA_IO_RegWrite_16(&USB200.D0FIFOSEL,
+ 0,
+ USB_DnFIFOSEL_CURPIPE_SHIFT,
+ USB_DnFIFOSEL_CURPIPE);
+ }
+
+ if (RZA_IO_RegRead_16(&USB200.D1FIFOSEL,
+ USB_DnFIFOSEL_CURPIPE_SHIFT,
+ USB_DnFIFOSEL_CURPIPE) == pipe)
+ {
+ RZA_IO_RegWrite_16(&USB200.D1FIFOSEL,
+ 0,
+ USB_DnFIFOSEL_CURPIPE_SHIFT,
+ USB_DnFIFOSEL_CURPIPE);
+ }
+
+ /* PIPE Configuration */
+ USB200.PIPESEL = pipe;
+ USB200.PIPECFG = tbl[index + 1];
+ USB200.PIPEBUF = tbl[index + 2];
+ USB200.PIPEMAXP = tbl[index + 3];
+ USB200.PIPEPERI = tbl[index + 4];
+
+ g_usb0_function_pipecfg[pipe] = tbl[index + 1];
+ g_usb0_function_pipebuf[pipe] = tbl[index + 2];
+ g_usb0_function_pipemaxp[pipe] = tbl[index + 3];
+ g_usb0_function_pipeperi[pipe] = tbl[index + 4];
+
+ /* Buffer Clear */
+ usb0_function_set_sqclr(pipe);
+ usb0_function_aclrm(pipe);
+
+ /* init Global */
+ g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+ g_usb0_function_PipeDataSize[pipe] = 0;
+ }
+ }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_EpToPipe
+* Description : Returns the pipe which end point specified by the argument is
+* : allocated to.
+* Arguments : uint16_t ep ; Direction + Endpoint Number
+* Return Value : USB_FUNCTION_EP_ERROR : Error
+* : Others : Pipe Number
+*******************************************************************************/
+uint16_t usb0_function_EpToPipe (uint16_t ep)
+{
+ uint16_t pipe;
+
+ for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+ {
+ if ((g_usb0_function_PipeTbl[pipe] & 0x00ff) == ep)
+ {
+ return pipe;
+ }
+ }
+
+ return USB_FUNCTION_EP_ERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_InitEPTable
+* Description : Sets the end point by the Alternate setting value of the
+* : configuration number and the interface number specified by the
+* : argument.
+* Arguments : uint16_t Con_Num ; Configuration Number
+* : uint16_t Int_Num ; Interface Number
+* : uint16_t Alt_Num ; Alternate Setting
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
+{
+ uint8_t * ptr;
+ uint16_t point_interface;
+ uint16_t point_endpoint;
+ uint16_t length;
+ uint16_t start;
+ uint16_t numbers;
+ uint16_t endpoint;
+
+ ptr = (uint8_t *)g_usb0_function_ConfigurationPtr[Con_Num - 1];
+ point_interface = *ptr;
+ length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
+ ptr += *ptr;
+ start = 0;
+ numbers = 0;
+ point_endpoint = 0;
+
+ for (; point_interface < length;)
+ {
+ switch (*(ptr + 1)) /* Descriptor Type ? */
+ {
+ case USB_FUNCTION_DT_INTERFACE: /* Interface */
+ if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
+ {
+ numbers = *(ptr + 4);
+ }
+ else
+ {
+ start += *(ptr + 4);
+ }
+ point_interface += *ptr;
+ ptr += *ptr;
+ break;
+
+ case USB_FUNCTION_DT_ENDPOINT: /* Endpoint */
+ if (point_endpoint < numbers)
+ {
+ endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
+ g_usb0_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
+ ++point_endpoint;
+ }
+ point_interface += *ptr;
+ ptr += *ptr;
+ break;
+
+ case USB_FUNCTION_DT_DEVICE: /* Device */
+ case USB_FUNCTION_DT_CONFIGURATION: /* Configuration */
+ case USB_FUNCTION_DT_STRING: /* String */
+ default: /* Class, Vendor, else */
+ point_interface += *ptr;
+ ptr += *ptr;
+ break;
+ }
+ }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_GetConfigNum
+* Description : Returns the number of configuration referring to the number of
+* : configuration described in the device descriptor.
+* Arguments : none
+* Return Value : Number of possible configurations (bNumConfigurations).
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_GetConfigNum (void)
+{
+ return (uint16_t)g_usb0_function_DeviceDescriptor[17];
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_GetInterfaceNum
+* Description : Returns the number of interface referring to the number of
+* : interface described in the configuration descriptor.
+* Arguments : uint16_t num ; Configuration Number
+* Return Value : Number of this interface (bNumInterfaces).
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_GetInterfaceNum (uint16_t num)
+{
+ return (uint16_t)(*(g_usb0_function_ConfigurationPtr[num - 1] + 4));
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_GetAltNum
+* Description : Returns the Alternate setting value of the configuration number
+* : and the interface number specified by the argument.
+* Arguments : uint16_t Con_Num ; Configuration Number
+* : uint16_t Int_Num ; Interface Number
+* Return Value : Value used to select this alternate setting(bAlternateSetting).
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
+{
+ uint8_t * ptr;
+ uint16_t point;
+ uint16_t alt_num = 0;
+ uint16_t length;
+
+ ptr = (uint8_t *)(g_usb0_function_ConfigurationPtr[Con_Num - 1]);
+ point = ptr[0];
+ ptr += ptr[0]; /* InterfaceDescriptor[0] */
+ length = (uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 2));
+ length |= (uint16_t)((uint16_t)(*(g_usb0_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
+
+ for (; point < length;) /* Search Descriptor Table size */
+ {
+ switch (ptr[1]) /* Descriptor Type ? */
+ {
+ case USB_FUNCTION_DT_INTERFACE: /* Interface */
+ if (Int_Num == ptr[2])
+ {
+ alt_num = (uint16_t)ptr[3]; /* Alternate Number count */
+ }
+ point += ptr[0];
+ ptr += ptr[0];
+ break;
+
+ case USB_FUNCTION_DT_DEVICE: /* Device */
+ case USB_FUNCTION_DT_CONFIGURATION: /* Configuration */
+ case USB_FUNCTION_DT_STRING: /* String */
+ case USB_FUNCTION_DT_ENDPOINT: /* Endpoint */
+ default: /* Class, Vendor, else */
+ point += ptr[0];
+ ptr += ptr[0];
+ break;
+ }
+ }
+ return alt_num;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_CheckRemoteWakeup
+* Description : Returns the result of the remote wake up function is supported
+* : or not referring to the configuration descriptor.
+* Arguments : none
+* Return Value : DEVDRV_USBF_ON : Support Remote Wakeup
+* : DEVDRV_USBF_OFF : not Support Remote Wakeup
+*******************************************************************************/
+#if 0
+uint16_t usb0_function_CheckRemoteWakeup (void)
+{
+ uint8_t atr;
+
+ if (g_usb0_function_ConfigNum == 0)
+ {
+ return DEVDRV_USBF_OFF;
+ }
+
+ atr = *(g_usb0_function_ConfigurationPtr[g_usb0_function_ConfigNum - 1] + 7);
+
+ if (atr & USB_FUNCTION_CF_RWUP)
+ {
+ return DEVDRV_USBF_ON;
+ }
+
+ return DEVDRV_USBF_OFF;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_alt
+* Description : Initializes the Alternate setting area.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_clear_alt (void)
+{
+ int i;
+
+ for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
+ {
+ g_usb0_function_Alternate[i] = 0; /* Alternate */
+ }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_pipe_tbl
+* Description : Initializes pipe definition table.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb0_function_clear_pipe_tbl (void)
+{
+ int pipe;
+
+ for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+ {
+ g_usb0_function_PipeTbl[pipe] = 0;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_clear_ep_table_index
+* Description : Initializes the end point table index.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb0_function_clear_ep_table_index (void)
+{
+ int ep;
+
+ for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+ {
+ g_usb0_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
+ }
+}
+#endif
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_dmacdrv.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,698 @@
+/*******************************************************************************
+* 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_dmacdrv.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 <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "rza_io_regrw.h"
+#include "usb0_function_dmacdrv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DMAC_INDEFINE (255) /* Macro definition when REQD bit is not used */
+
+/* ==== Request setting information for on-chip peripheral module ==== */
+typedef enum dmac_peri_req_reg_type
+{
+ DMAC_REQ_MID,
+ DMAC_REQ_RID,
+ DMAC_REQ_AM,
+ DMAC_REQ_LVL,
+ DMAC_REQ_REQD
+} dmac_peri_req_reg_type_t;
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+/* ==== Prototype declaration ==== */
+
+/* ==== Global variable ==== */
+/* On-chip peripheral module request setting table */
+static const uint8_t usb0_function_dmac_peri_req_init_table[8][5] =
+{
+ /* MID,RID,AM,LVL,REQD */
+ {32, 3, 2, 1, 1}, /* USB_0 channel 0 transmit FIFO empty */
+ {32, 3, 2, 1, 0}, /* USB_0 channel 0 receive FIFO full */
+ {33, 3, 2, 1, 1}, /* USB_0 channel 1 transmit FIFO empty */
+ {33, 3, 2, 1, 0}, /* USB_0 channel 1 receive FIFO full */
+ {34, 3, 2, 1, 1}, /* USB_1 channel 0 transmit FIFO empty */
+ {34, 3, 2, 1, 0}, /* USB_1 channel 0 receive FIFO full */
+ {35, 3, 2, 1, 1}, /* USB_1 channel 1 transmit FIFO empty */
+ {35, 3, 2, 1, 0}, /* USB_1 channel 1 receive FIFO full */
+};
+
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_PeriReqInit
+* Description : Sets the register mode for DMA mode and the on-chip peripheral
+* : module request for transfer request for DMAC channel 1.
+* : Executes DMAC initial setting using the DMA information
+* : specified by the argument *trans_info and the enabled/disabled
+* : continuous transfer specified by the argument continuation.
+* : Registers DMAC channel 1 interrupt handler function and sets
+* : the interrupt priority level. Then enables transfer completion
+* : interrupt.
+* Arguments : dmac_transinfo_t *trans_info : Setting information to DMAC register
+* : uint32_t dmamode : DMA mode (only for DMAC_MODE_REGISTER)
+* : uint32_t continuation : Set continuous transfer to be valid
+* : after DMA transfer has been completed
+* : DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+* : DMAC_SAMPLE_SINGLE : Do not execute continuous transfer
+* : uint32_t request_factor : Factor for on-chip peripheral module request
+* : DMAC_REQ_OSTM0TINT : OSTM_0 compare match
+* : DMAC_REQ_OSTM1TINT : OSTM_1 compare match
+* : DMAC_REQ_TGI0A : MTU2_0 input capture/compare match
+* : :
+* : uint32_t req_direction: Setting value of CHCFG_n register REQD bit
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC1_PeriReqInit (const dmac_transinfo_t * trans_info,
+ uint32_t dmamode, uint32_t continuation,
+ uint32_t request_factor, uint32_t req_direction)
+{
+ /* ==== Register mode ==== */
+ if (DMAC_MODE_REGISTER == dmamode)
+ {
+ /* ==== Next0 register set ==== */
+ DMAC1.N0SA_n = trans_info->src_addr; /* Start address of transfer source */
+ DMAC1.N0DA_n = trans_info->dst_addr; /* Start address of transfer destination */
+ DMAC1.N0TB_n = trans_info->count; /* Total transfer byte count */
+
+ /* DAD : Transfer destination address counting direction */
+ /* SAD : Transfer source address counting direction */
+ /* DDS : Transfer destination transfer size */
+ /* SDS : Transfer source transfer size */
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ trans_info->daddr_dir,
+ DMAC1_CHCFG_n_DAD_SHIFT,
+ DMAC1_CHCFG_n_DAD);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ trans_info->saddr_dir,
+ DMAC1_CHCFG_n_SAD_SHIFT,
+ DMAC1_CHCFG_n_SAD);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ trans_info->dst_size,
+ DMAC1_CHCFG_n_DDS_SHIFT,
+ DMAC1_CHCFG_n_DDS);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ trans_info->src_size,
+ DMAC1_CHCFG_n_SDS_SHIFT,
+ DMAC1_CHCFG_n_SDS);
+
+ /* DMS : Register mode */
+ /* RSEL : Select Next0 register set */
+ /* SBE : No discharge of buffer data when aborted */
+ /* DEM : No DMA interrupt mask */
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 0,
+ DMAC1_CHCFG_n_DMS_SHIFT,
+ DMAC1_CHCFG_n_DMS);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 0,
+ DMAC1_CHCFG_n_RSEL_SHIFT,
+ DMAC1_CHCFG_n_RSEL);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 0,
+ DMAC1_CHCFG_n_SBE_SHIFT,
+ DMAC1_CHCFG_n_SBE);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 0,
+ DMAC1_CHCFG_n_DEM_SHIFT,
+ DMAC1_CHCFG_n_DEM);
+
+ /* ---- Continuous transfer ---- */
+ if (DMAC_SAMPLE_CONTINUATION == continuation)
+ {
+ /* REN : Execute continuous transfer */
+ /* RSW : Change register set when DMA transfer is completed. */
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 1,
+ DMAC1_CHCFG_n_REN_SHIFT,
+ DMAC1_CHCFG_n_REN);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 1,
+ DMAC1_CHCFG_n_RSW_SHIFT,
+ DMAC1_CHCFG_n_RSW);
+ }
+ /* ---- Single transfer ---- */
+ else
+ {
+ /* REN : Do not execute continuous transfer */
+ /* RSW : Do not change register set when DMA transfer is completed. */
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 0,
+ DMAC1_CHCFG_n_REN_SHIFT,
+ DMAC1_CHCFG_n_REN);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 0,
+ DMAC1_CHCFG_n_RSW_SHIFT,
+ DMAC1_CHCFG_n_RSW);
+ }
+
+ /* TM : Single transfer */
+ /* SEL : Channel setting */
+ /* HIEN, LOEN : On-chip peripheral module request */
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 0,
+ DMAC1_CHCFG_n_TM_SHIFT,
+ DMAC1_CHCFG_n_TM);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 1,
+ DMAC1_CHCFG_n_SEL_SHIFT,
+ DMAC1_CHCFG_n_SEL);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 1,
+ DMAC1_CHCFG_n_HIEN_SHIFT,
+ DMAC1_CHCFG_n_HIEN);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ 0,
+ DMAC1_CHCFG_n_LOEN_SHIFT,
+ DMAC1_CHCFG_n_LOEN);
+
+ /* ---- Set factor by specified on-chip peripheral module request ---- */
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+ DMAC1_CHCFG_n_AM_SHIFT,
+ DMAC1_CHCFG_n_AM);
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+ DMAC1_CHCFG_n_LVL_SHIFT,
+ DMAC1_CHCFG_n_LVL);
+
+ if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+ {
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+ DMAC1_CHCFG_n_REQD_SHIFT,
+ DMAC1_CHCFG_n_REQD);
+ }
+ else
+ {
+ RZA_IO_RegWrite_32(&DMAC1.CHCFG_n,
+ req_direction,
+ DMAC1_CHCFG_n_REQD_SHIFT,
+ DMAC1_CHCFG_n_REQD);
+ }
+
+ RZA_IO_RegWrite_32(&DMAC01.DMARS,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+ DMAC01_DMARS_CH1_RID_SHIFT,
+ DMAC01_DMARS_CH1_RID);
+ RZA_IO_RegWrite_32(&DMAC01.DMARS,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+ DMAC01_DMARS_CH1_MID_SHIFT,
+ DMAC01_DMARS_CH1_MID);
+
+ /* PR : Round robin mode */
+ RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+ 1,
+ DMAC07_DCTRL_0_7_PR_SHIFT,
+ DMAC07_DCTRL_0_7_PR);
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_Open
+* Description : Enables DMAC channel 1 transfer.
+* Arguments : uint32_t req : DMAC request mode
+* Return Value : 0 : Succeeded in enabling DMA transfer
+* : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb0_function_DMAC1_Open (uint32_t req)
+{
+ int32_t ret;
+ volatile uint8_t dummy;
+
+ /* Transferable? */
+ if ((0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+ DMAC1_CHSTAT_n_EN_SHIFT,
+ DMAC1_CHSTAT_n_EN)) &&
+ (0 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+ DMAC1_CHSTAT_n_TACT_SHIFT,
+ DMAC1_CHSTAT_n_TACT)))
+ {
+ /* Clear Channel Status Register */
+ RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+ 1,
+ DMAC1_CHCTRL_n_SWRST_SHIFT,
+ DMAC1_CHCTRL_n_SWRST);
+ dummy = RZA_IO_RegRead_32(&DMAC1.CHCTRL_n,
+ DMAC1_CHCTRL_n_SWRST_SHIFT,
+ DMAC1_CHCTRL_n_SWRST);
+ /* Enable DMA transfer */
+ RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+ 1,
+ DMAC1_CHCTRL_n_SETEN_SHIFT,
+ DMAC1_CHCTRL_n_SETEN);
+
+ /* ---- Request by software ---- */
+ if (DMAC_REQ_MODE_SOFT == req)
+ {
+ /* DMA transfer Request by software */
+ RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+ 1,
+ DMAC1_CHCTRL_n_STG_SHIFT,
+ DMAC1_CHCTRL_n_STG);
+ }
+
+ ret = 0;
+ }
+ else
+ {
+ ret = -1;
+ }
+
+ return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_Close
+* Description : Aborts DMAC channel 1 transfer. Returns the remaining transfer
+* : byte count at the time of DMA transfer abort to the argument
+* : *remain.
+* Arguments : uint32_t * remain : Remaining transfer byte count when
+* : : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC1_Close (uint32_t * remain)
+{
+
+ /* ==== Abort transfer ==== */
+ RZA_IO_RegWrite_32(&DMAC1.CHCTRL_n,
+ 1,
+ DMAC1_CHCTRL_n_CLREN_SHIFT,
+ DMAC1_CHCTRL_n_CLREN);
+
+ while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+ DMAC1_CHSTAT_n_TACT_SHIFT,
+ DMAC1_CHSTAT_n_TACT))
+ {
+ /* Loop until transfer is aborted */
+ }
+
+ while (1 == RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+ DMAC1_CHSTAT_n_EN_SHIFT,
+ DMAC1_CHSTAT_n_EN))
+ {
+ /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+ }
+ /* ==== Obtain remaining transfer byte count ==== */
+ *remain = DMAC1.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC1_Load_Set
+* Description : Sets the transfer source address, transfer destination
+* : address, and total transfer byte count respectively
+* : specified by the argument src_addr, dst_addr, and count to
+* : DMAC channel 1 as DMA transfer information.
+* : Sets the register set selected by the CHCFG_n register
+* : RSEL bit from the Next0 or Next1 register set.
+* : This function should be called when DMA transfer of DMAC
+* : channel 1 is aboted.
+* Arguments : uint32_t src_addr : Transfer source address
+* : uint32_t dst_addr : Transfer destination address
+* : uint32_t count : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC1_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+ uint8_t reg_set;
+
+ /* Obtain register set in use */
+ reg_set = RZA_IO_RegRead_32(&DMAC1.CHSTAT_n,
+ DMAC1_CHSTAT_n_SR_SHIFT,
+ DMAC1_CHSTAT_n_SR);
+
+ /* ==== Load ==== */
+ if (0 == reg_set)
+ {
+ /* ---- Next0 Register Set ---- */
+ DMAC1.N0SA_n = src_addr; /* Start address of transfer source */
+ DMAC1.N0DA_n = dst_addr; /* Start address of transfer destination */
+ DMAC1.N0TB_n = count; /* Total transfer byte count */
+ }
+ else
+ {
+ /* ---- Next1 Register Set ---- */
+ DMAC1.N1SA_n = src_addr; /* Start address of transfer source */
+ DMAC1.N1DA_n = dst_addr; /* Start address of transfer destination */
+ DMAC1.N1TB_n = count; /* Total transfer byte count */
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_PeriReqInit
+* Description : Sets the register mode for DMA mode and the on-chip peripheral
+* : module request for transfer request for DMAC channel 2.
+* : Executes DMAC initial setting using the DMA information
+* : specified by the argument *trans_info and the enabled/disabled
+* : continuous transfer specified by the argument continuation.
+* : Registers DMAC channel 2 interrupt handler function and sets
+* : the interrupt priority level. Then enables transfer completion
+* : interrupt.
+* Arguments : dmac_transinfo_t * trans_info : Setting information to DMAC
+* : : register
+* : uint32_t dmamode : DMA mode (only for DMAC_MODE_REGISTER)
+* : uint32_t continuation : Set continuous transfer to be valid
+* : : after DMA transfer has been completed
+* : DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+* : DMAC_SAMPLE_SINGLE : Do not execute continuous
+* : : transfer
+* : uint32_t request_factor : Factor for on-chip peripheral module
+* : : request
+* : DMAC_REQ_OSTM0TINT : OSTM_0 compare match
+* : DMAC_REQ_OSTM1TINT : OSTM_1 compare match
+* : DMAC_REQ_TGI0A : MTU2_0 input capture/compare match
+* : :
+* : uint32_t req_direction : Setting value of CHCFG_n register
+* : : REQD bit
+*******************************************************************************/
+void usb0_function_DMAC2_PeriReqInit (const dmac_transinfo_t * trans_info,
+ uint32_t dmamode, uint32_t continuation,
+ uint32_t request_factor, uint32_t req_direction)
+{
+ /* ==== Register mode ==== */
+ if (DMAC_MODE_REGISTER == dmamode)
+ {
+ /* ==== Next0 register set ==== */
+ DMAC2.N0SA_n = trans_info->src_addr; /* Start address of transfer source */
+ DMAC2.N0DA_n = trans_info->dst_addr; /* Start address of transfer destination */
+ DMAC2.N0TB_n = trans_info->count; /* Total transfer byte count */
+
+ /* DAD : Transfer destination address counting direction */
+ /* SAD : Transfer source address counting direction */
+ /* DDS : Transfer destination transfer size */
+ /* SDS : Transfer source transfer size */
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ trans_info->daddr_dir,
+ DMAC2_CHCFG_n_DAD_SHIFT,
+ DMAC2_CHCFG_n_DAD);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ trans_info->saddr_dir,
+ DMAC2_CHCFG_n_SAD_SHIFT,
+ DMAC2_CHCFG_n_SAD);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ trans_info->dst_size,
+ DMAC2_CHCFG_n_DDS_SHIFT,
+ DMAC2_CHCFG_n_DDS);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ trans_info->src_size,
+ DMAC2_CHCFG_n_SDS_SHIFT,
+ DMAC2_CHCFG_n_SDS);
+
+ /* DMS : Register mode */
+ /* RSEL : Select Next0 register set */
+ /* SBE : No discharge of buffer data when aborted */
+ /* DEM : No DMA interrupt mask */
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 0,
+ DMAC2_CHCFG_n_DMS_SHIFT,
+ DMAC2_CHCFG_n_DMS);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 0,
+ DMAC2_CHCFG_n_RSEL_SHIFT,
+ DMAC2_CHCFG_n_RSEL);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 0,
+ DMAC2_CHCFG_n_SBE_SHIFT,
+ DMAC2_CHCFG_n_SBE);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 0,
+ DMAC2_CHCFG_n_DEM_SHIFT,
+ DMAC2_CHCFG_n_DEM);
+
+ /* ---- Continuous transfer ---- */
+ if (DMAC_SAMPLE_CONTINUATION == continuation)
+ {
+ /* REN : Execute continuous transfer */
+ /* RSW : Change register set when DMA transfer is completed. */
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 1,
+ DMAC2_CHCFG_n_REN_SHIFT,
+ DMAC2_CHCFG_n_REN);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 1,
+ DMAC2_CHCFG_n_RSW_SHIFT,
+ DMAC2_CHCFG_n_RSW);
+ }
+ /* ---- Single transfer ---- */
+ else
+ {
+ /* REN : Do not execute continuous transfer */
+ /* RSW : Do not change register set when DMA transfer is completed. */
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 0,
+ DMAC2_CHCFG_n_REN_SHIFT,
+ DMAC2_CHCFG_n_REN);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 0,
+ DMAC2_CHCFG_n_RSW_SHIFT,
+ DMAC2_CHCFG_n_RSW);
+ }
+
+ /* TM : Single transfer */
+ /* SEL : Channel setting */
+ /* HIEN, LOEN : On-chip peripheral module request */
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 0,
+ DMAC2_CHCFG_n_TM_SHIFT,
+ DMAC2_CHCFG_n_TM);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 2,
+ DMAC2_CHCFG_n_SEL_SHIFT,
+ DMAC2_CHCFG_n_SEL);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 1,
+ DMAC2_CHCFG_n_HIEN_SHIFT,
+ DMAC2_CHCFG_n_HIEN);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ 0,
+ DMAC2_CHCFG_n_LOEN_SHIFT,
+ DMAC2_CHCFG_n_LOEN);
+
+ /* ---- Set factor by specified on-chip peripheral module request ---- */
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+ DMAC2_CHCFG_n_AM_SHIFT,
+ DMAC2_CHCFG_n_AM);
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+ DMAC2_CHCFG_n_LVL_SHIFT,
+ DMAC2_CHCFG_n_LVL);
+ if (usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+ {
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+ DMAC2_CHCFG_n_REQD_SHIFT,
+ DMAC2_CHCFG_n_REQD);
+ }
+ else
+ {
+ RZA_IO_RegWrite_32(&DMAC2.CHCFG_n,
+ req_direction,
+ DMAC2_CHCFG_n_REQD_SHIFT,
+ DMAC2_CHCFG_n_REQD);
+ }
+ RZA_IO_RegWrite_32(&DMAC23.DMARS,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+ DMAC23_DMARS_CH2_RID_SHIFT,
+ DMAC23_DMARS_CH2_RID);
+ RZA_IO_RegWrite_32(&DMAC23.DMARS,
+ usb0_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+ DMAC23_DMARS_CH2_MID_SHIFT,
+ DMAC23_DMARS_CH2_MID);
+
+ /* PR : Round robin mode */
+ RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+ 1,
+ DMAC07_DCTRL_0_7_PR_SHIFT,
+ DMAC07_DCTRL_0_7_PR);
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_Open
+* Description : Enables DMAC channel 2 transfer.
+* Arguments : uint32_t req : DMAC request mode
+* Return Value : 0 : Succeeded in enabling DMA transfer
+* : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb0_function_DMAC2_Open (uint32_t req)
+{
+ int32_t ret;
+ volatile uint8_t dummy;
+
+ /* Transferable? */
+ if ((0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
+ DMAC2_CHSTAT_n_EN_SHIFT,
+ DMAC2_CHSTAT_n_EN)) &&
+ (0 == RZA_IO_RegRead_32(&DMAC.CHSTAT_2,
+ DMAC2_CHSTAT_n_TACT_SHIFT,
+ DMAC2_CHSTAT_n_TACT)))
+ {
+ /* Clear Channel Status Register */
+ RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+ 1,
+ DMAC2_CHCTRL_n_SWRST_SHIFT,
+ DMAC2_CHCTRL_n_SWRST);
+ dummy = RZA_IO_RegRead_32(&DMAC2.CHCTRL_n,
+ DMAC2_CHCTRL_n_SWRST_SHIFT,
+ DMAC2_CHCTRL_n_SWRST);
+ /* Enable DMA transfer */
+ RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+ 1,
+ DMAC2_CHCTRL_n_SETEN_SHIFT,
+ DMAC2_CHCTRL_n_SETEN);
+
+ /* ---- Request by software ---- */
+ if (DMAC_REQ_MODE_SOFT == req)
+ {
+ /* DMA transfer Request by software */
+ RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+ 1,
+ DMAC2_CHCTRL_n_STG_SHIFT,
+ DMAC2_CHCTRL_n_STG);
+ }
+
+ ret = 0;
+ }
+ else
+ {
+ ret = -1;
+ }
+
+ return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_Close
+* Description : Aborts DMAC channel 2 transfer. Returns the remaining transfer
+* : byte count at the time of DMA transfer abort to the argument
+* : *remain.
+* Arguments : uint32_t * remain : Remaining transfer byte count when
+* : : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC2_Close (uint32_t * remain)
+{
+
+ /* ==== Abort transfer ==== */
+ RZA_IO_RegWrite_32(&DMAC2.CHCTRL_n,
+ 1,
+ DMAC2_CHCTRL_n_CLREN_SHIFT,
+ DMAC2_CHCTRL_n_CLREN);
+
+ while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
+ DMAC2_CHSTAT_n_TACT_SHIFT,
+ DMAC2_CHSTAT_n_TACT))
+ {
+ /* Loop until transfer is aborted */
+ }
+
+ while (1 == RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
+ DMAC2_CHSTAT_n_EN_SHIFT,
+ DMAC2_CHSTAT_n_EN))
+ {
+ /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+ }
+ /* ==== Obtain remaining transfer byte count ==== */
+ *remain = DMAC2.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_DMAC2_Load_Set
+* Description : Sets the transfer source address, transfer destination
+* : address, and total transfer byte count respectively
+* : specified by the argument src_addr, dst_addr, and count to
+* : DMAC channel 2 as DMA transfer information.
+* : Sets the register set selected by the CHCFG_n register
+* : RSEL bit from the Next0 or Next1 register set.
+* : This function should be called when DMA transfer of DMAC
+* : channel 2 is aboted.
+* Arguments : uint32_t src_addr : Transfer source address
+* : uint32_t dst_addr : Transfer destination address
+* : uint32_t count : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb0_function_DMAC2_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+ uint8_t reg_set;
+
+ /* Obtain register set in use */
+ reg_set = RZA_IO_RegRead_32(&DMAC2.CHSTAT_n,
+ DMAC2_CHSTAT_n_SR_SHIFT,
+ DMAC2_CHSTAT_n_SR);
+
+ /* ==== Load ==== */
+ if (0 == reg_set)
+ {
+ /* ---- Next0 Register Set ---- */
+ DMAC2.N0SA_n = src_addr; /* Start address of transfer source */
+ DMAC2.N0DA_n = dst_addr; /* Start address of transfer destination */
+ DMAC2.N0TB_n = count; /* Total transfer byte count */
+ }
+ else
+ {
+ /* ---- Next1 Register Set ---- */
+ DMAC2.N1SA_n = src_addr; /* Start address of transfer source */
+ DMAC2.N1DA_n = dst_addr; /* Start address of transfer destination */
+ DMAC2.N1TB_n = count; /* Total transfer byte count */
+ }
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/src/userdef/usb0_function_userdef.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,762 @@
+/*******************************************************************************
+* 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_userdef.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 <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "devdrv_usb_function_api.h"
+#include "usb0_function_dmacdrv.h" /* common DMAC driver for USB */
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DUMMY_ACCESS OSTM0CNT
+
+/* #define CACHE_WRITEBACK */
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern int32_t io_cwb(unsigned long start, unsigned long end);
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb0_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
+ uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void usb0_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
+ uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void Userdef_USB_usb0_function_delay_10us_2(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_d0fifo_dmaintid
+* Description : get D0FIFO DMA Interrupt ID
+* Arguments : none
+* Return Value : D0FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid (void)
+{
+#if 0
+ return DMAINT1_IRQn;
+#else
+ return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_d1fifo_dmaintid
+* Description : get D1FIFO DMA Interrupt ID
+* Arguments : none
+* Return Value : D1FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid (void)
+{
+#if 0
+ return DMAINT1_IRQn;
+#else
+ return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_attach
+* Description : Wait for the software of 1ms.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_attach (void)
+{
+ printf("\n");
+ printf("channel 0 attach device\n");
+ printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_detach
+* Description : Wait for the software of 1ms.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_detach (void)
+{
+ printf("\n");
+ printf("channel 0 detach device\n");
+ printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_1ms
+* Description : Wait for the software of 1ms.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_1ms (void)
+{
+ volatile int i;
+ volatile unsigned long tmp;
+
+ /*
+ * Wait 1ms (Please change for your MCU).
+ */
+ for (i = 0; i < 1440; ++i)
+ {
+ tmp = DUMMY_ACCESS;
+ }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_xms
+* Description : Wait for the software in the period of time specified by the
+* : argument.
+* : Alter this function according to the user's system.
+* Arguments : uint32_t msec ; Wait Time (msec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_xms (uint32_t msec)
+{
+ volatile unsigned short i;
+
+ for (i = 0; i < msec; ++i)
+ {
+ Userdef_USB_usb0_function_delay_1ms();
+ }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_10us
+* Description : Waits for software for the period specified by the argument.
+* : Alter this function according to the user's system.
+* Arguments : uint32_t usec ; Wait Time(x 10usec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_10us (uint32_t usec)
+{
+ volatile int i;
+
+ /* Wait 10us (Please change for your MCU) */
+ for (i = 0; i < usec; ++i)
+ {
+ Userdef_USB_usb0_function_delay_10us_2();
+ }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_10us_2
+* Description : Waits for software for the period specified by the argument.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+static void Userdef_USB_usb0_function_delay_10us_2 (void)
+{
+ volatile int i;
+ volatile unsigned long tmp;
+
+ /* Wait 1us (Please change for your MCU) */
+ for (i = 0; i < 14; ++i)
+ {
+ tmp = DUMMY_ACCESS;
+ }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_delay_500ns
+* Description : Wait for software for 500ns.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_delay_500ns (void)
+{
+ volatile int i;
+ volatile unsigned long tmp;
+
+ /* Wait 500ns (Please change for your MCU) */
+ /* Wait 500ns I clock 266MHz */
+ tmp = DUMMY_ACCESS;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_start_dma
+* Description : Enables DMA transfer on the information specified by the argument.
+* : Set DMAC register by this function to enable DMA transfer.
+* : After executing this function, USB module is set to start DMA
+* : transfer. DMA transfer should not wait for DMA transfer complete.
+* Arguments : USB_FUNCTION_DMA_t *dma : DMA parameter
+* : typedef struct{
+* : uint32_t fifo; FIFO for using
+* : uint32_t buffer; Start address of transfer source/destination
+* : uint32_t bytes; Transfer size(Byte)
+* : uint32_t dir; Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
+* : uint32_t size; DMA transfer size
+* : } USB_FUNCTION_DMA_t;
+* : uint16_t dfacc ; 0 : cycle steal mode
+* : 1 : 16byte continuous mode
+* : 2 : 32byte continuous mode
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb0_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
+{
+ uint32_t trncount;
+ uint32_t src;
+ uint32_t dst;
+ uint32_t size;
+ uint32_t dir;
+#ifdef CACHE_WRITEBACK
+ uint32_t ptr;
+#endif
+
+ trncount = dma->bytes;
+ dir = dma->dir;
+
+ if (dir == USB_FUNCTION_FIFO2BUF)
+ {
+ /* DxFIFO determination */
+ dst = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB200.D0FIFO.UINT32);
+ }
+ else
+ {
+ src = (uint32_t)(&USB200.D1FIFO.UINT32);
+ }
+ size = dma->size;
+
+ if (size == 0)
+ {
+ src += 3; /* byte access */
+ }
+ else if (size == 1)
+ {
+ src += 2; /* short access */
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+#else
+ size = dma->size;
+
+ if (size == 2)
+ {
+ /* 32bit access */
+ if (dfacc == 2)
+ {
+ /* 32byte access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB200.D0FIFOB0);
+ }
+ else
+ {
+ src = (uint32_t)(&USB200.D1FIFOB0);
+ }
+ }
+ else if (dfacc == 1)
+ {
+ /* 16byte access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB200.D0FIFOB0);
+ }
+ else
+ {
+ src = (uint32_t)(&USB200.D1FIFOB0);
+ }
+ }
+ else
+ {
+ /* normal access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB200.D0FIFO.UINT32);
+ }
+ else
+ {
+ src = (uint32_t)(&USB200.D1FIFO.UINT32);
+ }
+ }
+ }
+ else if (size == 1)
+ {
+ /* 16bit access */
+ dfacc = 0; /* force normal access */
+
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB200.D0FIFO.UINT32);
+ }
+ else
+ {
+ src = (uint32_t)(&USB200.D1FIFO.UINT32);
+ }
+ src += 2; /* short access */
+ }
+ else
+ {
+ /* 8bit access */
+ dfacc = 0; /* force normal access */
+
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB200.D0FIFO.UINT32);
+ }
+ else
+ {
+ src = (uint32_t)(&USB200.D1FIFO.UINT32);
+ }
+ src += 3; /* byte access */
+ }
+#endif
+ }
+ else
+ {
+ /* DxFIFO determination */
+ src = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+ }
+ size = dma->size;
+
+ if (size == 0)
+ {
+ dst += 3; /* byte access */
+ }
+ else if (size == 1)
+ {
+ dst += 2; /* short access */
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+#else
+ size = dma->size;
+
+ if (size == 2)
+ {
+ /* 32bit access */
+ if (dfacc == 2)
+ {
+ /* 32byte access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB200.D0FIFOB0);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB200.D1FIFOB0);
+ }
+ }
+ else if (dfacc == 1)
+ {
+ /* 16byte access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB200.D0FIFOB0);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB200.D1FIFOB0);
+ }
+ }
+ else
+ {
+ /* normal access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+ }
+ }
+ }
+ else if (size == 1)
+ {
+ /* 16bit access */
+ dfacc = 0; /* force normal access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+ }
+ dst += 2; /* short access */
+ }
+ else
+ {
+ /* 8bit access */
+ dfacc = 0; /* force normal access */
+
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB200.D0FIFO.UINT32);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB200.D1FIFO.UINT32);
+ }
+ dst += 3; /* byte access */
+ }
+#endif
+ }
+
+#ifdef CACHE_WRITEBACK
+ ptr = (uint32_t)dma->buffer;
+
+ if ((ptr & 0x20000000ul) == 0)
+ {
+ io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
+ }
+#endif
+
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ usb0_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
+ }
+ else
+ {
+ usb0_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_dmac0
+* Description : Enables DMA transfer on the information specified by the argument.
+* Arguments : uint32_t src : src address
+* : uint32_t dst : dst address
+* : uint32_t count : transfer byte
+* : uint32_t size : transfer size
+* : uint32_t dir : direction
+* : uint32_t fifo : FIFO(D0FIFO or D1FIFO)
+* : uint16_t dfacc : 0 : normal access
+* : : 1 : 16byte access
+* : : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
+ uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+ dmac_transinfo_t trans_info;
+ uint32_t request_factor = 0;
+ int32_t ret;
+
+ /* ==== Variable setting for DMAC initialization ==== */
+ trans_info.src_addr = (uint32_t)src; /* Start address of transfer source */
+ trans_info.dst_addr = (uint32_t)dst; /* Start address of transfer destination */
+ trans_info.count = (uint32_t)count; /* Total byte count to be transferred */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (size == 0)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
+ }
+ else if (size == 1)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
+ }
+ else if (size == 2)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
+ }
+ else
+ {
+ printf("size error!!\n");
+ }
+#else
+ if (dfacc == 2)
+ {
+ /* 32byte access */
+ trans_info.src_size = DMAC_TRANS_SIZE_256; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_256; /* Transfer destination transfer size */
+ }
+ else if (dfacc == 1)
+ {
+ /* 16byte access */
+ trans_info.src_size = DMAC_TRANS_SIZE_128; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_128; /* Transfer destination transfer size */
+ }
+ else
+ {
+ /* normal access */
+ if (size == 0)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
+ }
+ else if (size == 1)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
+ }
+ else if (size == 2)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
+ }
+ else
+ {
+ printf("size error!!\n");
+ }
+ }
+#endif
+
+ if (dir == USB_FUNCTION_FIFO2BUF)
+ {
+ request_factor =DMAC_REQ_USB0_DMA0_RX; /* USB_0 channel 0 receive FIFO full */
+ trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer source address */
+ trans_info.daddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer destination address */
+ }
+ else if (dir == USB_FUNCTION_BUF2FIFO)
+ {
+ request_factor =DMAC_REQ_USB0_DMA0_TX; /* USB_0 channel 0 receive FIFO empty */
+ trans_info.saddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer source address */
+ trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer destination address */
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+
+ /* ==== DMAC initialization ==== */
+ usb0_function_DMAC1_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+ DMAC_MODE_REGISTER,
+ DMAC_SAMPLE_SINGLE,
+ request_factor,
+ 0); /* Don't care DMAC_REQ_REQD is setting in
+ usb0_function_DMAC1_PeriReqInit() */
+
+ /* ==== DMAC startup ==== */
+ ret = usb0_function_DMAC1_Open(DMAC_REQ_MODE_PERI);
+ if (ret != 0)
+ {
+ printf("DMAC1 Open error!!\n");
+ }
+
+ return;
+}
+
+/*******************************************************************************
+* Function Name: usb0_function_enable_dmac1
+* Description : Enables DMA transfer on the information specified by the argument.
+* Arguments : uint32_t src : src address
+* : uint32_t dst : dst address
+* : uint32_t count : transfer byte
+* : uint32_t size : transfer size
+* : uint32_t dir : direction
+* : uint32_t fifo : FIFO(D0FIFO or D1FIFO)
+* : uint16_t dfacc : 0 : normal access
+* : : 1 : 16byte access
+* : : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb0_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
+ uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+ dmac_transinfo_t trans_info;
+ uint32_t request_factor = 0;
+ int32_t ret;
+
+ /* ==== Variable setting for DMAC initialization ==== */
+ trans_info.src_addr = (uint32_t)src; /* Start address of transfer source */
+ trans_info.dst_addr = (uint32_t)dst; /* Start address of transfer destination */
+ trans_info.count = (uint32_t)count; /* Total byte count to be transferred */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (size == 0)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
+ }
+ else if (size == 1)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
+ }
+ else if (size == 2)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
+ }
+ else
+ {
+ printf("size error!!\n");
+ }
+#else
+ if (dfacc == 2)
+ {
+ /* 32byte access */
+ trans_info.src_size = DMAC_TRANS_SIZE_256; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_256; /* Transfer destination transfer size */
+ }
+ else if (dfacc == 1)
+ {
+ /* 16byte access */
+ trans_info.src_size = DMAC_TRANS_SIZE_128; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_128; /* Transfer destination transfer size */
+ }
+ else
+ {
+ /* normal access */
+ if (size == 0)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
+ }
+ else if (size == 1)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
+ }
+ else if (size == 2)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
+ }
+ else
+ {
+ printf("size error!!\n");
+ }
+ }
+#endif
+
+ if (dir == USB_FUNCTION_FIFO2BUF)
+ {
+ request_factor =DMAC_REQ_USB0_DMA1_RX; /* USB_0 channel 0 receive FIFO full */
+ trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer source address */
+ trans_info.daddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer destination address */
+ }
+ else if (dir == USB_FUNCTION_BUF2FIFO)
+ {
+ request_factor =DMAC_REQ_USB0_DMA1_TX; /* USB_0 channel 0 receive FIFO empty */
+ trans_info.saddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer source address */
+ trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer destination address */
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+
+ /* ==== DMAC initialization ==== */
+ usb0_function_DMAC2_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+ DMAC_MODE_REGISTER,
+ DMAC_SAMPLE_SINGLE,
+ request_factor,
+ 0); /* Don't care DMAC_REQ_REQD is setting in
+ usb0_function_DMAC1_PeriReqInit() */
+
+ /* ==== DMAC startup ==== */
+ ret = usb0_function_DMAC2_Open(DMAC_REQ_MODE_PERI);
+ if (ret != 0)
+ {
+ printf("DMAC2 Open error!!\n");
+ }
+
+ return;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_stop_dma0
+* Description : Disables DMA transfer.
+* : This function should be executed to DMAC executed at the time
+* : of specification of D0_FIF0_DMA in dma->fifo.
+* Arguments : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+* : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb0_function_stop_dma0 (void)
+{
+ uint32_t remain;
+
+ /* ==== DMAC release ==== */
+ usb0_function_DMAC1_Close(&remain);
+
+ return remain;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb0_function_stop_dma1
+* Description : Disables DMA transfer.
+* : This function should be executed to DMAC executed at the time
+* : of specification of D1_FIF0_DMA in dma->fifo.
+* Arguments : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+* : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb0_function_stop_dma1 (void)
+{
+ uint32_t remain;
+
+ /* ==== DMAC release ==== */
+ usb0_function_DMAC2_Close(&remain);
+
+ return remain;
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function.h Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,171 @@
+/*******************************************************************************
+* 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.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB1_FUNCTION_H
+#define USB1_FUNCTION_H
+
+
+/*******************************************************************************
+Includes <System Includes> , "Project Includes"
+*******************************************************************************/
+#include "devdrv_usb_function_api.h"
+#include "usb_function.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern const uint16_t g_usb1_function_bit_set[];
+extern uint32_t g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint8_t *g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+extern uint16_t g_usb1_function_PipeIgnore[];
+extern uint16_t g_usb1_function_PipeTbl[];
+extern uint16_t g_usb1_function_pipe_status[];
+extern uint32_t g_usb1_function_PipeDataSize[];
+
+extern USB_FUNCTION_DMA_t g_usb1_function_DmaInfo[];
+extern uint16_t g_usb1_function_DmaPipe[];
+extern uint16_t g_usb1_function_DmaBval[];
+extern uint16_t g_usb1_function_DmaStatus[];
+
+extern uint16_t g_usb1_function_CtrZeroLengthFlag;
+
+extern uint16_t g_usb1_function_ConfigNum;
+extern uint16_t g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
+extern uint16_t g_usb1_function_RemoteWakeupFlag;
+extern uint16_t g_usb1_function_TestModeFlag;
+extern uint16_t g_usb1_function_TestModeSelectors;
+
+extern uint16_t g_usb1_function_ReqType;
+extern uint16_t g_usb1_function_ReqTypeType;
+extern uint16_t g_usb1_function_ReqTypeRecip;
+extern uint16_t g_usb1_function_ReqRequest;
+extern uint16_t g_usb1_function_ReqValue;
+extern uint16_t g_usb1_function_ReqIndex;
+extern uint16_t g_usb1_function_ReqLength;
+
+extern uint16_t g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+extern uint16_t g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+extern uint16_t g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+/* ==== common ==== */
+void usb1_function_dma_stop_d0(uint16_t pipe, uint32_t remain);
+void usb1_function_dma_stop_d1(uint16_t pipe, uint32_t remain);
+uint16_t usb1_function_is_hispeed(void);
+uint16_t usb1_function_is_hispeed_enable(void);
+uint16_t usb1_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb1_function_write_buffer(uint16_t pipe);
+uint16_t usb1_function_write_buffer_c(uint16_t pipe);
+uint16_t usb1_function_write_buffer_d0(uint16_t pipe);
+uint16_t usb1_function_write_buffer_d1(uint16_t pipe);
+void usb1_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb1_function_read_buffer(uint16_t pipe);
+uint16_t usb1_function_read_buffer_c(uint16_t pipe);
+uint16_t usb1_function_read_buffer_d0(uint16_t pipe);
+uint16_t usb1_function_read_buffer_d1(uint16_t pipe);
+uint16_t usb1_function_change_fifo_port(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void usb1_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void usb1_function_set_curpipe2(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc);
+uint16_t usb1_function_get_mbw(uint32_t trncount, uint32_t dtptr);
+uint16_t usb1_function_read_dma(uint16_t pipe);
+void usb1_function_brdy_int(uint16_t status, uint16_t int_enb);
+void usb1_function_nrdy_int(uint16_t status, uint16_t int_enb);
+void usb1_function_bemp_int(uint16_t status, uint16_t int_enb);
+void usb1_function_setting_interrupt(uint8_t level);
+void usb1_function_reset_module(uint16_t clockmode);
+uint16_t usb1_function_get_buf_size(uint16_t pipe);
+uint16_t usb1_function_get_mxps(uint16_t pipe);
+void usb1_function_clear_brdy_sts(uint16_t pipe);
+void usb1_function_clear_bemp_sts(uint16_t pipe);
+void usb1_function_clear_nrdy_sts(uint16_t pipe);
+void usb1_function_set_pid_buf(uint16_t pipe);
+void usb1_function_set_pid_nak(uint16_t pipe);
+void usb1_function_set_pid_stall(uint16_t pipe);
+void usb1_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb1_function_get_pid(uint16_t pipe);
+void usb1_function_set_sqclr(uint16_t pipe);
+void usb1_function_set_sqset(uint16_t pipe);
+void usb1_function_set_csclr(uint16_t pipe);
+void usb1_function_aclrm(uint16_t pipe);
+void usb1_function_set_aclrm(uint16_t pipe);
+void usb1_function_clr_aclrm(uint16_t pipe);
+uint16_t usb1_function_get_sqmon(uint16_t pipe);
+uint16_t usb1_function_get_inbuf(uint16_t pipe);
+
+/* ==== function ==== */
+void usb1_function_init_status(void);
+void usb1_function_InitModule(uint16_t mode);
+uint16_t usb1_function_CheckVBUStaus(void);
+void usb1_function_USB_FUNCTION_Attach(void);
+void usb1_function_USB_FUNCTION_Detach(void);
+void usb1_function_USB_FUNCTION_BusReset(void);
+void usb1_function_USB_FUNCTION_Resume(void);
+void usb1_function_USB_FUNCTION_Suspend(void);
+void usb1_function_USB_FUNCTION_TestMode(void);
+void usb1_function_ResetDCP(void);
+void usb1_function_ResetEP(uint16_t num);
+uint16_t usb1_function_EpToPipe(uint16_t ep);
+void usb1_function_InitEPTable(uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num);
+uint16_t usb1_function_GetConfigNum(void);
+uint16_t usb1_function_GetAltNum(uint16_t Con_Num, uint16_t Int_Num);
+uint16_t usb1_function_CheckRemoteWakeup(void);
+void usb1_function_clear_alt(void);
+void usb1_function_clear_pipe_tbl(void);
+void usb1_function_clear_ep_table_index(void);
+uint16_t usb1_function_GetInterfaceNum(uint16_t num);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* USB1_FUNCTION_H */
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_api.h Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,104 @@
+/*******************************************************************************
+* 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_api.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB1_FUNCTION_API_H
+#define USB1_FUNCTION_API_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Includes <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Variable Externs
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void usb1_api_function_init(uint8_t int_level, uint16_t mode, uint16_t clockmode);
+uint16_t usb1_api_function_IsConfigured(void);
+uint16_t usb1_function_GetDeviceState(void);
+uint16_t usb1_api_function_CtrlReadStart(uint32_t size, uint8_t *data);
+void usb1_api_function_CtrlWriteStart(uint32_t size, uint8_t *data);
+uint16_t usb1_api_function_start_send_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+uint16_t usb1_api_function_check_pipe_status(uint16_t pipe, uint32_t *size);
+void usb1_api_function_clear_pipe_status(uint16_t pipe);
+void usb1_api_function_start_receive_transfer(uint16_t pipe, uint32_t size, uint8_t *data);
+void usb1_api_function_set_pid_buf(uint16_t pipe);
+void usb1_api_function_set_pid_nak(uint16_t pipe);
+void usb1_api_function_set_pid_stall(uint16_t pipe);
+void usb1_api_function_clear_pid_stall(uint16_t pipe);
+uint16_t usb1_api_function_get_pid(uint16_t pipe);
+int32_t usb1_api_function_check_stall(uint16_t pipe);
+void usb1_api_function_set_sqclr(uint16_t pipe);
+void usb1_api_function_set_sqset(uint16_t pipe);
+void usb1_api_function_set_csclr(uint16_t pipe);
+void usb1_api_function_set_curpipe(uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
+void usb1_api_function_clear_brdy_sts(uint16_t pipe);
+void usb1_api_function_clear_bemp_sts(uint16_t pipe);
+void usb1_api_function_clear_nrdy_sts(uint16_t pipe);
+
+void usb1_function_ClearFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_SetFeature(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_SetAddress(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_SetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_SetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_SetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_SynchFrame(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_GetStatus(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_GetDescriptor(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_GetConfiguration(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_GetInterface(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_Resrv_0(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_Resrv_123(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_Resrv_4(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+void usb1_function_Resrv_5(uint16_t type, uint16_t value, uint16_t index, uint16_t length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB1_FUNCTION_API_H */
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* 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_dmacdrv.h
+* $Rev: 1116 $
+* $Date:: 2014-07-09 16:29:19 +0900#$
+* Description : RZ/A1H R7S72100 USB Sample Program
+*******************************************************************************/
+#ifndef USB1_FUNCTION_DMACDRV_H
+#define USB1_FUNCTION_DMACDRV_H
+
+
+/*******************************************************************************
+Includes <System Includes> , "Project Includes"
+*******************************************************************************/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+typedef struct dmac_transinfo
+{
+ uint32_t src_addr; /* Transfer source address */
+ uint32_t dst_addr; /* Transfer destination address */
+ uint32_t count; /* Transfer byte count */
+ uint32_t src_size; /* Transfer source data size */
+ uint32_t dst_size; /* Transfer destination data size */
+ uint32_t saddr_dir; /* Transfer source address direction */
+ uint32_t daddr_dir; /* Transfer destination address direction */
+} dmac_transinfo_t;
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+/* ==== Transfer specification of the sample program ==== */
+#define DMAC_SAMPLE_SINGLE (0) /* Single transfer */
+#define DMAC_SAMPLE_CONTINUATION (1) /* Continuous transfer (use REN bit) */
+
+/* ==== DMA modes ==== */
+#define DMAC_MODE_REGISTER (0) /* Register mode */
+#define DMAC_MODE_LINK (1) /* Link mode */
+
+/* ==== Transfer requests ==== */
+#define DMAC_REQ_MODE_EXT (0) /* External request */
+#define DMAC_REQ_MODE_PERI (1) /* On-chip peripheral module request */
+#define DMAC_REQ_MODE_SOFT (2) /* Auto-request (request by software) */
+
+/* ==== DMAC transfer sizes ==== */
+#define DMAC_TRANS_SIZE_8 (0) /* 8 bits */
+#define DMAC_TRANS_SIZE_16 (1) /* 16 bits */
+#define DMAC_TRANS_SIZE_32 (2) /* 32 bits */
+#define DMAC_TRANS_SIZE_64 (3) /* 64 bits */
+#define DMAC_TRANS_SIZE_128 (4) /* 128 bits */
+#define DMAC_TRANS_SIZE_256 (5) /* 256 bits */
+#define DMAC_TRANS_SIZE_512 (6) /* 512 bits */
+#define DMAC_TRANS_SIZE_1024 (7) /* 1024 bits */
+
+/* ==== Address increment for transferring ==== */
+#define DMAC_TRANS_ADR_NO_INC (1) /* Not increment */
+#define DMAC_TRANS_ADR_INC (0) /* Increment */
+
+/* ==== Method for detecting DMA request ==== */
+#define DMAC_REQ_DET_FALL (0) /* Falling edge detection */
+#define DMAC_REQ_DET_RISE (1) /* Rising edge detection */
+#define DMAC_REQ_DET_LOW (2) /* Low level detection */
+#define DMAC_REQ_DET_HIGH (3) /* High level detection */
+
+/* ==== Request Direction ==== */
+#define DMAC_REQ_DIR_SRC (0) /* DMAREQ is the source/ DMAACK is active when reading */
+#define DMAC_REQ_DIR_DST (1) /* DMAREQ is the destination/ DMAACK is active when writing */
+
+/* ==== Descriptors ==== */
+#define DMAC_DESC_HEADER (0) /* Header */
+#define DMAC_DESC_SRC_ADDR (1) /* Source Address */
+#define DMAC_DESC_DST_ADDR (2) /* Destination Address */
+#define DMAC_DESC_COUNT (3) /* Transaction Byte */
+#define DMAC_DESC_CHCFG (4) /* Channel Confg */
+#define DMAC_DESC_CHITVL (5) /* Channel Interval */
+#define DMAC_DESC_CHEXT (6) /* Channel Extension */
+#define DMAC_DESC_LINK_ADDR (7) /* Link Address */
+
+/* ==== On-chip peripheral module requests ===== */
+typedef enum dmac_request_factor
+{
+ DMAC_REQ_USB0_DMA0_TX, /* USB_0 channel 0 transmit FIFO empty */
+ DMAC_REQ_USB0_DMA0_RX, /* USB_0 channel 0 receive FIFO full */
+ DMAC_REQ_USB0_DMA1_TX, /* USB_0 channel 1 transmit FIFO empty */
+ DMAC_REQ_USB0_DMA1_RX, /* USB_0 channel 1 receive FIFO full */
+ DMAC_REQ_USB1_DMA0_TX, /* USB_1 channel 0 transmit FIFO empty */
+ DMAC_REQ_USB1_DMA0_RX, /* USB_1 channel 0 receive FIFO full */
+ DMAC_REQ_USB1_DMA1_TX, /* USB_1 channel 1 transmit FIFO empty */
+ DMAC_REQ_USB1_DMA1_RX, /* USB_1 channel 1 receive FIFO full */
+} dmac_request_factor_t;
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+void usb1_function_DMAC3_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+ uint32_t request_factor, uint32_t req_direction);
+int32_t usb1_function_DMAC3_Open(uint32_t req);
+void usb1_function_DMAC3_Close(uint32_t *remain);
+void usb1_function_DMAC3_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+void usb1_function_DMAC4_PeriReqInit(const dmac_transinfo_t *trans_info, uint32_t dmamode, uint32_t continuation,
+ uint32_t request_factor, uint32_t req_direction);
+int32_t usb1_function_DMAC4_Open(uint32_t req);
+void usb1_function_DMAC4_Close(uint32_t *remain);
+void usb1_function_DMAC4_Load_Set(uint32_t src_addr, uint32_t dst_addr, uint32_t count);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB1_FUNCTION_DMACDRV_H */
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dataio.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,2932 @@
+/*******************************************************************************
+* 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_dataio.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
+*******************************************************************************/
+static uint16_t g_usb1_function_mbw[(USB_FUNCTION_MAX_PIPE_NO + 1)];
+
+static void usb1_function_start_receive_trns_c(uint16_t pipe, uint32_t size, uint8_t *data);
+static void usb1_function_start_receive_trns_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void usb1_function_start_receive_trns_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static void usb1_function_start_receive_dma_d0(uint16_t pipe, uint32_t size, uint8_t *data);
+static void usb1_function_start_receive_dma_d1(uint16_t pipe, uint32_t size, uint8_t *data);
+static uint16_t usb1_function_read_dma_d0(uint16_t pipe);
+static uint16_t usb1_function_read_dma_d1(uint16_t pipe);
+static uint16_t usb1_function_write_dma_d0(uint16_t pipe);
+static uint16_t usb1_function_write_dma_d1(uint16_t pipe);
+
+static void usb1_function_read_c_fifo(uint16_t pipe, uint16_t count);
+static void usb1_function_write_c_fifo(uint16_t Pipe, uint16_t count);
+static void usb1_function_read_d0_fifo(uint16_t pipe, uint16_t count);
+static void usb1_function_write_d0_fifo(uint16_t pipe, uint16_t count);
+static void usb1_function_read_d1_fifo(uint16_t pipe, uint16_t count);
+static void usb1_function_write_d1_fifo(uint16_t pipe, uint16_t count);
+
+static void usb1_function_clear_transaction_counter(uint16_t pipe);
+static void usb1_function_set_transaction_counter(uint16_t pipe, uint32_t count);
+
+static uint32_t usb1_function_com_get_dmasize(uint32_t trncount, uint32_t dtptr);
+
+static uint16_t usb1_function_set_dfacc_d0(uint16_t mbw, uint32_t count);
+static uint16_t usb1_function_set_dfacc_d1(uint16_t mbw, uint32_t count);
+
+
+/*******************************************************************************
+* Function Name: usb1_function_start_send_transfer
+* Description : Starts the USB data communication using pipe specified by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t status;
+ uint16_t usefifo;
+ uint16_t mbw;
+
+ g_usb1_function_data_count[pipe] = size;
+ g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ usb1_function_clear_bemp_sts(pipe);
+ usb1_function_clear_brdy_sts(pipe);
+ usb1_function_clear_nrdy_sts(pipe);
+
+ mbw = usb1_function_get_mbw(size, (uint32_t)data);
+
+ usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ switch (usefifo)
+ {
+ case USB_FUNCTION_D0FIFO_USE:
+ case USB_FUNCTION_D0FIFO_DMA:
+ usefifo = USB_FUNCTION_D0USE;
+ break;
+
+ case USB_FUNCTION_D1FIFO_USE:
+ case USB_FUNCTION_D1FIFO_DMA:
+ usefifo = USB_FUNCTION_D1USE;
+ break;
+
+ default:
+ usefifo = USB_FUNCTION_CUSE;
+ break;
+ };
+
+ usb1_function_set_curpipe(USB_FUNCTION_PIPE0, usefifo, DEVDRV_USBF_NO, mbw);
+
+ usb1_function_clear_transaction_counter(pipe);
+
+ usb1_function_aclrm(pipe);
+
+ status = usb1_function_write_buffer(pipe);
+
+ if (status != DEVDRV_USBF_FIFOERROR)
+ {
+ usb1_function_set_pid_buf(pipe);
+ }
+
+ return status;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer
+* Description : Writes data in the buffer allocated in the pipe specified by
+* : the argument. The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer (uint16_t pipe)
+{
+ uint16_t status;
+ uint16_t usefifo;
+
+ g_usb1_function_PipeIgnore[pipe] = 0;
+ usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ switch (usefifo)
+ {
+ case USB_FUNCTION_D0FIFO_USE:
+ status = usb1_function_write_buffer_d0(pipe);
+ break;
+
+ case USB_FUNCTION_D1FIFO_USE:
+ status = usb1_function_write_buffer_d1(pipe);
+ break;
+
+ case USB_FUNCTION_D0FIFO_DMA:
+ status = usb1_function_write_dma_d0(pipe);
+ break;
+
+ case USB_FUNCTION_D1FIFO_DMA:
+ status = usb1_function_write_dma_d1(pipe);
+ break;
+
+ default:
+ status = usb1_function_write_buffer_c(pipe);
+ break;
+ };
+
+ switch (status)
+ {
+ case DEVDRV_USBF_WRITING: /* Continue of data write */
+ usb1_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
+ usb1_function_enable_brdy_int(pipe); /* Enable Ready Interrupt */
+ break;
+
+ case DEVDRV_USBF_WRITEEND: /* End of data write */
+ case DEVDRV_USBF_WRITESHRT: /* End of data write */
+ usb1_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ usb1_function_clear_nrdy_sts(pipe);
+ usb1_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
+ /* for last transfer */
+ usb1_function_enable_bemp_int(pipe); /* Enable Empty Interrupt */
+ break;
+
+ case DEVDRV_USBF_WRITEDMA: /* DMA write */
+ usb1_function_clear_nrdy_sts(pipe);
+ usb1_function_enable_nrdy_int(pipe); /* Error (NORES or STALL) */
+ break;
+
+ case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
+ default:
+ usb1_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ usb1_function_disable_bemp_int(pipe); /* Disable Empty Interrupt */
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer_c
+* Description : Writes data in the buffer allocated in the pipe specified in
+* : the argument. Writes data by CPU transfer using CFIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer_c (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+
+ if (g_usb1_function_CtrZeroLengthFlag == 1)
+ {
+ g_usb1_function_CtrZeroLengthFlag = 0; /* Zero Length Packet Flag CLR */
+ return DEVDRV_USBF_WRITEEND;
+ }
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+ if (pipe == USB_FUNCTION_PIPE0)
+ {
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+ }
+ else
+ {
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+ }
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb1_function_get_buf_size(pipe); /* Data buffer size */
+ mxps = usb1_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
+ {
+ status = DEVDRV_USBF_WRITEEND; /* write continues */
+ count = g_usb1_function_data_count[pipe];
+
+ if (count == 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+ }
+ else
+ {
+ status = DEVDRV_USBF_WRITING; /* write continues */
+ count = (uint32_t)size;
+ }
+
+ usb1_function_write_c_fifo(pipe, (uint16_t)count);
+
+ if (g_usb1_function_data_count[pipe] < (uint32_t)size)
+ {
+ g_usb1_function_data_count[pipe] = 0;
+
+ if (RZA_IO_RegRead_16(&USB201.CFIFOCTR, USB_CFIFOCTR_BVAL_SHIFT, USB_CFIFOCTR_BVAL) == 0)
+ {
+ USB201.CFIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
+ g_usb1_function_CtrZeroLengthFlag = 1; /* Zero Length Packet Flag */
+ }
+ }
+ else
+ {
+ g_usb1_function_data_count[pipe] -= count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer_d0
+* Description : Writes data in the buffer allocated in the pipe specified in the argument.
+* : Writes data by CPU transfer using D0FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer_d0 (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb1_function_get_buf_size(pipe); /* Data buffer size */
+ mxps = usb1_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
+ {
+ status = DEVDRV_USBF_WRITEEND; /* write continues */
+ count = g_usb1_function_data_count[pipe];
+
+ if (count == 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+ }
+ else
+ {
+ status = DEVDRV_USBF_WRITING; /* write continues */
+ count = (uint32_t)size;
+ }
+
+ usb1_function_write_d0_fifo(pipe, (uint16_t)count);
+
+ if (g_usb1_function_data_count[pipe] < (uint32_t)size)
+ {
+ g_usb1_function_data_count[pipe] = 0;
+ if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+ {
+ USB201.D0FIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
+ }
+ }
+ else
+ {
+ g_usb1_function_data_count[pipe] -= count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_buffer_d1
+* Description : Writes data in the buffer allocated in the pipe specified in the argument.
+* : Writes data by CPU transfer using D1FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_write_buffer_d1 (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb1_function_get_buf_size(pipe); /* Data buffer size */
+ mxps = usb1_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb1_function_data_count[pipe] <= (uint32_t)size)
+ {
+ status = DEVDRV_USBF_WRITEEND; /* write continues */
+ count = g_usb1_function_data_count[pipe];
+
+ if (count == 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Null Packet is end of write */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+ }
+ else
+ {
+ status = DEVDRV_USBF_WRITING; /* write continues */
+ count = (uint32_t)size;
+ }
+
+ usb1_function_write_d1_fifo(pipe, (uint16_t)count);
+
+ if (g_usb1_function_data_count[pipe] < (uint32_t)size)
+ {
+ g_usb1_function_data_count[pipe] = 0;
+
+ if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+ {
+ USB201.D1FIFOCTR = USB_FUNCTION_BITBVAL; /* Short Packet */
+ }
+ }
+ else
+ {
+ g_usb1_function_data_count[pipe] -= count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_dma_d0
+* Description : Writes data in the buffer allocated in the pipe specified in the argument.
+* : Writes data by DMA transfer using D0FIFO.
+* : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND : Write end
+* : DEVDRV_USBF_WRITESHRT : short data
+* : DEVDRV_USBF_WRITING : Continue of data write
+* : DEVDRV_USBF_WRITEDMA : Write DMA
+* : DEVDRV_USBF_FIFOERROR : FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_write_dma_d0 (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t dfacc = 0;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb1_function_get_buf_size(pipe); /* Data buffer size */
+ count = g_usb1_function_data_count[pipe];
+
+ if (count != 0)
+ {
+ g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe;
+
+ if ((count % size) != 0)
+ {
+ g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 1;
+ }
+ else
+ {
+ g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0;
+ }
+
+ dfacc = usb1_function_set_dfacc_d0(mbw, count);
+
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2; /* 32bit transfer */
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1; /* 16bit transfer */
+ }
+ else
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0; /* 8bit transfer */
+ }
+
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo = USB_FUNCTION_D0FIFO_DMA;
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir = USB_FUNCTION_BUF2FIFO;
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes = count;
+
+ Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+ usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+ RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+ g_usb1_function_data_count[pipe] = 0;
+ g_usb1_function_data_pointer[pipe] += count;
+ status = DEVDRV_USBF_WRITEDMA; /* DMA write */
+ }
+ else
+ {
+ if (RZA_IO_RegRead_16(&USB201.D0FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+ {
+ RZA_IO_RegWrite_16(&USB201.D0FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+ }
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_dma_d1
+* Description : Writes data in the buffer allocated in the pipe specified in the argument.
+* : Writes data by DMA transfer using D1FIFO.
+* : The DMA-ch for using is specified by Userdef_USB_usb1_function_start_dma().
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : DEVDRV_USBF_WRITEEND : Write end
+* : DEVDRV_USBF_WRITESHRT : short data
+* : DEVDRV_USBF_WRITING : Continue of data write
+* : DEVDRV_USBF_WRITEDMA : Write DMA
+* : DEVDRV_USBF_FIFOERROR : FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_write_dma_d1 (uint16_t pipe)
+{
+ uint32_t count;
+ uint16_t size;
+ uint16_t buffer;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t dfacc=0;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ size = usb1_function_get_buf_size(pipe); /* Data buffer size */
+ count = g_usb1_function_data_count[pipe];
+
+ if (count != 0)
+ {
+ g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe;
+ if ((count % size) != 0)
+ {
+ g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 1;
+ }
+ else
+ {
+ g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0;
+ }
+
+ dfacc = usb1_function_set_dfacc_d1(mbw, count);
+
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2; /* 32bit transfer */
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1; /* 16bit transfer */
+ }
+ else
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0; /* 8bit transfer */
+ }
+
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo = USB_FUNCTION_D1FIFO_DMA;
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir = USB_FUNCTION_BUF2FIFO;
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes = count;
+
+ Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+ usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+ RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 1, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+
+ g_usb1_function_data_count[pipe] = 0;
+ g_usb1_function_data_pointer[pipe] += count;
+
+ status = DEVDRV_USBF_WRITEDMA; /* DMA write */
+ }
+ else
+ {
+ if (RZA_IO_RegRead_16(&USB201.D1FIFOCTR, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL) == 0)
+ {
+ RZA_IO_RegWrite_16(&USB201.D1FIFOCTR, 1, USB_DnFIFOCTR_BVAL_SHIFT, USB_DnFIFOCTR_BVAL); /* Short Packet */
+ }
+ status = DEVDRV_USBF_WRITESHRT; /* Short Packet is end of write */
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_transfer
+* Description : Starts USB data reception using the pipe specified in the argument.
+* : The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb1_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t usefifo;
+
+ usb1_function_clear_bemp_sts(pipe);
+ usb1_function_clear_brdy_sts(pipe);
+ usb1_function_clear_nrdy_sts(pipe);
+
+ usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ switch (usefifo)
+ {
+ case USB_FUNCTION_D0FIFO_USE:
+ usb1_function_start_receive_trns_d0(pipe, size, data);
+ break;
+
+ case USB_FUNCTION_D1FIFO_USE:
+ usb1_function_start_receive_trns_d1(pipe, size, data);
+ break;
+
+ case USB_FUNCTION_D0FIFO_DMA:
+ usb1_function_start_receive_dma_d0(pipe, size, data);
+ break;
+
+ case USB_FUNCTION_D1FIFO_DMA:
+ usb1_function_start_receive_dma_d1(pipe, size, data);
+ break;
+
+ default:
+ usb1_function_start_receive_trns_c(pipe, size, data);
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_trns_c
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by CPU transfer using CFIFO.
+* : When storing data in the buffer allocated in the pipe specified in the
+* : argument, BRDY interrupt is generated to read data
+* : in the interrupt.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_trns_c (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb1_function_set_pid_nak(pipe);
+ g_usb1_function_data_count[pipe] = size;
+ g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb1_function_PipeIgnore[pipe] = 0;
+
+ g_usb1_function_PipeDataSize[pipe] = size;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb1_function_get_mbw(size, (uint32_t)data);
+ usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
+ USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+ usb1_function_set_transaction_counter(pipe, size);
+
+ usb1_function_aclrm(pipe);
+
+ usb1_function_enable_nrdy_int(pipe);
+ usb1_function_enable_brdy_int(pipe);
+
+ usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_trns_d0
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by CPU transfer using D0FIFO.
+* : This function does not read data from the buffer.
+* : When storing data in the buffer allocated in the pipe specified
+* : in the argument, BRDY interrupt is generated to read data in the
+* : interrupt.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_trns_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb1_function_set_pid_nak(pipe);
+ g_usb1_function_data_count[pipe] = size;
+ g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb1_function_PipeIgnore[pipe] = 0;
+
+ g_usb1_function_PipeDataSize[pipe] = size;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb1_function_get_mbw(size, (uint32_t)data);
+ usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+ usb1_function_set_transaction_counter(pipe, size);
+
+ usb1_function_aclrm(pipe);
+
+ usb1_function_enable_nrdy_int(pipe);
+ usb1_function_enable_brdy_int(pipe);
+
+ usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_trns_d1
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by CPU transfer using D1FIFO.
+* : This function does not read data from the buffer.
+* : When storing data in the buffer allocated in the pipe specified
+* : in the argument, BRDY interrupt is generated to read data.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_trns_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb1_function_set_pid_nak(pipe);
+ g_usb1_function_data_count[pipe] = size;
+ g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb1_function_PipeIgnore[pipe] = 0;
+
+ g_usb1_function_PipeDataSize[pipe] = size;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb1_function_get_mbw(size, (uint32_t)data);
+ usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+ usb1_function_set_transaction_counter(pipe, size);
+
+ usb1_function_aclrm(pipe);
+
+ usb1_function_enable_nrdy_int(pipe);
+ usb1_function_enable_brdy_int(pipe);
+
+ usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_dma_d0
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by DMA transfer using D0FIFO.
+* : This function does not read data from the buffer.
+* : When storing data in the buffer allocated in the pipe specified
+* : in the argument, delivered read request to DMAC to read data from
+* : the buffer by DMAC.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_dma_d0 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb1_function_set_pid_nak(pipe);
+ g_usb1_function_data_count[pipe] = size;
+ g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb1_function_PipeIgnore[pipe] = 0;
+
+ g_usb1_function_PipeDataSize[pipe] = 0;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb1_function_get_mbw(size, (uint32_t)data);
+ usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+ usb1_function_set_transaction_counter(pipe, size);
+
+ usb1_function_aclrm(pipe);
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ usb1_function_read_dma(pipe);
+
+ usb1_function_enable_nrdy_int(pipe);
+ usb1_function_enable_brdy_int(pipe);
+ }
+ else
+ {
+ usb1_function_enable_nrdy_int(pipe);
+ usb1_function_enable_brdy_int(pipe);
+ }
+
+ usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_start_receive_dma_d1
+* Description : Read data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by DMA transfer using D0FIFO.
+* : This function does not read data from the buffer.
+* : When storing data in the buffer allocated in the pipe specified
+* : in the argument, delivered read request to DMAC to read data from
+* : the buffer by DMAC.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_start_receive_dma_d1 (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb1_function_set_pid_nak(pipe);
+ g_usb1_function_data_count[pipe] = size;
+ g_usb1_function_data_pointer[pipe] = (uint8_t *)data;
+ g_usb1_function_PipeIgnore[pipe] = 0;
+
+ g_usb1_function_PipeDataSize[pipe] = 0;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_WAIT;
+
+ mbw = usb1_function_get_mbw(size, (uint32_t)data);
+ usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+ usb1_function_set_transaction_counter(pipe, size);
+
+ usb1_function_aclrm(pipe);
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ usb1_function_read_dma(pipe);
+
+ usb1_function_enable_nrdy_int(pipe);
+ usb1_function_enable_brdy_int(pipe);
+ }
+ else
+ {
+ usb1_function_enable_nrdy_int(pipe);
+ usb1_function_enable_brdy_int(pipe);
+ }
+
+ usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer
+* Description : Reads data from the buffer allocated in the pipe specified
+* : in the argument.
+* : Uses FIF0 set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer (uint16_t pipe)
+{
+ uint16_t status;
+
+ g_usb1_function_PipeIgnore[pipe] = 0;
+
+ if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+ {
+ status = usb1_function_read_buffer_d0(pipe);
+ }
+ else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+ {
+ status = usb1_function_read_buffer_d1(pipe);
+ }
+ else
+ {
+ status = usb1_function_read_buffer_c(pipe);
+ }
+
+ switch (status)
+ {
+ case USB_FUNCTION_READING: /* Continue of data read */
+ break;
+
+ case USB_FUNCTION_READEND: /* End of data read */
+ case USB_FUNCTION_READSHRT: /* End of data read */
+ usb1_function_disable_brdy_int(pipe);
+ g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ break;
+
+ case USB_FUNCTION_READOVER: /* buffer over */
+ if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_USE)
+ {
+ USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_USE)
+ {
+ USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else
+ {
+ USB201.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ usb1_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+
+ case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
+ default:
+ usb1_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer_c
+* Description : Reads data from the buffer allocated in the pipe specified in the argument.
+* : Reads data by CPU transfer using CFIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer_c (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_CUSE, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb1_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb1_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ count = g_usb1_function_data_count[pipe];
+ }
+ else if (g_usb1_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ USB201.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else
+ {
+ usb1_function_read_c_fifo(pipe, (uint16_t)count);
+ }
+
+ g_usb1_function_data_count[pipe] -= count;
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer_d0
+* Description : Reads data from the buffer allocated in the pipe specified in
+* : the argument.
+* : Reads data by CPU transfer using D0FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer_d0 (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t pipebuf_size;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb1_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb1_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ count = g_usb1_function_data_count[pipe];
+ }
+ else if (g_usb1_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ else
+ {
+ pipebuf_size = usb1_function_get_buf_size(pipe); /* Data buffer size */
+
+ if (count != pipebuf_size)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else
+ {
+ usb1_function_read_d0_fifo(pipe, (uint16_t)count);
+ }
+
+ g_usb1_function_data_count[pipe] -= count;
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_buffer_d1
+* Description : Reads data from the buffer allocated in the pipe specified
+* : in the argument.
+* : Reads data by CPU transfer using D1FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_buffer_d1 (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t pipebuf_size;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb1_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb1_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ count = g_usb1_function_data_count[pipe];
+ }
+ else if (g_usb1_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ else
+ {
+ pipebuf_size = usb1_function_get_buf_size(pipe); /* Data buffer size */
+
+ if (count != pipebuf_size)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ usb1_function_set_pid_nak(pipe); /* Set NAK */
+ }
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ }
+ else
+ {
+ usb1_function_read_d1_fifo(pipe, (uint16_t)count);
+ }
+
+ g_usb1_function_data_count[pipe] -= count;
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_dma
+* Description : Reads data from the buffer allocated in the pipe specified
+* : in the argument.
+* : Reads data by DMA transfer using D0FIFO or D1FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_function_read_dma (uint16_t pipe)
+{
+ uint16_t status;
+
+ g_usb1_function_PipeIgnore[pipe] = 0;
+ if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+ {
+ status = usb1_function_read_dma_d0(pipe);
+ }
+ else
+ {
+ status = usb1_function_read_dma_d1(pipe);
+ }
+
+ switch (status)
+ {
+ case USB_FUNCTION_READING: /* Continue of data read */
+ break;
+
+ case USB_FUNCTION_READZERO: /* End of data read */
+ usb1_function_disable_brdy_int(pipe);
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ break;
+
+ case USB_FUNCTION_READEND: /* End of data read */
+ case USB_FUNCTION_READSHRT: /* End of data read */
+ usb1_function_disable_brdy_int(pipe);
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+ }
+ break;
+
+ case USB_FUNCTION_READOVER: /* buffer over */
+ usb1_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ g_usb1_function_PipeDataSize[pipe] -= g_usb1_function_data_count[pipe];
+ }
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+
+ case DEVDRV_USBF_FIFOERROR: /* FIFO access status */
+ default:
+ usb1_function_disable_brdy_int(pipe); /* Disable Ready Interrupt */
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_FIFOERROR;
+ break;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_dma_d0
+* Description : Writes data in the buffer allocated in the pipe specified
+* : in the argument.
+* : Reads data by DMA transfer using D0FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READZERO ; zero data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_read_dma_d0 (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t dfacc = 0;
+ uint16_t pipebuf_size;
+
+ g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ count = g_usb1_function_data_count[pipe];
+ status = USB_FUNCTION_READING;
+ }
+ else
+ {
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb1_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb1_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ count = g_usb1_function_data_count[pipe];
+ }
+ else if (g_usb1_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ else
+ {
+ pipebuf_size = usb1_function_get_buf_size(pipe); /* Data buffer size */
+ if (count != pipebuf_size)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ status = USB_FUNCTION_READZERO; /* Null Packet receive */
+ }
+ else
+ {
+ usb1_function_set_curpipe(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw);
+ /* transaction counter No set */
+ /* FRDY = 1, DTLN = 0 -> BRDY */
+ }
+ }
+ else
+ {
+ dfacc = usb1_function_set_dfacc_d0(mbw, count);
+
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 2; /* 32bit transfer */
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 1; /* 16bit transfer */
+ }
+ else
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size = 0; /* 8bit transfer */
+ }
+
+ g_usb1_function_DmaPipe[USB_FUNCTION_D0FIFO] = pipe; /* not use in read operation */
+ g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] = 0; /* not use in read operation */
+
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].fifo = USB_FUNCTION_D0FIFO_DMA;
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].dir = USB_FUNCTION_FIFO2BUF;
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+ g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].bytes = count;
+
+ if (status == USB_FUNCTION_READING)
+ {
+ g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSY;
+ }
+ else
+ {
+ g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_BUSYEND;
+ }
+
+ Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO], dfacc);
+
+ usb1_function_set_curpipe2(pipe, USB_FUNCTION_D0DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+ RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
+ 1,
+ USB_DnFIFOSEL_DREQE_SHIFT,
+ USB_DnFIFOSEL_DREQE);
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ g_usb1_function_data_count[pipe] -= count;
+ g_usb1_function_data_pointer[pipe] += count;
+ g_usb1_function_PipeDataSize[pipe] += count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_dma_d1
+* Description : Reads data from the buffer allocated in the pipe specified in
+* : the argument.
+* : Reads data by DMA transfer using D1FIFO.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : USB_FUNCTION_READEND ; Read end
+* : USB_FUNCTION_READSHRT ; short data
+* : USB_FUNCTION_READZERO ; zero data
+* : USB_FUNCTION_READING ; Continue of data read
+* : USB_FUNCTION_READOVER ; buffer over
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+static uint16_t usb1_function_read_dma_d1 (uint16_t pipe)
+{
+ uint32_t count;
+ uint32_t dtln;
+ uint16_t buffer;
+ uint16_t mxps;
+ uint16_t status;
+ uint16_t mbw;
+ uint16_t dfacc = 0;
+ uint16_t pipebuf_size;
+
+ g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[pipe], (uint32_t)g_usb1_function_data_pointer[pipe]);
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ count = g_usb1_function_data_count[pipe];
+ status = USB_FUNCTION_READING;
+ }
+ else
+ {
+ buffer = usb1_function_change_fifo_port(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+ if (buffer == DEVDRV_USBF_FIFOERROR) /* FIFO access status */
+ {
+ return DEVDRV_USBF_FIFOERROR;
+ }
+
+ dtln = (uint32_t)(buffer & USB_FUNCTION_BITDTLN);
+ mxps = usb1_function_get_mxps(pipe); /* Max Packet Size */
+
+ if (g_usb1_function_data_count[pipe] < dtln) /* Buffer Over ? */
+ {
+ status = USB_FUNCTION_READOVER;
+ count = g_usb1_function_data_count[pipe];
+ }
+ else if (g_usb1_function_data_count[pipe] == dtln) /* just Receive Size */
+ {
+ status = USB_FUNCTION_READEND;
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ else /* continue Receive data */
+ {
+ status = USB_FUNCTION_READING;
+ count = dtln;
+ if (count == 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Null Packet receive */
+ }
+
+ if ((count % mxps) != 0)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ else
+ {
+ pipebuf_size = usb1_function_get_buf_size(pipe); /* Data buffer size */
+ if (count != pipebuf_size)
+ {
+ status = USB_FUNCTION_READSHRT; /* Short Packet receive */
+ }
+ }
+ }
+ }
+
+ if (count == 0) /* 0 length packet */
+ {
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Clear BCLR */
+ status = USB_FUNCTION_READZERO; /* Null Packet receive */
+ }
+ else
+ {
+ usb1_function_set_curpipe(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw);
+ /* transaction counter No set */
+ /* FRDY = 1, DTLN = 0 -> BRDY */
+ }
+ }
+ else
+ {
+ dfacc = usb1_function_set_dfacc_d1(mbw, count);
+
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 2; /* 32bit transfer */
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 1; /* 16bit transfer */
+ }
+ else
+ {
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size = 0; /* 8bit transfer */
+ }
+
+ g_usb1_function_DmaPipe[USB_FUNCTION_D1FIFO] = pipe; /* not use in read operation */
+ g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] = 0; /* not use in read operation */
+
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].fifo = USB_FUNCTION_D1FIFO_DMA;
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].dir = USB_FUNCTION_FIFO2BUF;
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].buffer = (uint32_t)g_usb1_function_data_pointer[pipe];
+ g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].bytes = count;
+
+ if (status == USB_FUNCTION_READING)
+ {
+ g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSY;
+ }
+ else
+ {
+ g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_BUSYEND;
+ }
+
+ Userdef_USB_usb1_function_start_dma(&g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO], dfacc);
+
+ usb1_function_set_curpipe2(pipe, USB_FUNCTION_D1DMA, DEVDRV_USBF_NO, mbw, dfacc);
+
+ RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
+ 1,
+ USB_DnFIFOSEL_DREQE_SHIFT,
+ USB_DnFIFOSEL_DREQE);
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ g_usb1_function_data_count[pipe] -= count;
+ g_usb1_function_data_pointer[pipe] += count;
+ g_usb1_function_PipeDataSize[pipe] += count;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_change_fifo_port
+* Description : Allocates FIF0 specified by the argument in the pipe assigned
+* : by the argument. After allocating FIF0, waits in the software
+* : till the corresponding pipe becomes ready.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t fifosel ; Select FIFO
+* : uint16_t isel ; FIFO Access Direction
+* : uint16_t mbw ; FIFO Port Access Bit Width
+* Return Value : DEVDRV_USBF_FIFOERROR ; Error
+* : Others ; CFIFOCTR/D0FIFOCTR/D1FIFOCTR Register Value
+*******************************************************************************/
+uint16_t usb1_function_change_fifo_port (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+ uint16_t buffer;
+ uint32_t loop;
+ volatile uint32_t loop2;
+
+ usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ switch (fifosel)
+ {
+ case USB_FUNCTION_CUSE:
+ buffer = USB201.CFIFOCTR;
+ break;
+
+ case USB_FUNCTION_D0USE:
+ case USB_FUNCTION_D0DMA:
+ buffer = USB201.D0FIFOCTR;
+ break;
+
+ case USB_FUNCTION_D1USE:
+ case USB_FUNCTION_D1DMA:
+ buffer = USB201.D1FIFOCTR;
+ break;
+
+ default:
+ buffer = 0;
+ break;
+ }
+
+ if ((buffer & USB_FUNCTION_BITFRDY) == USB_FUNCTION_BITFRDY)
+ {
+ return buffer;
+ }
+
+ loop2 = 25;
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+
+ return DEVDRV_USBF_FIFOERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_curpipe
+* Description : Allocates FIF0 specified by the argument in the pipe assigned
+* : by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t fifosel ; Select FIFO
+* : uint16_t isel ; FIFO Access Direction
+* : uint16_t mbw ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+ uint16_t buffer;
+ uint32_t loop;
+ volatile uint32_t loop2;
+
+ g_usb1_function_mbw[pipe] = mbw;
+
+ switch (fifosel)
+ {
+ case USB_FUNCTION_CUSE:
+ buffer = USB201.CFIFOSEL;
+ buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+ buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+ USB201.CFIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+ (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(isel | pipe | mbw);
+ USB201.CFIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+ (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ case USB_FUNCTION_D0DMA:
+ case USB_FUNCTION_D0USE:
+ buffer = USB201.D0FIFOSEL;
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+ USB201.D0FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+ (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(pipe | mbw);
+ USB201.D0FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+ (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ case USB_FUNCTION_D1DMA:
+ case USB_FUNCTION_D1USE:
+ buffer = USB201.D1FIFOSEL;
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+ USB201.D1FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+ (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(pipe | mbw);
+ USB201.D1FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) ==
+ (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ /* Cautions !!!
+ * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+ * For details, please look at the data sheet. */
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_curpipe2
+* Description : Allocates FIF0 specified by the argument in the pipe assigned
+* : by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t fifosel ; Select FIFO
+* : uint16_t isel ; FIFO Access Direction
+* : uint16_t mbw ; FIFO Port Access Bit Width
+* : uint16_t dfacc ; DFACC Access mode
+* Return Value : none
+*******************************************************************************/
+void usb1_function_set_curpipe2 (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw, uint16_t dfacc)
+{
+ uint16_t buffer;
+ uint32_t loop;
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ uint32_t dummy;
+#endif
+ volatile uint32_t loop2;
+
+ g_usb1_function_mbw[pipe] = mbw;
+
+ switch (fifosel)
+ {
+ case USB_FUNCTION_CUSE:
+ buffer = USB201.CFIFOSEL;
+ buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE);
+ buffer |= (uint16_t)(~isel & USB_FUNCTION_BITISEL);
+ USB201.CFIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+ (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+ {
+ break;
+ }
+
+ loop2 = 100;
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ buffer &= (uint16_t)~(USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(isel | pipe | mbw);
+ USB201.CFIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.CFIFOSEL & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)) ==
+ (buffer & (USB_FUNCTION_BITISEL | USB_FUNCTION_BITCURPIPE)))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ case USB_FUNCTION_D0DMA:
+ case USB_FUNCTION_D0USE:
+ buffer = USB201.D0FIFOSEL;
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+ if (dfacc != 0)
+ {
+ buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+ }
+#else
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+ USB201.D0FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (dfacc != 0)
+ {
+ dummy = USB201.D0FIFO.UINT32;
+ }
+#endif
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(pipe | mbw);
+ USB201.D0FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.D0FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ case USB_FUNCTION_D1DMA:
+ case USB_FUNCTION_D1USE:
+ buffer = USB201.D1FIFOSEL;
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+
+ if (dfacc != 0)
+ {
+ buffer |= (uint16_t)(USB_FUNCTION_BITMBW_32);
+ }
+#else
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE);
+#endif
+ USB201.D1FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+#ifdef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (dfacc != 0)
+ {
+ dummy = USB201.D1FIFO.UINT32;
+ loop = dummy; // avoid warning.
+ }
+#endif
+ buffer &= (uint16_t)~(USB_FUNCTION_BITCURPIPE | USB_FUNCTION_BITMBW);
+ buffer |= (uint16_t)(pipe | mbw);
+ USB201.D1FIFOSEL = buffer;
+
+ for (loop = 0; loop < 4; loop++)
+ {
+ if ((USB201.D1FIFOSEL & USB_FUNCTION_BITCURPIPE) == (buffer & USB_FUNCTION_BITCURPIPE))
+ {
+ break;
+ }
+
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ /* Cautions !!!
+ * Depending on the external bus speed of CPU, you may need to wait for 450ns here.
+ * For details, please look at the data sheet. */
+ loop2 = 100;
+
+ while (loop2-- > 0)
+ {
+ /* wait */
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_c_fifo
+* Description : Writes data in CFIFO.
+* : Writes data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating CFIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb1_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_write_c_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ USB201.CFIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
+ g_usb1_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)(count / 2); even; --even)
+ {
+ USB201.CFIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
+ g_usb1_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)(count / 4); even; --even)
+ {
+ USB201.CFIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
+ g_usb1_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_c_fifo
+* Description : Reads data from CFIFO.
+* : Reads data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating CFIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb1_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_read_c_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ *g_usb1_function_data_pointer[pipe] = USB201.CFIFO.UINT8[HH];
+ g_usb1_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)((count + 1) / 2); even; --even)
+ {
+ *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT16[H];
+ g_usb1_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)((count + 3) / 4); even; --even)
+ {
+ *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.CFIFO.UINT32;
+ g_usb1_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_d0_fifo
+* Description : Writes data in D0FIFO.
+* : Writes data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating CFIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb1_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_write_d0_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ USB201.D0FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
+ g_usb1_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)(count / 2); even; --even)
+ {
+ USB201.D0FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
+ g_usb1_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)(count / 4); even; --even)
+ {
+ USB201.D0FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
+ g_usb1_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_d0_fifo
+* Description : Reads data from D0FIFO.
+* : Reads data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating DOFIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb1_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_read_d0_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ *g_usb1_function_data_pointer[pipe] = USB201.D0FIFO.UINT8[HH];
+ g_usb1_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)((count + 1) / 2); even; --even)
+ {
+ *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT16[H];
+ g_usb1_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)((count + 3) / 4); even; --even)
+ {
+ *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D0FIFO.UINT32;
+ g_usb1_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_write_d1_fifo
+* Description : Writes data in D1FIFO.
+* : Writes data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating D1FIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb1_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_write_d1_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ USB201.D1FIFO.UINT8[HH] = *g_usb1_function_data_pointer[pipe];
+ g_usb1_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)(count / 2); even; --even)
+ {
+ USB201.D1FIFO.UINT16[H] = *((uint16_t *)g_usb1_function_data_pointer[pipe]);
+ g_usb1_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)(count / 4); even; --even)
+ {
+ USB201.D1FIFO.UINT32 = *((uint32_t *)g_usb1_function_data_pointer[pipe]);
+ g_usb1_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_read_d1_fifo
+* Description : Reads data from D1FIFO.
+* : Reads data by BYTE/WORD/LONG according to access size
+* : to the pipe specified by the arguments.
+* : Before executing this function, allocating D1FIF0 in the specified pipe
+* : should be completed.
+* : Before executing this function, access size to the specified pipe
+* : should be fixed and set in g_usb1_function_mbw[].
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t count ; Data Size(Byte)
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_read_d1_fifo (uint16_t pipe, uint16_t count)
+{
+ uint16_t even;
+
+ if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_8)
+ {
+ for (even = count; even; --even)
+ {
+ *g_usb1_function_data_pointer[pipe] = USB201.D1FIFO.UINT8[HH];
+ g_usb1_function_data_pointer[pipe] += 1;
+ }
+ }
+ else if (g_usb1_function_mbw[pipe] == USB_FUNCTION_BITMBW_16)
+ {
+ for (even = (uint16_t)((count + 1) / 2); even; --even)
+ {
+ *((uint16_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT16[H];
+ g_usb1_function_data_pointer[pipe] += 2;
+ }
+ }
+ else
+ {
+ for (even = (uint16_t)((count + 3) / 4); even; --even)
+ {
+ *((uint32_t *)g_usb1_function_data_pointer[pipe]) = USB201.D1FIFO.UINT32;
+ g_usb1_function_data_pointer[pipe] += 4;
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_com_get_dmasize
+* Description : Calculates access width of DMA transfer by the argument to
+* : return as the Return Value.
+* Arguments : uint32_t trncount : transfer byte
+* : uint32_t dtptr : transfer data pointer
+* Return Value : DMA transfer size : 0 8bit
+* : : 1 16bit
+* : : 2 32bit
+*******************************************************************************/
+static uint32_t usb1_function_com_get_dmasize (uint32_t trncount, uint32_t dtptr)
+{
+ uint32_t size;
+
+ if (((trncount & 0x0001) != 0) || ((dtptr & 0x00000001) != 0))
+ {
+ /* When transfer byte count is odd */
+ /* or transfer data area is 8-bit alignment */
+ size = 0; /* 8bit */
+ }
+ else if (((trncount & 0x0003) != 0) || ((dtptr & 0x00000003) != 0))
+ {
+ /* When the transfer byte count is multiples of 2 */
+ /* or the transfer data area is 16-bit alignment */
+ size = 1; /* 16bit */
+ }
+ else
+ {
+ /* When the transfer byte count is multiples of 4 */
+ /* or the transfer data area is 32-bit alignment */
+ size = 2; /* 32bit */
+ }
+
+ return size;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_get_mbw
+* Description : Calculates access width of DMA to return the value set in MBW.
+* Arguments : uint32_t trncount : transfer byte
+* : uint32_t dtptr : transfer data pointer
+* Return Value : FIFO transfer size : USB_FUNCTION_BITMBW_8 8bit
+* : : USB_FUNCTION_BITMBW_16 16bit
+* : : USB_FUNCTION_BITMBW_32 32bit
+*******************************************************************************/
+uint16_t usb1_function_get_mbw (uint32_t trncount, uint32_t dtptr)
+{
+ uint32_t size;
+ uint16_t mbw;
+
+ size = usb1_function_com_get_dmasize(trncount, dtptr);
+
+ if (size == 0)
+ {
+ /* 8bit */
+ mbw = USB_FUNCTION_BITMBW_8;
+ }
+ else if (size == 1)
+ {
+ /* 16bit */
+ mbw = USB_FUNCTION_BITMBW_16;
+ }
+ else
+ {
+ /* 32bit */
+ mbw = USB_FUNCTION_BITMBW_32;
+ }
+
+ return mbw;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_transaction_counter
+* Description : Sets transaction counter by the argument(PIPEnTRN).
+* : Clears transaction before setting to enable transaction counter setting.
+* Arguments : uint16_t pipe ; Pipe number
+* : uint32_t bsize : Data transfer size
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_set_transaction_counter (uint16_t pipe, uint32_t bsize)
+{
+ uint16_t mxps;
+ uint16_t cnt;
+
+ if (bsize == 0)
+ {
+ return;
+ }
+
+ mxps = usb1_function_get_mxps(pipe); /* Max Packet Size */
+
+ if ((bsize % mxps) == 0)
+ {
+ cnt = (uint16_t)(bsize / mxps);
+ }
+ else
+ {
+ cnt = (uint16_t)((bsize / mxps) + 1);
+ }
+
+ switch (pipe)
+ {
+ case USB_FUNCTION_PIPE1:
+ RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPE1TRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE2:
+ RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPE2TRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE3:
+ RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPE3TRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE4:
+ RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPE4TRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE5:
+ RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPE5TRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPE9:
+ RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPE9TRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEA:
+ RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPEATRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEB:
+ RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPEBTRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEC:
+ RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPECTRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPED:
+ RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPEDTRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEE:
+ RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPEETRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ case USB_FUNCTION_PIPEF:
+ RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ USB201.PIPEFTRN = cnt;
+ RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+ 1,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_transaction_counter
+* Description : Clears the transaction counter by the argument.
+* : After executing this function, the transaction counter is invalid.
+* Arguments : uint16_t pipe ; Pipe number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_transaction_counter (uint16_t pipe)
+{
+ switch (pipe)
+ {
+ case USB_FUNCTION_PIPE1:
+ RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPE1TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE2:
+ RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPE2TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE3:
+ RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPE3TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE4:
+ RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPE4TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE5:
+ RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPE5TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPE9:
+ RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPE9TRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEA:
+ RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPEATRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEB:
+ RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPEBTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEC:
+ RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPECTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPED:
+ RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPEDTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEE:
+ RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPEETRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ case USB_FUNCTION_PIPEF:
+ RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+ 0,
+ USB_PIPEnTRE_TRENB_SHIFT,
+ USB_PIPEnTRE_TRENB);
+ RZA_IO_RegWrite_16(&USB201.PIPEFTRE,
+ 1,
+ USB_PIPEnTRE_TRCLR_SHIFT,
+ USB_PIPEnTRE_TRCLR);
+ break;
+
+ default:
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_stop_transfer
+* Description : Stops the USB transfer in the pipe specified by the argument.
+* : After stopping the USB transfer, clears the buffer allocated in
+* : the pipe.
+* : After executing this function, allocation in FIF0 becomes USB_FUNCTION_PIPE0;
+* : invalid. After executing this function, BRDY/NRDY/BEMP interrupt
+* : in the corresponding pipe becomes invalid. Sequence bit is also
+* : cleared.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : none
+*******************************************************************************/
+void usb1_function_stop_transfer (uint16_t pipe)
+{
+ uint16_t usefifo;
+ uint32_t remain;
+ uint16_t fifo;
+
+ usb1_function_set_pid_nak(pipe);
+
+ usefifo = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+ switch (usefifo)
+ {
+ case USB_FUNCTION_D0FIFO_USE:
+ usb1_function_clear_transaction_counter(pipe);
+ USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_D0USE;
+ break;
+
+ case USB_FUNCTION_D1FIFO_USE:
+ usb1_function_clear_transaction_counter(pipe);
+ USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_D1USE;
+ break;
+
+ case USB_FUNCTION_D0FIFO_DMA:
+ remain = Userdef_USB_usb1_function_stop_dma0();
+ usb1_function_dma_stop_d0(pipe, remain);
+ usb1_function_clear_transaction_counter(pipe);
+ USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_D0DMA;
+ break;
+
+ case USB_FUNCTION_D1FIFO_DMA:
+ remain = Userdef_USB_usb1_function_stop_dma1();
+ usb1_function_dma_stop_d1(pipe, remain);
+ usb1_function_clear_transaction_counter(pipe);
+ USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_D1DMA;
+ break;
+
+ default:
+ usb1_function_clear_transaction_counter(pipe);
+ USB201.CFIFOCTR = USB_FUNCTION_BITBCLR; /* Buffer Clear */
+ fifo = USB_FUNCTION_CUSE;
+ break;
+ }
+
+ usb1_function_set_curpipe(USB_FUNCTION_PIPE0, fifo, DEVDRV_USBF_NO, USB_FUNCTION_BITMBW_16);
+
+ /* Interrupt of pipe set is disabled */
+ usb1_function_disable_brdy_int(pipe);
+ usb1_function_disable_nrdy_int(pipe);
+ usb1_function_disable_bemp_int(pipe);
+
+ usb1_function_aclrm(pipe);
+ usb1_function_set_csclr(pipe);
+
+ if ( g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT )
+ {
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_dfacc_d0
+* Description : Sets the DFACC setting value in D0FIFO using the transfer size.
+* Arguments : uint16_t mbw ; MBW
+* : uint16_t count ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb1_function_set_dfacc_d0 (uint16_t mbw, uint32_t count)
+{
+ uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+#else
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ if ((count % 32) == 0)
+ {
+ /* 32byte transfer */
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 2,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 2;
+ }
+ else if ((count % 16) == 0)
+ {
+ /* 16byte transfer */
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 1,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 1;
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D0FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+#endif
+ return dfacc;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_set_dfacc_d1
+* Description : Set the DFACC setting value in D1FIFO using the transfer size.
+* Arguments : uint16_t mbw ; MBW
+* : uint16_t count ; data count
+* Return Value : DFACC Access mode
+*******************************************************************************/
+static uint16_t usb1_function_set_dfacc_d1 (uint16_t mbw, uint32_t count)
+{
+ uint16_t dfacc = 0;
+
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+#else
+ if (mbw == USB_FUNCTION_BITMBW_32)
+ {
+ if ((count % 32) == 0)
+ {
+ /* 32byte transfer */
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 2,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 2;
+ }
+ else if ((count % 16) == 0)
+ {
+ /* 16byte transfer */
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 1,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 1;
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+ }
+ else if (mbw == USB_FUNCTION_BITMBW_16)
+ {
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_DFACC_SHIFT,
+ USB_DnFBCFG_DFACC);
+ RZA_IO_RegWrite_16(&USB201.D1FBCFG,
+ 0,
+ USB_DnFBCFG_TENDE_SHIFT,
+ USB_DnFBCFG_TENDE);
+ dfacc = 0;
+ }
+#endif
+
+ return dfacc;
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dma.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,346 @@
+/*******************************************************************************
+* 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_dma.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
+*******************************************************************************/
+static void usb1_function_dmaint(uint16_t fifo);
+static void usb1_function_dmaint_buf2fifo(uint16_t pipe);
+static void usb1_function_dmaint_fifo2buf(uint16_t pipe);
+
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_stop_d0
+* Description : D0FIFO DMA stop
+* Arguments : uint16_t pipe : pipe number
+* : uint32_t remain : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_stop_d0 (uint16_t pipe, uint32_t remain)
+{
+ uint16_t dtln;
+ uint16_t dfacc;
+ uint16_t buffer;
+ uint16_t sds_b = 1;
+
+ dfacc = RZA_IO_RegRead_16(&USB201.D0FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+ if (dfacc == 2)
+ {
+ sds_b = 32;
+ }
+ else if (dfacc == 1)
+ {
+ sds_b = 16;
+ }
+ else
+ {
+ if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 2)
+ {
+ sds_b = 4;
+ }
+ else if (g_usb1_function_DmaInfo[USB_FUNCTION_D0FIFO].size == 1)
+ {
+ sds_b = 2;
+ }
+ else
+ {
+ sds_b = 1;
+ }
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+ {
+ buffer = USB201.D0FIFOCTR;
+ dtln = (buffer & USB_FUNCTION_BITDTLN);
+
+ if ((dtln % sds_b) != 0)
+ {
+ remain += (sds_b - (dtln % sds_b));
+ }
+ g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
+ g_usb1_function_data_count[pipe] = remain;
+ }
+ }
+
+ RZA_IO_RegWrite_16(&USB201.D0FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_stop_d1
+* Description : D1FIFO DMA stop
+* Arguments : uint16_t pipe : pipe number
+* : uint32_t remain : transfer byte
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_stop_d1 (uint16_t pipe, uint32_t remain)
+{
+ uint16_t dtln;
+ uint16_t dfacc;
+ uint16_t buffer;
+ uint16_t sds_b = 1;
+
+ dfacc = RZA_IO_RegRead_16(&USB201.D1FBCFG, USB_DnFBCFG_DFACC_SHIFT, USB_DnFBCFG_DFACC);
+
+ if (dfacc == 2)
+ {
+ sds_b = 32;
+ }
+ else if (dfacc == 1)
+ {
+ sds_b = 16;
+ }
+ else
+ {
+ if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 2)
+ {
+ sds_b = 4;
+ }
+ else if (g_usb1_function_DmaInfo[USB_FUNCTION_D1FIFO].size == 1)
+ {
+ sds_b = 2;
+ }
+ else
+ {
+ sds_b = 1;
+ }
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 1)
+ {
+ if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+ {
+ buffer = USB201.D1FIFOCTR;
+ dtln = (buffer & USB_FUNCTION_BITDTLN);
+
+ if ((dtln % sds_b) != 0)
+ {
+ remain += (sds_b - (dtln % sds_b));
+ }
+ g_usb1_function_PipeDataSize[pipe] = (g_usb1_function_data_count[pipe] - remain);
+ g_usb1_function_data_count[pipe] = remain;
+ }
+ }
+
+ RZA_IO_RegWrite_16(&USB201.D1FIFOSEL, 0, USB_DnFIFOSEL_DREQE_SHIFT, USB_DnFIFOSEL_DREQE);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_interrupt_d0fifo
+* Description : This function is DMA interrupt handler entry.
+* : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
+* : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D0FIFO_DMA is
+* : specified by dma->fifo.
+* : Register this function as DMA complete interrupt.
+* Arguments : uint32_t int_sense ; Interrupts detection mode
+* : ; INTC_LEVEL_SENSITIVE : Level sense
+* : ; INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_interrupt_d0fifo (uint32_t int_sense)
+{
+ usb1_function_dmaint(USB_FUNCTION_D0FIFO);
+ g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dma_interrupt_d1fifo
+* Description : This function is DMA interrupt handler entry.
+* : Execute usb1_function_dmaint() after disabling DMA interrupt in this function.
+* : Disable DMA interrupt to DMAC executed when USB_FUNCTION_D1FIFO_DMA is
+* : specified by dma->fifo.
+* : Register this function as DMA complete interrupt.
+* Arguments : uint32_t int_sense ; Interrupts detection mode
+* : ; INTC_LEVEL_SENSITIVE : Level sense
+* : ; INTC_EDGE_TRIGGER : Edge trigger
+* Return Value : none
+*******************************************************************************/
+void usb1_function_dma_interrupt_d1fifo (uint32_t int_sense)
+{
+ usb1_function_dmaint(USB_FUNCTION_D1FIFO);
+ g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] = USB_FUNCTION_DMA_READY;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dmaint
+* Description : This function is DMA transfer end interrupt
+* Arguments : uint16_t fifo ; fifo number
+* : ; USB_FUNCTION_D0FIFO
+* : ; USB_FUNCTION_D1FIFO
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_dmaint (uint16_t fifo)
+{
+ uint16_t pipe;
+
+ pipe = g_usb1_function_DmaPipe[fifo];
+
+ if (g_usb1_function_DmaInfo[fifo].dir == USB_FUNCTION_BUF2FIFO)
+ {
+ usb1_function_dmaint_buf2fifo(pipe);
+ }
+ else
+ {
+ usb1_function_dmaint_fifo2buf(pipe);
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dmaint_fifo2buf
+* Description : Executes read completion from FIFO by DMAC.
+* Arguments : uint16_t pipe : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_dmaint_fifo2buf (uint16_t pipe)
+{
+ uint32_t remain;
+ uint16_t useport;
+
+ if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_DONE)
+ {
+ useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ if (useport == USB_FUNCTION_D0FIFO_DMA)
+ {
+ remain = Userdef_USB_usb1_function_stop_dma0();
+ usb1_function_dma_stop_d0(pipe, remain);
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] == USB_FUNCTION_DMA_BUSYEND)
+ {
+ USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ else
+ {
+ usb1_function_enable_brdy_int(pipe);
+ }
+ }
+ }
+ else
+ {
+ remain = Userdef_USB_usb1_function_stop_dma1();
+ usb1_function_dma_stop_d1(pipe, remain);
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] == USB_FUNCTION_DMA_BUSYEND)
+ {
+ USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ else
+ {
+ usb1_function_enable_brdy_int(pipe);
+ }
+ }
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_dmaint_buf2fifo
+* Description : Executes write completion in FIFO by DMAC.
+* Arguments : uint16_t pipe : pipe number
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_dmaint_buf2fifo (uint16_t pipe)
+{
+ uint32_t remain;
+ uint16_t useport;
+
+ useport = (uint16_t)(g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+
+ if (useport == USB_FUNCTION_D0FIFO_DMA)
+ {
+ remain = Userdef_USB_usb1_function_stop_dma0();
+ usb1_function_dma_stop_d0(pipe, remain);
+
+ if (g_usb1_function_DmaBval[USB_FUNCTION_D0FIFO] != 0)
+ {
+ RZA_IO_RegWrite_16(&USB201.D0FIFOCTR,
+ 1,
+ USB_DnFIFOCTR_BVAL_SHIFT,
+ USB_DnFIFOCTR_BVAL);
+ }
+ }
+ else
+ {
+ remain = Userdef_USB_usb1_function_stop_dma1();
+ usb1_function_dma_stop_d1(pipe, remain);
+
+ if (g_usb1_function_DmaBval[USB_FUNCTION_D1FIFO] != 0)
+ {
+ RZA_IO_RegWrite_16(&USB201.D1FIFOCTR,
+ 1,
+ USB_DnFIFOCTR_BVAL_SHIFT,
+ USB_DnFIFOCTR_BVAL);
+ }
+ }
+
+ usb1_function_enable_bemp_int(pipe);
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_intrn.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,249 @@
+/*******************************************************************************
+* 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_intrn.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_brdy_int
+* Description : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
+* : According to the pipe that interrupt is generated in,
+* : reads/writes buffer allocated in the pipe.
+* : This function is executed in the BRDY interrupt handler.
+* : This function clears BRDY interrupt status and BEMP interrupt
+* : status.
+* Arguments : uint16_t Status ; BRDYSTS Register Value
+* : uint16_t Int_enbl ; BRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_brdy_int (uint16_t status, uint16_t int_enb)
+{
+ uint32_t int_sense = 0;
+ uint16_t pipe;
+ uint16_t pipebit;
+
+ for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+ {
+ pipebit = g_usb1_function_bit_set[pipe];
+
+ if ((status & pipebit) && (int_enb & pipebit))
+ {
+ USB201.BRDYSTS = (uint16_t)~pipebit;
+ USB201.BEMPSTS = (uint16_t)~pipebit;
+ if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA)
+ {
+ if (g_usb1_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY)
+ {
+ usb1_function_dma_interrupt_d0fifo(int_sense);
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ usb1_function_read_dma(pipe);
+ usb1_function_disable_brdy_int(pipe);
+ }
+ else
+ {
+ USB201.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ }
+ else if ((g_usb1_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA)
+ {
+ if (g_usb1_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY)
+ {
+ usb1_function_dma_interrupt_d1fifo(int_sense);
+ }
+
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0)
+ {
+ usb1_function_read_dma(pipe);
+ usb1_function_disable_brdy_int(pipe);
+ }
+ else
+ {
+ USB201.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ }
+ else
+ {
+ if (RZA_IO_RegRead_16(&g_usb1_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0)
+ {
+ usb1_function_read_buffer(pipe);
+ }
+ else
+ {
+ usb1_function_write_buffer(pipe);
+ }
+ }
+ }
+ }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_nrdy_int
+* Description : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
+* : Checks NRDY interrupt cause by PID. When the cause if STALL,
+* : regards the pipe state as STALL and ends the processing.
+* : Then the cause is not STALL, increments the error count to
+* : communicate again. When the error count is 3, determines
+* : the pipe state as DEVDRV_USBF_PIPE_NORES and ends the processing.
+* : This function is executed in the NRDY interrupt handler.
+* : This function clears NRDY interrupt status.
+* Arguments : uint16_t status ; NRDYSTS Register Value
+* : uint16_t int_enb ; NRDYENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb1_function_nrdy_int (uint16_t status, uint16_t int_enb)
+{
+ uint16_t pid;
+ uint16_t pipe;
+ uint16_t bitcheck;
+
+ bitcheck = (uint16_t)(status & int_enb);
+
+ USB201.NRDYSTS = (uint16_t)~status;
+
+ for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+ {
+ if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
+ {
+ if (RZA_IO_RegRead_16(&USB201.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1)
+ {
+ if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_WAIT)
+ {
+ pid = usb1_function_get_pid(pipe);
+ if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+ {
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+ }
+ else
+ {
+ g_usb1_function_PipeIgnore[pipe]++;
+ if (g_usb1_function_PipeIgnore[pipe] == 3)
+ {
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_NORES;
+ }
+ else
+ {
+ usb1_function_set_pid_buf(pipe);
+ }
+ }
+ }
+ }
+ else
+ {
+ /* USB Function */
+ }
+ }
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_bemp_int
+* Description : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
+* Arguments : uint16_t status ; BEMPSTS Register Value
+* : uint16_t int_enb ; BEMPENB Register Value
+* Return Value : none
+*******************************************************************************/
+void usb1_function_bemp_int (uint16_t status, uint16_t int_enb)
+{
+ uint16_t pid;
+ uint16_t pipe;
+ uint16_t bitcheck;
+ uint16_t inbuf;
+
+ bitcheck = (uint16_t)(status & int_enb);
+
+ USB201.BEMPSTS = (uint16_t)~status;
+
+ for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+ {
+ if ((bitcheck&g_usb1_function_bit_set[pipe]) == g_usb1_function_bit_set[pipe])
+ {
+ pid = usb1_function_get_pid(pipe);
+
+ if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2))
+ {
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+ }
+ else
+ {
+ inbuf = usb1_function_get_inbuf(pipe);
+
+ if (inbuf == 0)
+ {
+ usb1_function_disable_bemp_int(pipe);
+ usb1_function_set_pid_nak(pipe);
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ }
+ }
+ }
+ }
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_lib.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,2044 @@
+/*******************************************************************************
+* 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 */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_api.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,441 @@
+/*******************************************************************************
+* 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_api.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"
+#include "dev_drv.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_api_function_init
+* Description : Initializes the USB module in the USB function mode.
+* Arguments : uint8_t int_level ; interruput level
+* : uint16_t mode : Speed modes
+* : : USB_FUCNTION_HIGH_SPEED: High-speed device
+* : : USB_FUCNTION_FULL_SPEED: Full-speed device
+* : uint16_t clockmode ; 48MHz ; USBFCLOCK_X1_48MHZ
+* : ; 12MHz ; USBFCLOCK_EXTAL_12MHZ
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_api_function_init (uint8_t int_level, uint16_t mode, uint16_t clockmode)
+{
+ volatile uint8_t dummy_buf;
+
+ CPG.STBCR7 &= 0xfc; /*The clock of USB0/1 modules is permitted */
+ dummy_buf = CPG.STBCR7; /* (Dummy read) */
+
+ usb1_function_setting_interrupt(int_level);
+
+ usb1_function_reset_module(clockmode); /* reset USB module with setting tranciever */
+ /* and HSE=1 */
+
+ usb1_function_init_status(); /* clear variables */
+
+ usb1_function_InitModule(mode); /* select USB Function and Interrupt Enable */
+ /* Detect USB Device to attach or detach */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_api_function_IsConfigured
+* Description : Checks if the USB device is configured to return the result as
+* : the return value.
+* Arguments : none
+* Return Value : DEVDRV_USBF_YES : Configured & Configured Suspend
+* : DEVDRV_USBF_NO : not Configured
+*******************************************************************************/
+uint16_t usb1_api_function_IsConfigured (void)
+{
+ uint16_t dvst;
+
+ dvst = usb1_function_GetDeviceState();
+
+ if ((dvst == USB_FUNCTION_DVST_CONFIGURED) ||
+ (dvst == USB_FUNCTION_DVST_CONFIGURED_SUSPEND))
+ {
+ return DEVDRV_USBF_YES;
+ }
+
+ return DEVDRV_USBF_NO;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_GetDeviceState
+* Description : Returns the state of USB device.
+* Arguments : none
+* Return Value : Device States
+*******************************************************************************/
+uint16_t usb1_function_GetDeviceState (void)
+{
+ uint16_t dvsq;
+ uint16_t dvst;
+
+ dvsq = USB201.INTSTS0;
+ switch (dvsq & USB_FUNCTION_BITDVSQ)
+ {
+ case USB_FUNCTION_DS_POWR: /* Power state *//* power-on */
+ dvst = USB_FUNCTION_DVST_POWERED;
+ break;
+
+ case USB_FUNCTION_DS_DFLT: /* Default state *//* bus-reset */
+ dvst = USB_FUNCTION_DVST_DEFAULT;
+ break;
+
+ case USB_FUNCTION_DS_ADDS: /* Address state */
+ dvst = USB_FUNCTION_DVST_ADDRESS;
+ break;
+
+ case USB_FUNCTION_DS_CNFG: /* Configured state */
+ dvst = USB_FUNCTION_DVST_CONFIGURED;
+ break;
+
+ case USB_FUNCTION_DS_SPD_CNFG: /* Configured Suspend state */
+ dvst = USB_FUNCTION_DVST_CONFIGURED_SUSPEND;
+ break;
+
+ case USB_FUNCTION_DS_SPD_POWR: /* Power Suspend state */
+ case USB_FUNCTION_DS_SPD_DFLT: /* Default Suspend state */
+ case USB_FUNCTION_DS_SPD_ADDR: /* Address Suspend state */
+ dvst = USB_FUNCTION_DVST_SUSPEND;
+ break;
+
+ default: /* error */
+ dvst = USB_FUNCTION_DVST_SUSPEND;
+ break;
+ }
+
+ return dvst;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_start_receive_transfer
+* Description : Starts USB data reception using the pipe specified in the argument.
+* : The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data data Address
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_start_receive_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ usb1_function_start_receive_transfer(pipe, size, data);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_start_send_transfer
+* Description : Starts the USB data communication using pipe specified by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t size ; Data Size
+* : uint8_t *data ; Data data Address
+* Return Value : DEVDRV_USBF_WRITEEND ; Write end
+* : DEVDRV_USBF_WRITESHRT ; short data
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_WRITEDMA ; Write DMA
+* : DEVDRV_USBF_FIFOERROR ; FIFO status
+*******************************************************************************/
+uint16_t usb1_api_function_start_send_transfer (uint16_t pipe, uint32_t size, uint8_t * data)
+{
+ uint16_t status;
+
+ status = usb1_function_start_send_transfer(pipe, size, data);
+
+ return status;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_check_pipe_status
+* Description : Starts USB data reception using the pipe specified in the argument.
+* : The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint32_t *size ; Data Size
+* Return Value : Pipe Status
+*******************************************************************************/
+uint16_t usb1_api_function_check_pipe_status (uint16_t pipe, uint32_t * size)
+{
+ if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_DONE)
+ {
+ *size = g_usb1_function_PipeDataSize[pipe];
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+ return DEVDRV_USBF_PIPE_DONE;
+ }
+ else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_NORES)
+ {
+ *size = 0;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+ return DEVDRV_USBF_PIPE_NORES;
+ }
+ else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_PIPE_STALL)
+ {
+ *size = 0;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+ return DEVDRV_USBF_PIPE_STALL;
+ }
+ else if (g_usb1_function_pipe_status[pipe] == DEVDRV_USBF_FIFOERROR)
+ {
+ *size = 0;
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+
+ return DEVDRV_USBF_FIFOERROR;
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+
+ return g_usb1_function_pipe_status[pipe];
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_clear_pipe_status
+* Description : Starts USB data reception using the pipe specified in the argument.
+* : The FIFO for using is set in the pipe definition table.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : Pipe Status
+*******************************************************************************/
+void usb1_api_function_clear_pipe_status (uint16_t pipe)
+{
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+ g_usb1_function_PipeDataSize[pipe] = 0;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_set_pid_buf (uint16_t pipe)
+{
+ usb1_function_set_pid_buf(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_set_pid_nak (uint16_t pipe)
+{
+ usb1_function_set_pid_nak(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_set_pid_stall (uint16_t pipe)
+{
+ usb1_function_set_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_clear_pid_stall (uint16_t pipe)
+{
+ usb1_function_clear_pid_stall(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_get_pid
+* Description : Returns the pipe state specified by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+uint16_t usb1_api_function_get_pid (uint16_t pipe)
+{
+ uint16_t pid;
+
+ pid = usb1_function_get_pid(pipe);
+
+ return pid;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_check_stall
+* Description :
+* Arguments : uint16_t pipe ; Pipe Number
+* Return Value : PID
+*******************************************************************************/
+int32_t usb1_api_function_check_stall (uint16_t pipe)
+{
+ uint16_t pid;
+
+ pid = usb1_function_get_pid(pipe);
+
+ if ((pid & DEVDRV_USBF_PID_STALL) == DEVDRV_USBF_PID_STALL)
+ {
+ return DEVDRV_USBF_STALL;
+ }
+
+ return DEVDRV_SUCCESS;
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_set_sqclr (uint16_t pipe)
+{
+ usb1_function_set_sqclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_set_sqset (uint16_t pipe)
+{
+ usb1_function_set_sqset(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_set_csclr (uint16_t pipe)
+{
+ usb1_function_set_csclr(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_set_curpipe
+* Description : Allocates FIF0 specifed by the argument in the pipe assigned
+* : by the argument.
+* Arguments : uint16_t pipe ; Pipe Number
+* : uint16_t fifosel ; Select FIFO
+* : uint16_t isel ; FIFO Access Direction
+* : uint16_t mbw ; FIFO Port Access Bit Width
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_set_curpipe (uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw)
+{
+ usb1_function_set_curpipe(pipe, fifosel, isel, mbw);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_clear_brdy_sts (uint16_t pipe)
+{
+ usb1_function_clear_brdy_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_clear_bemp_sts (uint16_t pipe)
+{
+ usb1_function_clear_bemp_sts(pipe);
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_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_api_function_clear_nrdy_sts (uint16_t pipe)
+{
+ usb1_function_clear_nrdy_sts(pipe);
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_controlrw.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,142 @@
+/*******************************************************************************
+* 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_controlrw.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_api_function_CtrlReadStart
+* Description : Executes the USB control read transfer.
+* : USB host controller <- USB device
+* Arguments : uint16_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : DEVDRV_USBF_WRITEEND ; End of data write
+* : DEVDRV_USBF_WRITESHRT ; End of short data write
+* : DEVDRV_USBF_WRITING ; Continue of data write
+* : DEVDRV_USBF_FIFOERROR ; FIFO access error
+*******************************************************************************/
+uint16_t usb1_api_function_CtrlReadStart (uint32_t size, uint8_t * data)
+{
+ uint16_t status;
+ uint16_t mbw;
+
+ usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+ g_usb1_function_data_count[USB_FUNCTION_PIPE0] = size;
+ g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
+ (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
+ usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+ USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+ status = usb1_function_write_buffer_c(USB_FUNCTION_PIPE0);
+
+ /* Peripheral Control sequence */
+ switch (status)
+ {
+ case DEVDRV_USBF_WRITESHRT: /* End of data write */
+ case DEVDRV_USBF_WRITEEND: /* End of data write (not null) */
+ case DEVDRV_USBF_WRITING: /* Continue of data write */
+ usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0); /* Enable Empty Interrupt */
+ usb1_function_set_pid_buf(USB_FUNCTION_PIPE0); /* Set BUF */
+ break;
+
+ case DEVDRV_USBF_FIFOERROR: /* FIFO access error */
+ break;
+
+ default:
+ break;
+ }
+
+ return status; /* End or Err or Continue */
+}
+
+/*******************************************************************************
+* Function Name: usb1_api_function_CtrlWriteStart
+* Description : Executes the USB control write transfer.
+* : USB host controller -> USB device
+* Arguments : uint16_t size ; Data Size
+* : uint8_t *data ; Data Address
+* Return Value : none
+*******************************************************************************/
+void usb1_api_function_CtrlWriteStart (uint32_t size, uint8_t * data)
+{
+ uint16_t mbw;
+
+ usb1_function_set_pid_nak(USB_FUNCTION_PIPE0);
+
+ g_usb1_function_data_count[USB_FUNCTION_PIPE0] = size;
+ g_usb1_function_data_pointer[USB_FUNCTION_PIPE0] = data;
+
+ mbw = usb1_function_get_mbw(g_usb1_function_data_count[USB_FUNCTION_PIPE0],
+ (uint32_t)g_usb1_function_data_pointer[USB_FUNCTION_PIPE0]);
+ usb1_function_set_curpipe(USB_FUNCTION_PIPE0, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_WRITE, mbw);
+ USB201.CFIFOCTR = USB_FUNCTION_BITBCLR;
+
+ usb1_function_enable_brdy_int(USB_FUNCTION_PIPE0);
+ usb1_function_set_pid_buf(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_global.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,144 @@
+/*******************************************************************************
+* 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_global.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
+*******************************************************************************/
+const uint16_t g_usb1_function_bit_set[16] =
+{
+ 0x0001, 0x0002, 0x0004, 0x0008,
+ 0x0010, 0x0020, 0x0040, 0x0080,
+ 0x0100, 0x0200, 0x0400, 0x0800,
+ 0x1000, 0x2000, 0x4000, 0x8000
+};
+
+uint32_t g_usb1_function_data_count[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint8_t * g_usb1_function_data_pointer[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+uint16_t g_usb1_function_PipeIgnore[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_PipeTbl[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipe_status[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint32_t g_usb1_function_PipeDataSize[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+USB_FUNCTION_DMA_t g_usb1_function_DmaInfo[2];
+uint16_t g_usb1_function_DmaPipe[2];
+uint16_t g_usb1_function_DmaBval[2];
+uint16_t g_usb1_function_DmaStatus[2];
+
+uint16_t g_usb1_function_CtrZeroLengthFlag;
+
+//uint16_t g_usb1_function_ConfigNum;
+//uint16_t g_usb1_function_Alternate[USB_FUNCTION_ALT_NO];
+//uint16_t g_usb1_function_RemoteWakeupFlag;
+uint16_t g_usb1_function_TestModeFlag;
+uint16_t g_usb1_function_TestModeSelectors;
+
+//uint16_t g_usb1_function_ReqType;
+//uint16_t g_usb1_function_ReqTypeType;
+//uint16_t g_usb1_function_ReqTypeRecip;
+//uint16_t g_usb1_function_ReqRequest;
+//uint16_t g_usb1_function_ReqValue;
+//uint16_t g_usb1_function_ReqIndex;
+//uint16_t g_usb1_function_ReqLength;
+
+//uint16_t g_usb1_function_EPTableIndex[USB_FUNCTION_MAX_EP_NO + 1];
+
+uint16_t g_usb1_function_pipecfg[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipebuf[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipemaxp[USB_FUNCTION_MAX_PIPE_NO + 1];
+uint16_t g_usb1_function_pipeperi[USB_FUNCTION_MAX_PIPE_NO + 1];
+
+
+/*******************************************************************************
+* Function Name: usb1_function_init_status
+* Description : Initialization USB Sample Driver Variable.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_init_status (void)
+{
+ uint16_t pipe;
+
+ //g_usb1_function_ConfigNum = 0;
+ //g_usb1_function_RemoteWakeupFlag = DEVDRV_USBF_OFF;
+ g_usb1_function_TestModeFlag = DEVDRV_USBF_OFF;
+ g_usb1_function_CtrZeroLengthFlag = 0;
+
+#if 0
+ usb1_function_clear_alt();
+#endif
+
+ for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+ {
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+ g_usb1_function_PipeDataSize[pipe] = 0;
+ g_usb1_function_data_count[pipe] = 0;
+
+ /* pipe configuration in usb1_function_ResetEP() */
+ g_usb1_function_pipecfg[pipe] = 0;
+ g_usb1_function_pipebuf[pipe] = 0;
+ g_usb1_function_pipemaxp[pipe] = 0;
+ g_usb1_function_pipeperi[pipe] = 0;
+ }
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sig.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,330 @@
+/*******************************************************************************
+* 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_sig.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)
+*******************************************************************************/
+static void usb1_function_EnableINTModule(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_InitModule
+* Description : Initializes the USB module in the USB function mode.
+* Arguments : uint16_t mode ; USB_FUNCTION_HIGH_SPEED ; Hi-Speed Mode
+* : ; other ; Full-speed Mode
+* Return Value : none
+*******************************************************************************/
+void usb1_function_InitModule (uint16_t mode)
+{
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 0,
+ USB_SYSCFG_DCFM_SHIFT,
+ USB_SYSCFG_DCFM); /* USB function */
+
+ /* USB module operation enabled */
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 1,
+ USB_SYSCFG_USBE_SHIFT,
+ USB_SYSCFG_USBE);
+
+ if (mode == USB_FUNCTION_HIGH_SPEED)
+ {
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 1,
+ USB_SYSCFG_HSE_SHIFT,
+ USB_SYSCFG_HSE); /* Hi-Speed Mode */
+ }
+ else
+ {
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 0,
+ USB_SYSCFG_HSE_SHIFT,
+ USB_SYSCFG_HSE);
+ }
+
+ /* for power-on */
+ if (usb1_function_CheckVBUStaus() == DEVDRV_USBF_ON)
+ {
+ usb1_function_EnableINTModule(); /* Interrupt Enable */
+ usb1_function_USB_FUNCTION_Attach(); /* pull-up D+ and open D- */
+ }
+ else
+ {
+ usb1_function_USB_FUNCTION_Detach(); /* USB Detach */
+ /* with Interrupt Enable */
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_CheckVBUStaus
+* Description : Checks the USB-VBUS state to returns the connection state to
+* : the USB host.
+* Arguments : none
+* Return Value : DEVDRV_USBF_ON : VBUS ON
+* : DEVDRV_USBF_OFF : VBUS OFF
+*******************************************************************************/
+uint16_t usb1_function_CheckVBUStaus (void)
+{
+ uint16_t buf1;
+ uint16_t buf2;
+ uint16_t buf3;
+
+ /* monitor VBUS pins */
+ do
+ {
+ buf1 = RZA_IO_RegRead_16(&USB201.INTSTS0,
+ USB_INTSTS0_VBSTS_SHIFT,
+ USB_INTSTS0_VBSTS);
+ Userdef_USB_usb1_function_delay_10us(1);
+ buf2 = RZA_IO_RegRead_16(&USB201.INTSTS0,
+ USB_INTSTS0_VBSTS_SHIFT,
+ USB_INTSTS0_VBSTS);
+ Userdef_USB_usb1_function_delay_10us(1);
+ buf3 = RZA_IO_RegRead_16(&USB201.INTSTS0,
+ USB_INTSTS0_VBSTS_SHIFT,
+ USB_INTSTS0_VBSTS);
+ } while ((buf1 != buf2) || (buf2 != buf3));
+
+ if (buf1 == DEVDRV_USBF_OFF)
+ {
+ return DEVDRV_USBF_OFF; /* detach */
+ }
+
+ return DEVDRV_USBF_ON; /* attach */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Attach
+* Description : Connects to the USB host controller.
+* : This function pulls up D+.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_USB_FUNCTION_Attach (void)
+{
+ Userdef_USB_usb1_function_attach();
+
+ Userdef_USB_usb1_function_delay_xms(10);
+
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 1,
+ USB_SYSCFG_DPRPU_SHIFT,
+ USB_SYSCFG_DPRPU); /* Pull-up D+ and open D- */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Detach
+* Description : Disconnects from the USB host controller.
+* : This function opens D+/D-.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_USB_FUNCTION_Detach (void)
+{
+ uint16_t pipe;
+
+ Userdef_USB_usb1_function_detach();
+
+ for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+ {
+ if (g_usb1_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_IDLE)
+ {
+ usb1_function_stop_transfer(pipe);
+ }
+ }
+
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 0,
+ USB_SYSCFG_DPRPU_SHIFT,
+ USB_SYSCFG_DPRPU); /* open D+ and D- */
+
+ /* Detach Recovery */
+ Userdef_USB_usb1_function_delay_500ns(); /* need 1us=500ns * 2 wait */
+ Userdef_USB_usb1_function_delay_500ns();
+
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 1,
+ USB_SYSCFG_DCFM_SHIFT,
+ USB_SYSCFG_DCFM);
+ Userdef_USB_usb1_function_delay_500ns(); /* need 100ns wait but 500ns S/W wait */
+
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 0,
+ USB_SYSCFG_DCFM_SHIFT,
+ USB_SYSCFG_DCFM);
+
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 0,
+ USB_SYSCFG_USBE_SHIFT,
+ USB_SYSCFG_USBE); /* soft reset module */
+ Userdef_USB_usb1_function_delay_500ns();
+
+ RZA_IO_RegWrite_16(&USB201.SYSCFG0,
+ 1,
+ USB_SYSCFG_USBE_SHIFT,
+ USB_SYSCFG_USBE);
+
+ usb1_function_EnableINTModule(); /* Interrupt Enable */
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_BusReset
+* Description : This function is executed when the USB device is transitioned
+* : to POWERD_STATE. Sets the device descriptor according to the
+* : connection speed determined by the USB reset hand shake.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0 /*The USBHAL in mbed does not need this function*/
+void usb1_function_USB_FUNCTION_BusReset (void)
+{
+ usb1_function_init_status(); /* memory clear */
+
+ if (usb1_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED)
+ {
+ usb1_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED); /* Device Descriptor reset */
+ }
+ else
+ {
+ usb1_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED); /* Device Descriptor reset */
+ }
+
+ usb1_function_ResetDCP(); /* Default Control PIPE reset */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Resume
+* Description : This function is executed when the USB device detects a resume
+* : signal.
+* : The USB sample driver does not operate for this function.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0 /*The USBHAL in mbed does not need this function*/
+void usb1_function_USB_FUNCTION_Resume (void)
+{
+ /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_Suspend
+* Description : This function is executed when the USB device detects a suspend
+* : signal.
+* : The USB sample driver does not operate for this function.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0 /*The USBHAL in mbed does not need this function*/
+void usb1_function_USB_FUNCTION_Suspend (void)
+{
+ /* NOP */
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_USB_FUNCTION_TestMode
+* Description : This function is executed when the USB device is transitioned U
+* : to TEST_MODE by the USB standard request.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_USB_FUNCTION_TestMode (void)
+{
+ switch (g_usb1_function_TestModeSelectors & USB_FUNCTION_FUNCTION_TEST_SELECT)
+ {
+ case USB_FUNCTION_FUNCTION_TEST_J:
+ case USB_FUNCTION_FUNCTION_TEST_K:
+ case USB_FUNCTION_FUNCTION_TEST_SE0_NAK:
+ case USB_FUNCTION_FUNCTION_TEST_PACKET:
+ RZA_IO_RegWrite_16(&USB201.TESTMODE,
+ (g_usb1_function_TestModeSelectors >> 8),
+ USB_TESTMODE_UTST_SHIFT,
+ USB_TESTMODE_UTST);
+ break;
+
+ case USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE:
+ default:
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_EnableINTModule
+* Description : Enables USB interrupt.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_EnableINTModule (void)
+{
+ uint16_t buf;
+
+ buf = USB201.INTENB0;
+ buf |= (USB_FUNCTION_BITVBSE | USB_FUNCTION_BITDVSE | USB_FUNCTION_BITCTRE |
+ USB_FUNCTION_BITBEMPE | USB_FUNCTION_BITNRDYE | USB_FUNCTION_BITBRDYE);
+ USB201.INTENB0 = buf;
+
+ usb1_function_enable_bemp_int(USB_FUNCTION_PIPE0);
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sub.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,453 @@
+/*******************************************************************************
+* 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_sub.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)
+*******************************************************************************/
+#if 0
+extern const uint16_t *g_usb1_function_EndPntPtr[];
+extern uint8_t g_usb1_function_DeviceDescriptor[];
+extern uint8_t *g_usb1_function_ConfigurationPtr[];
+#endif
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: usb1_function_ResetDCP
+* Description : Initializes the default control pipe(DCP).
+* Outline : Reset default control pipe
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_ResetDCP (void)
+{
+ USB201.DCPCFG = 0;
+#if 0
+ USB201.DCPMAXP = g_usb1_function_DeviceDescriptor[7];
+#else
+ USB201.DCPMAXP = 64;
+#endif
+
+ USB201.CFIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+ USB201.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+ USB201.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_ResetEP
+* Description : Initializes the end point.
+* Arguments : uint16_t num ; Configuration Number
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_ResetEP (uint16_t num)
+{
+ uint16_t pipe;
+ uint16_t ep;
+ uint16_t index;
+ uint16_t buf;
+ uint16_t * tbl;
+
+ tbl = (uint16_t *)(g_usb1_function_EndPntPtr[num - 1]);
+
+ for (ep = 1; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+ {
+ if (g_usb1_function_EPTableIndex[ep] != USB_FUNCTION_EP_ERROR)
+ {
+ index = (uint16_t)(USB_FUNCTION_EPTABLE_LENGTH * g_usb1_function_EPTableIndex[ep]);
+ pipe = (uint16_t)(tbl[index + 0] & USB_FUNCTION_BITCURPIPE);
+
+ g_usb1_function_PipeTbl[pipe] = (uint16_t)(((tbl[index + 1] & USB_FUNCTION_DIRFIELD) << 3) |
+ ep |
+ (tbl[index + 0] & USB_FUNCTION_FIFO_USE));
+
+ if ((tbl[index + 1] & USB_FUNCTION_DIRFIELD) == USB_FUNCTION_DIR_P_OUT)
+ {
+ tbl[index + 1] |= USB_FUNCTION_SHTNAKON;
+#ifdef __USB_DMA_BFRE_ENABLE__
+ /* this routine cannnot be perfomred if read operation is executed in buffer size */
+ if (((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D0FIFO_DMA) ||
+ ((tbl[index + 0] & USB_FUNCTION_FIFO_USE) == USB_FUNCTION_D1FIFO_DMA))
+ {
+ tbl[index + 1] |= USB_FUNCTION_BFREON;
+ }
+#endif
+ }
+
+ /* Interrupt Disable */
+ buf = USB201.BRDYENB;
+ buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
+ USB201.BRDYENB = buf;
+ buf = USB201.NRDYENB;
+ buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
+ USB201.NRDYENB = buf;
+ buf = USB201.BEMPENB;
+ buf &= (uint16_t)~g_usb1_function_bit_set[pipe];
+ USB201.BEMPENB = buf;
+
+ usb1_function_set_pid_nak(pipe);
+
+ /* CurrentPIPE Clear */
+ if (RZA_IO_RegRead_16(&USB201.CFIFOSEL,
+ USB_CFIFOSEL_CURPIPE_SHIFT,
+ USB_CFIFOSEL_CURPIPE) == pipe)
+ {
+ RZA_IO_RegWrite_16(&USB201.CFIFOSEL,
+ 0,
+ USB_CFIFOSEL_CURPIPE_SHIFT,
+ USB_CFIFOSEL_CURPIPE);
+ }
+
+ if (RZA_IO_RegRead_16(&USB201.D0FIFOSEL,
+ USB_DnFIFOSEL_CURPIPE_SHIFT,
+ USB_DnFIFOSEL_CURPIPE) == pipe)
+ {
+ RZA_IO_RegWrite_16(&USB201.D0FIFOSEL,
+ 0,
+ USB_DnFIFOSEL_CURPIPE_SHIFT,
+ USB_DnFIFOSEL_CURPIPE);
+ }
+
+ if (RZA_IO_RegRead_16(&USB201.D1FIFOSEL,
+ USB_DnFIFOSEL_CURPIPE_SHIFT,
+ USB_DnFIFOSEL_CURPIPE) == pipe)
+ {
+ RZA_IO_RegWrite_16(&USB201.D1FIFOSEL,
+ 0,
+ USB_DnFIFOSEL_CURPIPE_SHIFT,
+ USB_DnFIFOSEL_CURPIPE);
+ }
+
+ /* PIPE Configuration */
+ USB201.PIPESEL = pipe;
+ USB201.PIPECFG = tbl[index + 1];
+ USB201.PIPEBUF = tbl[index + 2];
+ USB201.PIPEMAXP = tbl[index + 3];
+ USB201.PIPEPERI = tbl[index + 4];
+
+ g_usb1_function_pipecfg[pipe] = tbl[index + 1];
+ g_usb1_function_pipebuf[pipe] = tbl[index + 2];
+ g_usb1_function_pipemaxp[pipe] = tbl[index + 3];
+ g_usb1_function_pipeperi[pipe] = tbl[index + 4];
+
+ /* Buffer Clear */
+ usb1_function_set_sqclr(pipe);
+ usb1_function_aclrm(pipe);
+
+ /* init Global */
+ g_usb1_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+ g_usb1_function_PipeDataSize[pipe] = 0;
+ }
+ }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_EpToPipe
+* Description : Returns the pipe which end point specified by the argument is
+* : allocated to.
+* Arguments : uint16_t ep ; Direction + Endpoint Number
+* Return Value : USB_FUNCTION_EP_ERROR : Error
+* : Others : Pipe Number
+*******************************************************************************/
+uint16_t usb1_function_EpToPipe (uint16_t ep)
+{
+ uint16_t pipe;
+
+ for (pipe = 1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++)
+ {
+ if ((g_usb1_function_PipeTbl[pipe] & 0x00ff) == ep)
+ {
+ return pipe;
+ }
+ }
+
+ return USB_FUNCTION_EP_ERROR;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_InitEPTable
+* Description : Sets the end point by the Alternate setting value of the
+* : configuration number and the interface number specified by the
+* : argument.
+* Arguments : uint16_t Con_Num ; Configuration Number
+* : uint16_t Int_Num ; Interface Number
+* : uint16_t Alt_Num ; Alternate Setting
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_InitEPTable (uint16_t Con_Num, uint16_t Int_Num, uint16_t Alt_Num)
+{
+ uint8_t * ptr;
+ uint16_t point_interface;
+ uint16_t point_endpoint;
+ uint16_t length;
+ uint16_t start;
+ uint16_t numbers;
+ uint16_t endpoint;
+
+ ptr = (uint8_t *)g_usb1_function_ConfigurationPtr[Con_Num - 1];
+ point_interface = *ptr;
+ length = (uint16_t)((uint16_t)*(ptr + 3) << 8 | (uint16_t)*(ptr + 2));
+ ptr += *ptr;
+ start = 0;
+ numbers = 0;
+ point_endpoint = 0;
+
+ for (; point_interface < length;)
+ {
+ switch (*(ptr + 1)) /* Descriptor Type ? */
+ {
+ case USB_FUNCTION_DT_INTERFACE: /* Interface */
+ if ((*(ptr + 2) == Int_Num) && (*(ptr + 3) == Alt_Num))
+ {
+ numbers = *(ptr + 4);
+ }
+ else
+ {
+ start += *(ptr + 4);
+ }
+ point_interface += *ptr;
+ ptr += *ptr;
+ break;
+
+ case USB_FUNCTION_DT_ENDPOINT: /* Endpoint */
+ if (point_endpoint < numbers)
+ {
+ endpoint = (uint16_t)(*(ptr + 2) & 0x0f);
+ g_usb1_function_EPTableIndex[endpoint] = (uint16_t)(start + point_endpoint);
+ ++point_endpoint;
+ }
+ point_interface += *ptr;
+ ptr += *ptr;
+ break;
+
+ case USB_FUNCTION_DT_DEVICE: /* Device */
+ case USB_FUNCTION_DT_CONFIGURATION: /* Configuration */
+ case USB_FUNCTION_DT_STRING: /* String */
+ default: /* Class, Vendor, else */
+ point_interface += *ptr;
+ ptr += *ptr;
+ break;
+ }
+ }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_GetConfigNum
+* Description : Returns the number of configuration referring to the number of
+* : configuration described in the device descriptor.
+* Arguments : none
+* Return Value : Number of possible configurations (bNumConfigurations).
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_GetConfigNum (void)
+{
+ return (uint16_t)g_usb1_function_DeviceDescriptor[17];
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_GetInterfaceNum
+* Description : Returns the number of interface referring to the number of
+* : interface described in the configuration descriptor.
+* Arguments : uint16_t num ; Configuration Number
+* Return Value : Number of this interface (bNumInterfaces).
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_GetInterfaceNum (uint16_t num)
+{
+ return (uint16_t)(*(g_usb1_function_ConfigurationPtr[num - 1] + 4));
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_GetAltNum
+* Description : Returns the Alternate setting value of the configuration number
+* : and the interface number specified by the argument.
+* Arguments : uint16_t Con_Num ; Configuration Number
+* : uint16_t Int_Num ; Interface Number
+* Return Value : Value used to select this alternate setting(bAlternateSetting).
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_GetAltNum (uint16_t Con_Num, uint16_t Int_Num)
+{
+ uint8_t * ptr;
+ uint16_t point;
+ uint16_t alt_num = 0;
+ uint16_t length;
+
+ ptr = (uint8_t *)(g_usb1_function_ConfigurationPtr[Con_Num - 1]);
+ point = ptr[0];
+ ptr += ptr[0]; /* InterfaceDescriptor[0] */
+ length = (uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 2));
+ length |= (uint16_t)((uint16_t)(*(g_usb1_function_ConfigurationPtr[Con_Num - 1] + 3)) << 8);
+
+ for (; point < length;) /* Search Descriptor Table size */
+ {
+ switch (ptr[1]) /* Descriptor Type ? */
+ {
+ case USB_FUNCTION_DT_INTERFACE: /* Interface */
+ if (Int_Num == ptr[2])
+ {
+ alt_num = (uint16_t)ptr[3]; /* Alternate Number count */
+ }
+ point += ptr[0];
+ ptr += ptr[0];
+ break;
+
+ case USB_FUNCTION_DT_DEVICE: /* Device */
+ case USB_FUNCTION_DT_CONFIGURATION: /* Configuration */
+ case USB_FUNCTION_DT_STRING: /* String */
+ case USB_FUNCTION_DT_ENDPOINT: /* Endpoint */
+ default: /* Class, Vendor, else */
+ point += ptr[0];
+ ptr += ptr[0];
+ break;
+ }
+ }
+ return alt_num;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_CheckRemoteWakeup
+* Description : Returns the result of the remote wake up function is supported
+* : or not referring to the configuration descriptor.
+* Arguments : none
+* Return Value : DEVDRV_USBF_ON : Support Remote Wakeup
+* : DEVDRV_USBF_OFF : not Support Remote Wakeup
+*******************************************************************************/
+#if 0
+uint16_t usb1_function_CheckRemoteWakeup (void)
+{
+ uint8_t atr;
+
+ if (g_usb1_function_ConfigNum == 0)
+ {
+ return DEVDRV_USBF_OFF;
+ }
+
+ atr = *(g_usb1_function_ConfigurationPtr[g_usb1_function_ConfigNum - 1] + 7);
+
+ if (atr & USB_FUNCTION_CF_RWUP)
+ {
+ return DEVDRV_USBF_ON;
+ }
+
+ return DEVDRV_USBF_OFF;
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_alt
+* Description : Initializes the Alternate setting area.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_clear_alt (void)
+{
+ int i;
+
+ for (i = 0; i < USB_FUNCTION_ALT_NO; ++i)
+ {
+ g_usb1_function_Alternate[i] = 0; /* Alternate */
+ }
+}
+#endif
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_pipe_tbl
+* Description : Initializes pipe definition table.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void usb1_function_clear_pipe_tbl (void)
+{
+ int pipe;
+
+ for (pipe = 0; pipe < (USB_FUNCTION_MAX_PIPE_NO + 1); ++pipe)
+ {
+ g_usb1_function_PipeTbl[pipe] = 0;
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_clear_ep_table_index
+* Description : Initializes the end point table index.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+#if 0
+void usb1_function_clear_ep_table_index (void)
+{
+ int ep;
+
+ for (ep = 0; ep <= USB_FUNCTION_MAX_EP_NO; ++ep)
+ {
+ g_usb1_function_EPTableIndex[ep] = USB_FUNCTION_EP_ERROR;
+ }
+}
+#endif
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,698 @@
+/*******************************************************************************
+* 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_dmacdrv.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 <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "rza_io_regrw.h"
+#include "usb1_function_dmacdrv.h"
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DMAC_INDEFINE (255) /* Macro definition when REQD bit is not used */
+
+/* ==== Request setting information for on-chip peripheral module ==== */
+typedef enum dmac_peri_req_reg_type
+{
+ DMAC_REQ_MID,
+ DMAC_REQ_RID,
+ DMAC_REQ_AM,
+ DMAC_REQ_LVL,
+ DMAC_REQ_REQD
+} dmac_peri_req_reg_type_t;
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+/* ==== Prototype declaration ==== */
+
+/* ==== Global variable ==== */
+/* On-chip peripheral module request setting table */
+static const uint8_t usb1_function_dmac_peri_req_init_table[8][5] =
+{
+ /* MID,RID,AM,LVL,REQD */
+ {32, 3, 2, 1, 1}, /* USB_0 channel 0 transmit FIFO empty */
+ {32, 3, 2, 1, 0}, /* USB_0 channel 0 receive FIFO full */
+ {33, 3, 2, 1, 1}, /* USB_0 channel 1 transmit FIFO empty */
+ {33, 3, 2, 1, 0}, /* USB_0 channel 1 receive FIFO full */
+ {34, 3, 2, 1, 1}, /* USB_1 channel 0 transmit FIFO empty */
+ {34, 3, 2, 1, 0}, /* USB_1 channel 0 receive FIFO full */
+ {35, 3, 2, 1, 1}, /* USB_1 channel 1 transmit FIFO empty */
+ {35, 3, 2, 1, 0}, /* USB_1 channel 1 receive FIFO full */
+};
+
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_PeriReqInit
+* Description : Sets the register mode for DMA mode and the on-chip peripheral
+* : module request for transfer request for DMAC channel 1.
+* : Executes DMAC initial setting using the DMA information
+* : specified by the argument *trans_info and the enabled/disabled
+* : continuous transfer specified by the argument continuation.
+* : Registers DMAC channel 1 interrupt handler function and sets
+* : the interrupt priority level. Then enables transfer completion
+* : interrupt.
+* Arguments : dmac_transinfo_t *trans_info : Setting information to DMAC register
+* : uint32_t dmamode : DMA mode (only for DMAC_MODE_REGISTER)
+* : uint32_t continuation : Set continuous transfer to be valid
+* : after DMA transfer has been completed
+* : DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+* : DMAC_SAMPLE_SINGLE : Do not execute continuous transfer
+* : uint32_t request_factor : Factor for on-chip peripheral module request
+* : DMAC_REQ_OSTM0TINT : OSTM_0 compare match
+* : DMAC_REQ_OSTM1TINT : OSTM_1 compare match
+* : DMAC_REQ_TGI0A : MTU2_0 input capture/compare match
+* : :
+* : uint32_t req_direction: Setting value of CHCFG_n register REQD bit
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC3_PeriReqInit (const dmac_transinfo_t * trans_info,
+ uint32_t dmamode, uint32_t continuation,
+ uint32_t request_factor, uint32_t req_direction)
+{
+ /* ==== Register mode ==== */
+ if (DMAC_MODE_REGISTER == dmamode)
+ {
+ /* ==== Next0 register set ==== */
+ DMAC3.N0SA_n = trans_info->src_addr; /* Start address of transfer source */
+ DMAC3.N0DA_n = trans_info->dst_addr; /* Start address of transfer destination */
+ DMAC3.N0TB_n = trans_info->count; /* Total transfer byte count */
+
+ /* DAD : Transfer destination address counting direction */
+ /* SAD : Transfer source address counting direction */
+ /* DDS : Transfer destination transfer size */
+ /* SDS : Transfer source transfer size */
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ trans_info->daddr_dir,
+ DMAC3_CHCFG_n_DAD_SHIFT,
+ DMAC3_CHCFG_n_DAD);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ trans_info->saddr_dir,
+ DMAC3_CHCFG_n_SAD_SHIFT,
+ DMAC3_CHCFG_n_SAD);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ trans_info->dst_size,
+ DMAC3_CHCFG_n_DDS_SHIFT,
+ DMAC3_CHCFG_n_DDS);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ trans_info->src_size,
+ DMAC3_CHCFG_n_SDS_SHIFT,
+ DMAC3_CHCFG_n_SDS);
+
+ /* DMS : Register mode */
+ /* RSEL : Select Next0 register set */
+ /* SBE : No discharge of buffer data when aborted */
+ /* DEM : No DMA interrupt mask */
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 0,
+ DMAC3_CHCFG_n_DMS_SHIFT,
+ DMAC3_CHCFG_n_DMS);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 0,
+ DMAC3_CHCFG_n_RSEL_SHIFT,
+ DMAC3_CHCFG_n_RSEL);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 0,
+ DMAC3_CHCFG_n_SBE_SHIFT,
+ DMAC3_CHCFG_n_SBE);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 0,
+ DMAC3_CHCFG_n_DEM_SHIFT,
+ DMAC3_CHCFG_n_DEM);
+
+ /* ---- Continuous transfer ---- */
+ if (DMAC_SAMPLE_CONTINUATION == continuation)
+ {
+ /* REN : Execute continuous transfer */
+ /* RSW : Change register set when DMA transfer is completed. */
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 1,
+ DMAC3_CHCFG_n_REN_SHIFT,
+ DMAC3_CHCFG_n_REN);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 1,
+ DMAC3_CHCFG_n_RSW_SHIFT,
+ DMAC3_CHCFG_n_RSW);
+ }
+ /* ---- Single transfer ---- */
+ else
+ {
+ /* REN : Do not execute continuous transfer */
+ /* RSW : Do not change register set when DMA transfer is completed. */
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 0,
+ DMAC3_CHCFG_n_REN_SHIFT,
+ DMAC3_CHCFG_n_REN);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 0,
+ DMAC3_CHCFG_n_RSW_SHIFT,
+ DMAC3_CHCFG_n_RSW);
+ }
+
+ /* TM : Single transfer */
+ /* SEL : Channel setting */
+ /* HIEN, LOEN : On-chip peripheral module request */
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 0,
+ DMAC3_CHCFG_n_TM_SHIFT,
+ DMAC3_CHCFG_n_TM);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 3,
+ DMAC3_CHCFG_n_SEL_SHIFT,
+ DMAC3_CHCFG_n_SEL);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 1,
+ DMAC3_CHCFG_n_HIEN_SHIFT,
+ DMAC3_CHCFG_n_HIEN);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ 0,
+ DMAC3_CHCFG_n_LOEN_SHIFT,
+ DMAC3_CHCFG_n_LOEN);
+
+ /* ---- Set factor by specified on-chip peripheral module request ---- */
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+ DMAC3_CHCFG_n_AM_SHIFT,
+ DMAC3_CHCFG_n_AM);
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+ DMAC3_CHCFG_n_LVL_SHIFT,
+ DMAC3_CHCFG_n_LVL);
+
+ if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+ {
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+ DMAC3_CHCFG_n_REQD_SHIFT,
+ DMAC3_CHCFG_n_REQD);
+ }
+ else
+ {
+ RZA_IO_RegWrite_32(&DMAC3.CHCFG_n,
+ req_direction,
+ DMAC3_CHCFG_n_REQD_SHIFT,
+ DMAC3_CHCFG_n_REQD);
+ }
+
+ RZA_IO_RegWrite_32(&DMAC23.DMARS,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+ DMAC23_DMARS_CH3_RID_SHIFT,
+ DMAC23_DMARS_CH3_RID);
+ RZA_IO_RegWrite_32(&DMAC23.DMARS,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+ DMAC23_DMARS_CH3_MID_SHIFT,
+ DMAC23_DMARS_CH3_MID);
+
+ /* PR : Round robin mode */
+ RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+ 1,
+ DMAC07_DCTRL_0_7_PR_SHIFT,
+ DMAC07_DCTRL_0_7_PR);
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_Open
+* Description : Enables DMAC channel 3 transfer.
+* Arguments : uint32_t req : DMAC request mode
+* Return Value : 0 : Succeeded in enabling DMA transfer
+* : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb1_function_DMAC3_Open (uint32_t req)
+{
+ int32_t ret;
+ volatile uint8_t dummy;
+
+ /* Transferable? */
+ if ((0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+ DMAC3_CHSTAT_n_EN_SHIFT,
+ DMAC3_CHSTAT_n_EN)) &&
+ (0 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+ DMAC3_CHSTAT_n_TACT_SHIFT,
+ DMAC3_CHSTAT_n_TACT)))
+ {
+ /* Clear Channel Status Register */
+ RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+ 1,
+ DMAC3_CHCTRL_n_SWRST_SHIFT,
+ DMAC3_CHCTRL_n_SWRST);
+ dummy = RZA_IO_RegRead_32(&DMAC3.CHCTRL_n,
+ DMAC3_CHCTRL_n_SWRST_SHIFT,
+ DMAC3_CHCTRL_n_SWRST);
+ /* Enable DMA transfer */
+ RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+ 1,
+ DMAC3_CHCTRL_n_SETEN_SHIFT,
+ DMAC3_CHCTRL_n_SETEN);
+
+ /* ---- Request by software ---- */
+ if (DMAC_REQ_MODE_SOFT == req)
+ {
+ /* DMA transfer Request by software */
+ RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+ 1,
+ DMAC3_CHCTRL_n_STG_SHIFT,
+ DMAC3_CHCTRL_n_STG);
+ }
+
+ ret = 0;
+ }
+ else
+ {
+ ret = -1;
+ }
+
+ return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_Close
+* Description : Aborts DMAC channel 3 transfer. Returns the remaining transfer
+* : byte count at the time of DMA transfer abort to the argument
+* : *remain.
+* Arguments : uint32_t * remain : Remaining transfer byte count when
+* : : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC3_Close (uint32_t * remain)
+{
+
+ /* ==== Abort transfer ==== */
+ RZA_IO_RegWrite_32(&DMAC3.CHCTRL_n,
+ 1,
+ DMAC3_CHCTRL_n_CLREN_SHIFT,
+ DMAC3_CHCTRL_n_CLREN);
+
+ while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+ DMAC3_CHSTAT_n_TACT_SHIFT,
+ DMAC3_CHSTAT_n_TACT))
+ {
+ /* Loop until transfer is aborted */
+ }
+
+ while (1 == RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+ DMAC3_CHSTAT_n_EN_SHIFT,
+ DMAC3_CHSTAT_n_EN))
+ {
+ /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+ }
+ /* ==== Obtain remaining transfer byte count ==== */
+ *remain = DMAC3.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC3_Load_Set
+* Description : Sets the transfer source address, transfer destination
+* : address, and total transfer byte count respectively
+* : specified by the argument src_addr, dst_addr, and count to
+* : DMAC channel 3 as DMA transfer information.
+* : Sets the register set selected by the CHCFG_n register
+* : RSEL bit from the Next0 or Next1 register set.
+* : This function should be called when DMA transfer of DMAC
+* : channel 3 is aboted.
+* Arguments : uint32_t src_addr : Transfer source address
+* : uint32_t dst_addr : Transfer destination address
+* : uint32_t count : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC3_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+ uint8_t reg_set;
+
+ /* Obtain register set in use */
+ reg_set = RZA_IO_RegRead_32(&DMAC3.CHSTAT_n,
+ DMAC3_CHSTAT_n_SR_SHIFT,
+ DMAC3_CHSTAT_n_SR);
+
+ /* ==== Load ==== */
+ if (0 == reg_set)
+ {
+ /* ---- Next0 Register Set ---- */
+ DMAC3.N0SA_n = src_addr; /* Start address of transfer source */
+ DMAC3.N0DA_n = dst_addr; /* Start address of transfer destination */
+ DMAC3.N0TB_n = count; /* Total transfer byte count */
+ }
+ else
+ {
+ /* ---- Next1 Register Set ---- */
+ DMAC3.N1SA_n = src_addr; /* Start address of transfer source */
+ DMAC3.N1DA_n = dst_addr; /* Start address of transfer destination */
+ DMAC3.N1TB_n = count; /* Total transfer byte count */
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_PeriReqInit
+* Description : Sets the register mode for DMA mode and the on-chip peripheral
+* : module request for transfer request for DMAC channel 2.
+* : Executes DMAC initial setting using the DMA information
+* : specified by the argument *trans_info and the enabled/disabled
+* : continuous transfer specified by the argument continuation.
+* : Registers DMAC channel 2 interrupt handler function and sets
+* : the interrupt priority level. Then enables transfer completion
+* : interrupt.
+* Arguments : dmac_transinfo_t * trans_info : Setting information to DMAC
+* : : register
+* : uint32_t dmamode : DMA mode (only for DMAC_MODE_REGISTER)
+* : uint32_t continuation : Set continuous transfer to be valid
+* : : after DMA transfer has been completed
+* : DMAC_SAMPLE_CONTINUATION : Execute continuous transfer
+* : DMAC_SAMPLE_SINGLE : Do not execute continuous
+* : : transfer
+* : uint32_t request_factor : Factor for on-chip peripheral module
+* : : request
+* : DMAC_REQ_OSTM0TINT : OSTM_0 compare match
+* : DMAC_REQ_OSTM1TINT : OSTM_1 compare match
+* : DMAC_REQ_TGI0A : MTU2_0 input capture/compare match
+* : :
+* : uint32_t req_direction : Setting value of CHCFG_n register
+* : : REQD bit
+*******************************************************************************/
+void usb1_function_DMAC4_PeriReqInit (const dmac_transinfo_t * trans_info,
+ uint32_t dmamode, uint32_t continuation,
+ uint32_t request_factor, uint32_t req_direction)
+{
+ /* ==== Register mode ==== */
+ if (DMAC_MODE_REGISTER == dmamode)
+ {
+ /* ==== Next0 register set ==== */
+ DMAC4.N0SA_n = trans_info->src_addr; /* Start address of transfer source */
+ DMAC4.N0DA_n = trans_info->dst_addr; /* Start address of transfer destination */
+ DMAC4.N0TB_n = trans_info->count; /* Total transfer byte count */
+
+ /* DAD : Transfer destination address counting direction */
+ /* SAD : Transfer source address counting direction */
+ /* DDS : Transfer destination transfer size */
+ /* SDS : Transfer source transfer size */
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ trans_info->daddr_dir,
+ DMAC4_CHCFG_n_DAD_SHIFT,
+ DMAC4_CHCFG_n_DAD);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ trans_info->saddr_dir,
+ DMAC4_CHCFG_n_SAD_SHIFT,
+ DMAC4_CHCFG_n_SAD);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ trans_info->dst_size,
+ DMAC4_CHCFG_n_DDS_SHIFT,
+ DMAC4_CHCFG_n_DDS);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ trans_info->src_size,
+ DMAC4_CHCFG_n_SDS_SHIFT,
+ DMAC4_CHCFG_n_SDS);
+
+ /* DMS : Register mode */
+ /* RSEL : Select Next0 register set */
+ /* SBE : No discharge of buffer data when aborted */
+ /* DEM : No DMA interrupt mask */
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 0,
+ DMAC4_CHCFG_n_DMS_SHIFT,
+ DMAC4_CHCFG_n_DMS);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 0,
+ DMAC4_CHCFG_n_RSEL_SHIFT,
+ DMAC4_CHCFG_n_RSEL);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 0,
+ DMAC4_CHCFG_n_SBE_SHIFT,
+ DMAC4_CHCFG_n_SBE);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 0,
+ DMAC4_CHCFG_n_DEM_SHIFT,
+ DMAC4_CHCFG_n_DEM);
+
+ /* ---- Continuous transfer ---- */
+ if (DMAC_SAMPLE_CONTINUATION == continuation)
+ {
+ /* REN : Execute continuous transfer */
+ /* RSW : Change register set when DMA transfer is completed. */
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 1,
+ DMAC4_CHCFG_n_REN_SHIFT,
+ DMAC4_CHCFG_n_REN);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 1,
+ DMAC4_CHCFG_n_RSW_SHIFT,
+ DMAC4_CHCFG_n_RSW);
+ }
+ /* ---- Single transfer ---- */
+ else
+ {
+ /* REN : Do not execute continuous transfer */
+ /* RSW : Do not change register set when DMA transfer is completed. */
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 0,
+ DMAC4_CHCFG_n_REN_SHIFT,
+ DMAC4_CHCFG_n_REN);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 0,
+ DMAC4_CHCFG_n_RSW_SHIFT,
+ DMAC4_CHCFG_n_RSW);
+ }
+
+ /* TM : Single transfer */
+ /* SEL : Channel setting */
+ /* HIEN, LOEN : On-chip peripheral module request */
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 0,
+ DMAC4_CHCFG_n_TM_SHIFT,
+ DMAC4_CHCFG_n_TM);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 4,
+ DMAC4_CHCFG_n_SEL_SHIFT,
+ DMAC4_CHCFG_n_SEL);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 1,
+ DMAC4_CHCFG_n_HIEN_SHIFT,
+ DMAC4_CHCFG_n_HIEN);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ 0,
+ DMAC4_CHCFG_n_LOEN_SHIFT,
+ DMAC4_CHCFG_n_LOEN);
+
+ /* ---- Set factor by specified on-chip peripheral module request ---- */
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_AM],
+ DMAC4_CHCFG_n_AM_SHIFT,
+ DMAC4_CHCFG_n_AM);
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_LVL],
+ DMAC4_CHCFG_n_LVL_SHIFT,
+ DMAC4_CHCFG_n_LVL);
+ if (usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD] != DMAC_INDEFINE)
+ {
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_REQD],
+ DMAC4_CHCFG_n_REQD_SHIFT,
+ DMAC4_CHCFG_n_REQD);
+ }
+ else
+ {
+ RZA_IO_RegWrite_32(&DMAC4.CHCFG_n,
+ req_direction,
+ DMAC4_CHCFG_n_REQD_SHIFT,
+ DMAC4_CHCFG_n_REQD);
+ }
+ RZA_IO_RegWrite_32(&DMAC45.DMARS,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_RID],
+ DMAC45_DMARS_CH4_RID_SHIFT,
+ DMAC45_DMARS_CH4_RID);
+ RZA_IO_RegWrite_32(&DMAC45.DMARS,
+ usb1_function_dmac_peri_req_init_table[request_factor][DMAC_REQ_MID],
+ DMAC45_DMARS_CH4_MID_SHIFT,
+ DMAC45_DMARS_CH4_MID);
+
+ /* PR : Round robin mode */
+ RZA_IO_RegWrite_32(&DMAC07.DCTRL_0_7,
+ 1,
+ DMAC07_DCTRL_0_7_PR_SHIFT,
+ DMAC07_DCTRL_0_7_PR);
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_Open
+* Description : Enables DMAC channel 4 transfer.
+* Arguments : uint32_t req : DMAC request mode
+* Return Value : 0 : Succeeded in enabling DMA transfer
+* : -1 : Failed to enable DMA transfer (due to DMA operation)
+*******************************************************************************/
+int32_t usb1_function_DMAC4_Open (uint32_t req)
+{
+ int32_t ret;
+ volatile uint8_t dummy;
+
+ /* Transferable? */
+ if ((0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+ DMAC4_CHSTAT_n_EN_SHIFT,
+ DMAC4_CHSTAT_n_EN)) &&
+ (0 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+ DMAC4_CHSTAT_n_TACT_SHIFT,
+ DMAC4_CHSTAT_n_TACT)))
+ {
+ /* Clear Channel Status Register */
+ RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+ 1,
+ DMAC4_CHCTRL_n_SWRST_SHIFT,
+ DMAC4_CHCTRL_n_SWRST);
+ dummy = RZA_IO_RegRead_32(&DMAC4.CHCTRL_n,
+ DMAC4_CHCTRL_n_SWRST_SHIFT,
+ DMAC4_CHCTRL_n_SWRST);
+ /* Enable DMA transfer */
+ RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+ 1,
+ DMAC4_CHCTRL_n_SETEN_SHIFT,
+ DMAC4_CHCTRL_n_SETEN);
+
+ /* ---- Request by software ---- */
+ if (DMAC_REQ_MODE_SOFT == req)
+ {
+ /* DMA transfer Request by software */
+ RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+ 1,
+ DMAC4_CHCTRL_n_STG_SHIFT,
+ DMAC4_CHCTRL_n_STG);
+ }
+
+ ret = 0;
+ }
+ else
+ {
+ ret = -1;
+ }
+
+ return ret;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_Close
+* Description : Aborts DMAC channel 4 transfer. Returns the remaining transfer
+* : byte count at the time of DMA transfer abort to the argument
+* : *remain.
+* Arguments : uint32_t * remain : Remaining transfer byte count when
+* : : DMA transfer is aborted
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC4_Close (uint32_t * remain)
+{
+
+ /* ==== Abort transfer ==== */
+ RZA_IO_RegWrite_32(&DMAC4.CHCTRL_n,
+ 1,
+ DMAC4_CHCTRL_n_CLREN_SHIFT,
+ DMAC4_CHCTRL_n_CLREN);
+
+ while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+ DMAC4_CHSTAT_n_TACT_SHIFT,
+ DMAC4_CHSTAT_n_TACT))
+ {
+ /* Loop until transfer is aborted */
+ }
+
+ while (1 == RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+ DMAC4_CHSTAT_n_EN_SHIFT,
+ DMAC4_CHSTAT_n_EN))
+ {
+ /* Loop until 0 is set in EN before checking the remaining transfer byte count */
+ }
+ /* ==== Obtain remaining transfer byte count ==== */
+ *remain = DMAC4.CRTB_n;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_DMAC4_Load_Set
+* Description : Sets the transfer source address, transfer destination
+* : address, and total transfer byte count respectively
+* : specified by the argument src_addr, dst_addr, and count to
+* : DMAC channel 4 as DMA transfer information.
+* : Sets the register set selected by the CHCFG_n register
+* : RSEL bit from the Next0 or Next1 register set.
+* : This function should be called when DMA transfer of DMAC
+* : channel 4 is aboted.
+* Arguments : uint32_t src_addr : Transfer source address
+* : uint32_t dst_addr : Transfer destination address
+* : uint32_t count : Total transfer byte count
+* Return Value : none
+*******************************************************************************/
+void usb1_function_DMAC4_Load_Set (uint32_t src_addr, uint32_t dst_addr, uint32_t count)
+{
+ uint8_t reg_set;
+
+ /* Obtain register set in use */
+ reg_set = RZA_IO_RegRead_32(&DMAC4.CHSTAT_n,
+ DMAC4_CHSTAT_n_SR_SHIFT,
+ DMAC4_CHSTAT_n_SR);
+
+ /* ==== Load ==== */
+ if (0 == reg_set)
+ {
+ /* ---- Next0 Register Set ---- */
+ DMAC4.N0SA_n = src_addr; /* Start address of transfer source */
+ DMAC4.N0DA_n = dst_addr; /* Start address of transfer destination */
+ DMAC4.N0TB_n = count; /* Total transfer byte count */
+ }
+ else
+ {
+ /* ---- Next1 Register Set ---- */
+ DMAC4.N1SA_n = src_addr; /* Start address of transfer source */
+ DMAC4.N1DA_n = dst_addr; /* Start address of transfer destination */
+ DMAC4.N1TB_n = count; /* Total transfer byte count */
+ }
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,762 @@
+/*******************************************************************************
+* 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_userdef.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 <stdio.h>
+#include "r_typedefs.h"
+#include "iodefine.h"
+#include "devdrv_usb_function_api.h"
+#include "usb1_function_dmacdrv.h" /* common DMAC driver for USB */
+
+
+/*******************************************************************************
+Typedef definitions
+*******************************************************************************/
+
+
+/*******************************************************************************
+Macro definitions
+*******************************************************************************/
+#define DUMMY_ACCESS OSTM0CNT
+
+/* #define CACHE_WRITEBACK */
+
+
+/*******************************************************************************
+Imported global variables and functions (from other files)
+*******************************************************************************/
+extern int32_t io_cwb(unsigned long start, unsigned long end);
+
+
+/*******************************************************************************
+Exported global variables and functions (to be accessed by other files)
+*******************************************************************************/
+static void usb1_function_enable_dmac0(uint32_t src, uint32_t dst, uint32_t count,
+ uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void usb1_function_enable_dmac1(uint32_t src, uint32_t dst, uint32_t count,
+ uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc);
+static void Userdef_USB_usb1_function_delay_10us_2(void);
+
+
+/*******************************************************************************
+Private global variables and functions
+*******************************************************************************/
+
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_d0fifo_dmaintid
+* Description : get D0FIFO DMA Interrupt ID
+* Arguments : none
+* Return Value : D0FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb1_function_d0fifo_dmaintid (void)
+{
+#if 0
+ return DMAINT1_IRQn;
+#else
+ return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_d1fifo_dmaintid
+* Description : get D1FIFO DMA Interrupt ID
+* Arguments : none
+* Return Value : D1FIFO DMA Interrupt ID
+*******************************************************************************/
+IRQn_Type Userdef_USB_usb1_function_d1fifo_dmaintid (void)
+{
+#if 0
+ return DMAINT1_IRQn;
+#else
+ return 0xFFFF;
+#endif
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_attach
+* Description : Wait for the software of 1ms.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_attach (void)
+{
+ printf("\n");
+ printf("channel 1 attach device\n");
+ printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_detach
+* Description : Wait for the software of 1ms.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_detach (void)
+{
+ printf("\n");
+ printf("channel 1 detach device\n");
+ printf("\n");
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_1ms
+* Description : Wait for the software of 1ms.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_1ms (void)
+{
+ volatile int i;
+ volatile unsigned long tmp;
+
+ /*
+ * Wait 1ms (Please change for your MCU).
+ */
+ for (i = 0; i < 1440; ++i)
+ {
+ tmp = DUMMY_ACCESS;
+ }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_xms
+* Description : Wait for the software in the period of time specified by the
+* : argument.
+* : Alter this function according to the user's system.
+* Arguments : uint32_t msec ; Wait Time (msec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_xms (uint32_t msec)
+{
+ volatile unsigned short i;
+
+ for (i = 0; i < msec; ++i)
+ {
+ Userdef_USB_usb1_function_delay_1ms();
+ }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_10us
+* Description : Waits for software for the period specified by the argument.
+* : Alter this function according to the user's system.
+* Arguments : uint32_t usec ; Wait Time(x 10usec)
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_10us (uint32_t usec)
+{
+ volatile int i;
+
+ /* Wait 10us (Please change for your MCU) */
+ for (i = 0; i < usec; ++i)
+ {
+ Userdef_USB_usb1_function_delay_10us_2();
+ }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_10us_2
+* Description : Waits for software for the period specified by the argument.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+static void Userdef_USB_usb1_function_delay_10us_2 (void)
+{
+ volatile int i;
+ volatile unsigned long tmp;
+
+ /* Wait 1us (Please change for your MCU) */
+ for (i = 0; i < 14; ++i)
+ {
+ tmp = DUMMY_ACCESS;
+ }
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_delay_500ns
+* Description : Wait for software for 500ns.
+* : Alter this function according to the user's system.
+* Arguments : none
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_delay_500ns (void)
+{
+ volatile int i;
+ volatile unsigned long tmp;
+
+ /* Wait 500ns (Please change for your MCU) */
+ /* Wait 500ns I clock 266MHz */
+ tmp = DUMMY_ACCESS;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_start_dma
+* Description : Enables DMA transfer on the information specified by the argument.
+* : Set DMAC register by this function to enable DMA transfer.
+* : After executing this function, USB module is set to start DMA
+* : transfer. DMA transfer should not wait for DMA transfer complete.
+* Arguments : USB_FUNCTION_DMA_t *dma : DMA parameter
+* : typedef struct{
+* : uint32_t fifo; FIFO for using
+* : uint32_t buffer; Start address of transfer source/destination
+* : uint32_t bytes; Transfer size(Byte)
+* : uint32_t dir; Transfer direction(0:Buffer->FIFO, 1:FIFO->Buffer)
+* : uint32_t size; DMA transfer size
+* : } USB_FUNCTION_DMA_t;
+* : uint16_t dfacc ; 0 : cycle steal mode
+* : 1 : 16byte continuous mode
+* : 2 : 32byte continuous mode
+* Return Value : none
+*******************************************************************************/
+void Userdef_USB_usb1_function_start_dma (USB_FUNCTION_DMA_t * dma, uint16_t dfacc)
+{
+ uint32_t trncount;
+ uint32_t src;
+ uint32_t dst;
+ uint32_t size;
+ uint32_t dir;
+#ifdef CACHE_WRITEBACK
+ uint32_t ptr;
+#endif
+
+ trncount = dma->bytes;
+ dir = dma->dir;
+
+ if (dir == USB_FUNCTION_FIFO2BUF)
+ {
+ /* DxFIFO determination */
+ dst = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB201.D0FIFO.UINT32);
+ }
+ else
+ {
+ src = (uint32_t)(&USB201.D1FIFO.UINT32);
+ }
+ size = dma->size;
+
+ if (size == 0)
+ {
+ src += 3; /* byte access */
+ }
+ else if (size == 1)
+ {
+ src += 2; /* short access */
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+#else
+ size = dma->size;
+
+ if (size == 2)
+ {
+ /* 32bit access */
+ if (dfacc == 2)
+ {
+ /* 32byte access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB201.D0FIFOB0);
+ }
+ else
+ {
+ src = (uint32_t)(&USB201.D1FIFOB0);
+ }
+ }
+ else if (dfacc == 1)
+ {
+ /* 16byte access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB201.D0FIFOB0);
+ }
+ else
+ {
+ src = (uint32_t)(&USB201.D1FIFOB0);
+ }
+ }
+ else
+ {
+ /* normal access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB201.D0FIFO.UINT32);
+ }
+ else
+ {
+ src = (uint32_t)(&USB201.D1FIFO.UINT32);
+ }
+ }
+ }
+ else if (size == 1)
+ {
+ /* 16bit access */
+ dfacc = 0; /* force normal access */
+
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB201.D0FIFO.UINT32);
+ }
+ else
+ {
+ src = (uint32_t)(&USB201.D1FIFO.UINT32);
+ }
+ src += 2; /* short access */
+ }
+ else
+ {
+ /* 8bit access */
+ dfacc = 0; /* force normal access */
+
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ src = (uint32_t)(&USB201.D0FIFO.UINT32);
+ }
+ else
+ {
+ src = (uint32_t)(&USB201.D1FIFO.UINT32);
+ }
+ src += 3; /* byte access */
+ }
+#endif
+ }
+ else
+ {
+ /* DxFIFO determination */
+ src = dma->buffer;
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+ }
+ size = dma->size;
+
+ if (size == 0)
+ {
+ dst += 3; /* byte access */
+ }
+ else if (size == 1)
+ {
+ dst += 2; /* short access */
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+#else
+ size = dma->size;
+
+ if (size == 2)
+ {
+ /* 32bit access */
+ if (dfacc == 2)
+ {
+ /* 32byte access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB201.D0FIFOB0);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB201.D1FIFOB0);
+ }
+ }
+ else if (dfacc == 1)
+ {
+ /* 16byte access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB201.D0FIFOB0);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB201.D1FIFOB0);
+ }
+ }
+ else
+ {
+ /* normal access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+ }
+ }
+ }
+ else if (size == 1)
+ {
+ /* 16bit access */
+ dfacc = 0; /* force normal access */
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+ }
+ dst += 2; /* short access */
+ }
+ else
+ {
+ /* 8bit access */
+ dfacc = 0; /* force normal access */
+
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ dst = (uint32_t)(&USB201.D0FIFO.UINT32);
+ }
+ else
+ {
+ dst = (uint32_t)(&USB201.D1FIFO.UINT32);
+ }
+ dst += 3; /* byte access */
+ }
+#endif
+ }
+
+#ifdef CACHE_WRITEBACK
+ ptr = (uint32_t)dma->buffer;
+
+ if ((ptr & 0x20000000ul) == 0)
+ {
+ io_cwb((uint32_t)ptr, (uint32_t)(ptr) + trncount);
+ }
+#endif
+
+ if (dma->fifo == USB_FUNCTION_D0FIFO_DMA)
+ {
+ usb1_function_enable_dmac0(src, dst, trncount, size, dir, dma->fifo, dfacc);
+ }
+ else
+ {
+ usb1_function_enable_dmac1(src, dst, trncount, size, dir, dma->fifo, dfacc);
+ }
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_dmac0
+* Description : Enables DMA transfer on the information specified by the argument.
+* Arguments : uint32_t src : src address
+* : uint32_t dst : dst address
+* : uint32_t count : transfer byte
+* : uint32_t size : transfer size
+* : uint32_t dir : direction
+* : uint32_t fifo : FIFO(D0FIFO or D1FIFO)
+* : uint16_t dfacc : 0 : normal access
+* : : 1 : 16byte access
+* : : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_enable_dmac0 (uint32_t src, uint32_t dst, uint32_t count,
+ uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+ dmac_transinfo_t trans_info;
+ uint32_t request_factor = 0;
+ int32_t ret;
+
+ /* ==== Variable setting for DMAC initialization ==== */
+ trans_info.src_addr = (uint32_t)src; /* Start address of transfer source */
+ trans_info.dst_addr = (uint32_t)dst; /* Start address of transfer destination */
+ trans_info.count = (uint32_t)count; /* Total byte count to be transferred */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (size == 0)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
+ }
+ else if (size == 1)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
+ }
+ else if (size == 2)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
+ }
+ else
+ {
+ printf("size error!!\n");
+ }
+#else
+ if (dfacc == 2)
+ {
+ /* 32byte access */
+ trans_info.src_size = DMAC_TRANS_SIZE_256; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_256; /* Transfer destination transfer size */
+ }
+ else if (dfacc == 1)
+ {
+ /* 16byte access */
+ trans_info.src_size = DMAC_TRANS_SIZE_128; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_128; /* Transfer destination transfer size */
+ }
+ else
+ {
+ /* normal access */
+ if (size == 0)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
+ }
+ else if (size == 1)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
+ }
+ else if (size == 2)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
+ }
+ else
+ {
+ printf("size error!!\n");
+ }
+ }
+#endif
+
+ if (dir == USB_FUNCTION_FIFO2BUF)
+ {
+ request_factor =DMAC_REQ_USB1_DMA0_RX; /* USB_0 channel 0 receive FIFO full */
+ trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer source address */
+ trans_info.daddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer destination address */
+ }
+ else if (dir == USB_FUNCTION_BUF2FIFO)
+ {
+ request_factor =DMAC_REQ_USB1_DMA0_TX; /* USB_0 channel 0 receive FIFO empty */
+ trans_info.saddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer source address */
+ trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer destination address */
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+
+ /* ==== DMAC initialization ==== */
+ usb1_function_DMAC3_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+ DMAC_MODE_REGISTER,
+ DMAC_SAMPLE_SINGLE,
+ request_factor,
+ 0); /* Don't care DMAC_REQ_REQD is setting in
+ usb1_function_DMAC3_PeriReqInit() */
+
+ /* ==== DMAC startup ==== */
+ ret = usb1_function_DMAC3_Open(DMAC_REQ_MODE_PERI);
+ if (ret != 0)
+ {
+ printf("DMAC3 Open error!!\n");
+ }
+
+ return;
+}
+
+/*******************************************************************************
+* Function Name: usb1_function_enable_dmac1
+* Description : Enables DMA transfer on the information specified by the argument.
+* Arguments : uint32_t src : src address
+* : uint32_t dst : dst address
+* : uint32_t count : transfer byte
+* : uint32_t size : transfer size
+* : uint32_t dir : direction
+* : uint32_t fifo : FIFO(D0FIFO or D1FIFO)
+* : uint16_t dfacc : 0 : normal access
+* : : 1 : 16byte access
+* : : 2 : 32byte access
+* Return Value : none
+*******************************************************************************/
+static void usb1_function_enable_dmac1 (uint32_t src, uint32_t dst, uint32_t count,
+ uint32_t size, uint32_t dir, uint32_t fifo, uint16_t dfacc)
+{
+ dmac_transinfo_t trans_info;
+ uint32_t request_factor = 0;
+ int32_t ret;
+
+ /* ==== Variable setting for DMAC initialization ==== */
+ trans_info.src_addr = (uint32_t)src; /* Start address of transfer source */
+ trans_info.dst_addr = (uint32_t)dst; /* Start address of transfer destination */
+ trans_info.count = (uint32_t)count; /* Total byte count to be transferred */
+#ifndef __USB_FUNCTION_DF_ACC_ENABLE__
+ if (size == 0)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
+ }
+ else if (size == 1)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
+ }
+ else if (size == 2)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
+ }
+ else
+ {
+ printf("size error!!\n");
+ }
+#else
+ if (dfacc == 2)
+ {
+ /* 32byte access */
+ trans_info.src_size = DMAC_TRANS_SIZE_256; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_256; /* Transfer destination transfer size */
+ }
+ else if (dfacc == 1)
+ {
+ /* 16byte access */
+ trans_info.src_size = DMAC_TRANS_SIZE_128; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_128; /* Transfer destination transfer size */
+ }
+ else
+ {
+ /* normal access */
+ if (size == 0)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_8; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_8; /* Transfer destination transfer size */
+ }
+ else if (size == 1)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_16; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_16; /* Transfer destination transfer size */
+ }
+ else if (size == 2)
+ {
+ trans_info.src_size = DMAC_TRANS_SIZE_32; /* Transfer source transfer size */
+ trans_info.dst_size = DMAC_TRANS_SIZE_32; /* Transfer destination transfer size */
+ }
+ else
+ {
+ printf("size error!!\n");
+ }
+ }
+#endif
+
+ if (dir == USB_FUNCTION_FIFO2BUF)
+ {
+ request_factor =DMAC_REQ_USB1_DMA1_RX; /* USB_0 channel 0 receive FIFO full */
+ trans_info.saddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer source address */
+ trans_info.daddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer destination address */
+ }
+ else if (dir == USB_FUNCTION_BUF2FIFO)
+ {
+ request_factor =DMAC_REQ_USB1_DMA1_TX; /* USB_0 channel 0 receive FIFO empty */
+ trans_info.saddr_dir = DMAC_TRANS_ADR_INC; /* Count direction of transfer source address */
+ trans_info.daddr_dir = DMAC_TRANS_ADR_NO_INC; /* Count direction of transfer destination address */
+ }
+ else
+ {
+ /* Do Nothing */
+ }
+
+ /* ==== DMAC initialization ==== */
+ usb1_function_DMAC4_PeriReqInit((const dmac_transinfo_t *)&trans_info,
+ DMAC_MODE_REGISTER,
+ DMAC_SAMPLE_SINGLE,
+ request_factor,
+ 0); /* Don't care DMAC_REQ_REQD is setting in
+ usb1_function_DMAC4_PeriReqInit() */
+
+ /* ==== DMAC startup ==== */
+ ret = usb1_function_DMAC4_Open(DMAC_REQ_MODE_PERI);
+ if (ret != 0)
+ {
+ printf("DMAC4 Open error!!\n");
+ }
+
+ return;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_stop_dma0
+* Description : Disables DMA transfer.
+* : This function should be executed to DMAC executed at the time
+* : of specification of D0_FIF0_DMA in dma->fifo.
+* Arguments : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+* : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb1_function_stop_dma0 (void)
+{
+ uint32_t remain;
+
+ /* ==== DMAC release ==== */
+ usb1_function_DMAC3_Close(&remain);
+
+ return remain;
+}
+
+/*******************************************************************************
+* Function Name: Userdef_USB_usb1_function_stop_dma1
+* Description : Disables DMA transfer.
+* : This function should be executed to DMAC executed at the time
+* : of specification of D1_FIF0_DMA in dma->fifo.
+* Arguments : none
+* Return Value : uint32_t return Transfer Counter register(DMATCRn) value
+* : regarding to the bus width.
+*******************************************************************************/
+uint32_t Userdef_USB_usb1_function_stop_dma1 (void)
+{
+ uint32_t remain;
+
+ /* ==== DMAC release ==== */
+ usb1_function_DMAC4_Close(&remain);
+
+ return remain;
+}
+
+/* End of File */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb_function_setting.h Tue Mar 31 16:15:39 2015 +0100
@@ -0,0 +1,173 @@
+/*******************************************************************************
+* 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) 2014 - 2015 Renesas Electronics Corporation. All rights reserved.
+*******************************************************************************/
+
+#ifndef USB_FUNCTION_SETTING_H
+#define USB_FUNCTION_SETTING_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define USB_FUNCTION_CH 0
+#define USB_FUNCTION_HISPEED 1
+
+#if (USB_FUNCTION_CH == 0)
+#include "usb0_function.h"
+#define USB20X USB200
+#define USBIX_IRQn USBI0_IRQn
+#define g_usbx_function_bit_set g_usb0_function_bit_set
+#define g_usbx_function_PipeDataSize g_usb0_function_PipeDataSize
+#define g_usbx_function_data_count g_usb0_function_data_count
+#define g_usbx_function_PipeTbl g_usb0_function_PipeTbl
+#define g_usbx_function_DmaStatus g_usb0_function_DmaStatus
+#define g_usbx_function_pipecfg g_usb0_function_pipecfg
+#define g_usbx_function_pipe_status g_usb0_function_pipe_status
+#define g_usbx_function_data_pointer g_usb0_function_data_pointer
+#define g_usbx_function_pipebuf g_usb0_function_pipebuf
+#define g_usbx_function_pipemaxp g_usb0_function_pipemaxp
+#define g_usbx_function_pipeperi g_usb0_function_pipeperi
+#define g_usbx_function_TestModeFlag g_usb0_function_TestModeFlag
+#define usbx_function_BRDYInterruptPIPE0 usb0_function_BRDYInterruptPIPE0
+#define usbx_function_BRDYInterrupt usb0_function_BRDYInterrupt
+#define usbx_function_NRDYInterruptPIPE0 usb0_function_NRDYInterruptPIPE0
+#define usbx_function_NRDYInterrupt usb0_function_NRDYInterrupt
+#define usbx_function_BEMPInterruptPIPE0 usb0_function_BEMPInterruptPIPE0
+#define usbx_function_BEMPInterrupt usb0_function_BEMPInterrupt
+#define usbx_function_read_buffer_c usb0_function_read_buffer_c
+#define usbx_function_set_pid_buf usb0_function_set_pid_buf
+#define usbx_function_disable_brdy_int usb0_function_disable_brdy_int
+#define usbx_function_set_pid_stall usb0_function_set_pid_stall
+#define usbx_function_dma_interrupt_d0fifo usb0_function_dma_interrupt_d0fifo
+#define usbx_function_read_dma usb0_function_read_dma
+#define usbx_function_dma_interrupt_d1fifo usb0_function_dma_interrupt_d1fifo
+#define usbx_function_write_buffer usb0_function_write_buffer
+#define usbx_function_set_pid_nak usb0_function_set_pid_nak
+#define usbx_function_get_mbw usb0_function_get_mbw
+#define usbx_function_set_curpipe usb0_function_set_curpipe
+#define usbx_function_aclrm usb0_function_aclrm
+#define usbx_function_enable_nrdy_int usb0_function_enable_nrdy_int
+#define usbx_function_enable_brdy_int usb0_function_enable_brdy_int
+#define usbx_function_get_pid usb0_function_get_pid
+#define usbx_function_get_inbuf usb0_function_get_inbuf
+#define usbx_function_disable_bemp_int usb0_function_disable_bemp_int
+#define usbx_function_EpToPipe usb0_function_EpToPipe
+#define usbx_function_clear_pipe_tbl usb0_function_clear_pipe_tbl
+#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb0_function_d0fifo_dmaintid
+#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb0_function_d1fifo_dmaintid
+#define usbx_function_reset_module usb0_function_reset_module
+#define usbx_function_init_status usb0_function_init_status
+#define usbx_function_InitModule usb0_function_InitModule
+#define usbx_function_clear_alt usb0_function_clear_alt
+#define usbx_function_set_sqclr usb0_function_set_sqclr
+#define usbx_api_function_CtrlWriteStart usb0_api_function_CtrlWriteStart
+#define usbx_api_function_CtrlReadStart usb0_api_function_CtrlReadStart
+#define usbx_function_write_buffer_c usb0_function_write_buffer_c
+#define usbx_api_function_check_pipe_status usb0_api_function_check_pipe_status
+#define usbx_api_function_set_pid_nak usb0_api_function_set_pid_nak
+#define usbx_api_function_clear_pipe_status usb0_api_function_clear_pipe_status
+#define usbx_api_function_start_receive_transfer usb0_api_function_start_receive_transfer
+#define usbx_function_read_buffer usb0_function_read_buffer
+#define usbx_api_function_start_send_transfer usb0_api_function_start_send_transfer
+#define usbx_function_stop_transfer usb0_function_stop_transfer
+#define usbx_function_clear_pid_stall usb0_function_clear_pid_stall
+#define usbx_function_CheckVBUStaus usb0_function_CheckVBUStaus
+#define usbx_function_USB_FUNCTION_Attach usb0_function_USB_FUNCTION_Attach
+#define usbx_function_USB_FUNCTION_Detach usb0_function_USB_FUNCTION_Detach
+#define usbx_function_is_hispeed usb0_function_is_hispeed
+#define usbx_function_ResetDescriptor usb0_function_ResetDescriptor
+#define usbx_function_USB_FUNCTION_Suspend usb0_function_USB_FUNCTION_Suspend
+#define usbx_function_USB_FUNCTION_TestMode usb0_function_USB_FUNCTION_TestMode
+#else
+#include "usb1_function.h"
+#define USB20X USB201
+#define USBIX_IRQn USBI1_IRQn
+#define g_usbx_function_bit_set g_usb1_function_bit_set
+#define g_usbx_function_PipeDataSize g_usb1_function_PipeDataSize
+#define g_usbx_function_data_count g_usb1_function_data_count
+#define g_usbx_function_PipeTbl g_usb1_function_PipeTbl
+#define g_usbx_function_DmaStatus g_usb1_function_DmaStatus
+#define g_usbx_function_pipecfg g_usb1_function_pipecfg
+#define g_usbx_function_pipe_status g_usb1_function_pipe_status
+#define g_usbx_function_data_pointer g_usb1_function_data_pointer
+#define g_usbx_function_pipebuf g_usb1_function_pipebuf
+#define g_usbx_function_pipemaxp g_usb1_function_pipemaxp
+#define g_usbx_function_pipeperi g_usb1_function_pipeperi
+#define g_usbx_function_TestModeFlag g_usb1_function_TestModeFlag
+#define usbx_function_BRDYInterruptPIPE0 usb1_function_BRDYInterruptPIPE0
+#define usbx_function_BRDYInterrupt usb1_function_BRDYInterrupt
+#define usbx_function_NRDYInterruptPIPE0 usb1_function_NRDYInterruptPIPE0
+#define usbx_function_NRDYInterrupt usb1_function_NRDYInterrupt
+#define usbx_function_BEMPInterruptPIPE0 usb1_function_BEMPInterruptPIPE0
+#define usbx_function_BEMPInterrupt usb1_function_BEMPInterrupt
+#define usbx_function_read_buffer_c usb1_function_read_buffer_c
+#define usbx_function_set_pid_buf usb1_function_set_pid_buf
+#define usbx_function_disable_brdy_int usb1_function_disable_brdy_int
+#define usbx_function_set_pid_stall usb1_function_set_pid_stall
+#define usbx_function_dma_interrupt_d0fifo usb1_function_dma_interrupt_d0fifo
+#define usbx_function_read_dma usb1_function_read_dma
+#define usbx_function_dma_interrupt_d1fifo usb1_function_dma_interrupt_d1fifo
+#define usbx_function_write_buffer usb1_function_write_buffer
+#define usbx_function_set_pid_nak usb1_function_set_pid_nak
+#define usbx_function_get_mbw usb1_function_get_mbw
+#define usbx_function_set_curpipe usb1_function_set_curpipe
+#define usbx_function_aclrm usb1_function_aclrm
+#define usbx_function_enable_nrdy_int usb1_function_enable_nrdy_int
+#define usbx_function_enable_brdy_int usb1_function_enable_brdy_int
+#define usbx_function_get_pid usb1_function_get_pid
+#define usbx_function_get_inbuf usb1_function_get_inbuf
+#define usbx_function_disable_bemp_int usb1_function_disable_bemp_int
+#define usbx_function_EpToPipe usb1_function_EpToPipe
+#define usbx_function_clear_pipe_tbl usb1_function_clear_pipe_tbl
+#define Userdef_USB_usbx_function_d0fifo_dmaintid Userdef_USB_usb1_function_d0fifo_dmaintid
+#define Userdef_USB_usbx_function_d1fifo_dmaintid Userdef_USB_usb1_function_d1fifo_dmaintid
+#define usbx_function_reset_module usb1_function_reset_module
+#define usbx_function_init_status usb1_function_init_status
+#define usbx_function_InitModule usb1_function_InitModule
+#define usbx_function_clear_alt usb1_function_clear_alt
+#define usbx_function_set_sqclr usb1_function_set_sqclr
+#define usbx_api_function_CtrlWriteStart usb1_api_function_CtrlWriteStart
+#define usbx_api_function_CtrlReadStart usb1_api_function_CtrlReadStart
+#define usbx_function_write_buffer_c usb1_function_write_buffer_c
+#define usbx_api_function_check_pipe_status usb1_api_function_check_pipe_status
+#define usbx_api_function_set_pid_nak usb1_api_function_set_pid_nak
+#define usbx_api_function_clear_pipe_status usb1_api_function_clear_pipe_status
+#define usbx_api_function_start_receive_transfer usb1_api_function_start_receive_transfer
+#define usbx_function_read_buffer usb1_function_read_buffer
+#define usbx_api_function_start_send_transfer usb1_api_function_start_send_transfer
+#define usbx_function_stop_transfer usb1_function_stop_transfer
+#define usbx_function_clear_pid_stall usb1_function_clear_pid_stall
+#define usbx_function_CheckVBUStaus usb1_function_CheckVBUStaus
+#define usbx_function_USB_FUNCTION_Attach usb1_function_USB_FUNCTION_Attach
+#define usbx_function_USB_FUNCTION_Detach usb1_function_USB_FUNCTION_Detach
+#define usbx_function_is_hispeed usb1_function_is_hispeed
+#define usbx_function_ResetDescriptor usb1_function_ResetDescriptor
+#define usbx_function_USB_FUNCTION_Suspend usb1_function_USB_FUNCTION_Suspend
+#define usbx_function_USB_FUNCTION_TestMode usb1_function_USB_FUNCTION_TestMode
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* USB_FUNCTION_SETTING_H */
--- a/USBDevice/USBHAL_RZ_A1H.cpp Thu Mar 26 14:30:20 2015 +0000
+++ b/USBDevice/USBHAL_RZ_A1H.cpp Tue Mar 31 16:15:39 2015 +0100
@@ -38,10 +38,10 @@
}
#include "USBHAL.h"
#include "devdrv_usb_function_api.h"
-#include "usb0_function.h"
#include "usb_iobitmask.h"
#include "rza_io_regrw.h"
#include "USBDevice_Types.h"
+#include "usb_function_setting.h"
/*************************************************************************/
@@ -160,7 +160,7 @@
static uint16_t clock_mode; /* input clock selector */
static uint16_t mode; /* USB speed (HIGH/FULL) */
-//static DigitalOut *usb0_en;
+//static DigitalOut *usbx_en;
static uint16_t EP0_read_status;
static uint16_t EPx_read_status;
@@ -175,22 +175,22 @@
/*************************************************************************/
/* prototypes for C */
extern "C" {
- void usb0_function_BRDYInterruptPIPE0 (uint16_t status, uint16_t intenb,
+ void usbx_function_BRDYInterruptPIPE0 (uint16_t status, uint16_t intenb,
USBHAL *object, void (USBHAL::*EP0func)(void));
- void usb0_function_BRDYInterrupt (uint16_t status, uint16_t intenb,
+ void usbx_function_BRDYInterrupt (uint16_t status, uint16_t intenb,
USBHAL *object, bool (USBHAL::*epCallback[])(void));
- void usb0_function_NRDYInterruptPIPE0(uint16_t status, uint16_t intenb,
+ void usbx_function_NRDYInterruptPIPE0(uint16_t status, uint16_t intenb,
USBHAL *object, void (USBHAL::*EP0func)(void));
- void usb0_function_NRDYInterrupt (uint16_t status, uint16_t intenb,
+ void usbx_function_NRDYInterrupt (uint16_t status, uint16_t intenb,
USBHAL *object, bool (USBHAL::*epCallback[])(void));
- void usb0_function_BEMPInterruptPIPE0(uint16_t status, uint16_t intenb,
+ void usbx_function_BEMPInterruptPIPE0(uint16_t status, uint16_t intenb,
USBHAL *object, void (USBHAL::*EP0func)(void));
- void usb0_function_BEMPInterrupt (uint16_t status, uint16_t intenb,
+ void usbx_function_BEMPInterrupt (uint16_t status, uint16_t intenb,
USBHAL *object, bool (USBHAL::*epCallback[])(void));
}
@@ -199,14 +199,14 @@
/* macros */
/******************************************************************************
- * Function Name: usb0_function_BRDYInterruptPIPE0
+ * Function Name: usbx_function_BRDYInterruptPIPE0
* Description : Executes BRDY interrupt for pipe0.
* Arguments : uint16_t status ; BRDYSTS Register Value
* : uint16_t intenb ; BRDYENB Register Value
* Return Value : none
*****************************************************************************/
extern "C" {
- void usb0_function_BRDYInterruptPIPE0 (
+ void usbx_function_BRDYInterruptPIPE0 (
uint16_t status,
uint16_t intenb,
USBHAL *object,
@@ -216,34 +216,34 @@
volatile uint16_t dumy_sts;
uint16_t read_status;
- USB200.BRDYSTS =
- (uint16_t)~g_usb0_function_bit_set[USB_FUNCTION_PIPE0];
+ USB20X.BRDYSTS =
+ (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
RZA_IO_RegWrite_16(
- &USB200.CFIFOSEL, USB_FUNCTION_PIPE0,
+ &USB20X.CFIFOSEL, USB_FUNCTION_PIPE0,
USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
- g_usb0_function_PipeDataSize[USB_FUNCTION_PIPE0] =
- g_usb0_function_data_count[USB_FUNCTION_PIPE0];
+ g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0] =
+ g_usbx_function_data_count[USB_FUNCTION_PIPE0];
- read_status = usb0_function_read_buffer_c(USB_FUNCTION_PIPE0);
+ read_status = usbx_function_read_buffer_c(USB_FUNCTION_PIPE0);
- g_usb0_function_PipeDataSize[USB_FUNCTION_PIPE0] -=
- g_usb0_function_data_count[USB_FUNCTION_PIPE0];
+ g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0] -=
+ g_usbx_function_data_count[USB_FUNCTION_PIPE0];
switch (read_status) {
case USB_FUNCTION_READING: /* Continue of data read */
case USB_FUNCTION_READEND: /* End of data read */
/* PID = BUF */
- usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);
+ usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
/*callback*/
(object->*EP0func)();
break;
case USB_FUNCTION_READSHRT: /* End of data read */
- usb0_function_disable_brdy_int(USB_FUNCTION_PIPE0);
+ usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
/* PID = BUF */
- usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);
+ usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
/*callback*/
(object->*EP0func)();
@@ -251,10 +251,10 @@
case USB_FUNCTION_READOVER: /* FIFO access error */
/* Buffer Clear */
- USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
- usb0_function_disable_brdy_int(USB_FUNCTION_PIPE0);
+ USB20X.CFIFOCTR = USB_FUNCTION_BITBCLR;
+ usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
/* Req Error */
- usb0_function_set_pid_stall(USB_FUNCTION_PIPE0);
+ usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
/*callback*/
(object->*EP0func)();
@@ -262,26 +262,26 @@
case DEVDRV_USBF_FIFOERROR: /* FIFO access error */
default:
- usb0_function_disable_brdy_int(USB_FUNCTION_PIPE0);
+ usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
/* Req Error */
- usb0_function_set_pid_stall(USB_FUNCTION_PIPE0);
+ usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
break;
}
/* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB200.BRDYSTS;
+ dumy_sts = USB20X.BRDYSTS;
}
}
/******************************************************************************
- * Function Name: usb0_function_BRDYInterrupt
+ * Function Name: usbx_function_BRDYInterrupt
* Description : Executes BRDY interrupt uxclude pipe0.
* Arguments : uint16_t status ; BRDYSTS Register Value
* : uint16_t intenb ; BRDYENB Register Value
* Return Value : none
*****************************************************************************/
extern "C" {
- void usb0_function_BRDYInterrupt(
+ void usbx_function_BRDYInterrupt(
uint16_t status,
uint16_t intenb,
USBHAL *object,
@@ -291,7 +291,7 @@
volatile uint16_t dumy_sts;
/**************************************************************
- * Function Name: usb0_function_brdy_int
+ * Function Name: usbx_function_brdy_int
* Description : Executes BRDY interrupt(USB_FUNCTION_PIPE1-9).
* : According to the pipe that interrupt is generated in,
* : reads/writes buffer allocated in the pipe.
@@ -303,59 +303,59 @@
* : uint16_t Int_enbl ; BRDYENB Register Value
* Return Value : none
*************************************************************/
- /* copied from usb0_function_intrn.c */
+ /* copied from usbx_function_intrn.c */
uint32_t int_sense = 0;
uint16_t pipe;
uint16_t pipebit;
uint16_t ep;
for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
- pipebit = g_usb0_function_bit_set[pipe];
+ pipebit = g_usbx_function_bit_set[pipe];
if ((status & pipebit) && (intenb & pipebit)) {
- USB200.BRDYSTS = (uint16_t)~pipebit;
- USB200.BEMPSTS = (uint16_t)~pipebit;
+ USB20X.BRDYSTS = (uint16_t)~pipebit;
+ USB20X.BEMPSTS = (uint16_t)~pipebit;
- switch (g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
+ switch (g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
case USB_FUNCTION_D0FIFO_DMA:
- if (g_usb0_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY) {
+ if (g_usbx_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY) {
/*now, DMA is not supported*/
- usb0_function_dma_interrupt_d0fifo(int_sense);
+ usbx_function_dma_interrupt_d0fifo(int_sense);
}
if (RZA_IO_RegRead_16(
- &g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
+ &g_usbx_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
/*now, DMA is not supported*/
- usb0_function_read_dma(pipe);
- usb0_function_disable_brdy_int(pipe);
+ usbx_function_read_dma(pipe);
+ usbx_function_disable_brdy_int(pipe);
} else {
- USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ USB20X.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
}
break;
case USB_FUNCTION_D1FIFO_DMA:
- if (g_usb0_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY) {
+ if (g_usbx_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY) {
/*now, DMA is not supported*/
- usb0_function_dma_interrupt_d1fifo(int_sense);
+ usbx_function_dma_interrupt_d1fifo(int_sense);
}
if (RZA_IO_RegRead_16(
- &g_usb0_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
+ &g_usbx_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
/*now, DMA is not supported*/
- usb0_function_read_dma(pipe);
- usb0_function_disable_brdy_int(pipe);
+ usbx_function_read_dma(pipe);
+ usbx_function_disable_brdy_int(pipe);
} else {
- USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ USB20X.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+ g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
}
break;
default:
- ep = (g_usb0_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
+ ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
ep <<= 1;
if (RZA_IO_RegRead_16(
- &g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
+ &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
/* read */
EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
(object->*(epCallback[ep - 2])) ();
@@ -365,26 +365,26 @@
EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
(object->*(epCallback[ep - 2 + 1])) ();
EPx_read_status = DEVDRV_USBF_PIPE_DONE;
- usb0_function_write_buffer(pipe);
+ usbx_function_write_buffer(pipe);
}
}
}
}
/* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB200.BRDYSTS;
+ dumy_sts = USB20X.BRDYSTS;
}
}
/******************************************************************************
- * Function Name: usb0_function_NRDYInterruptPIPE0
+ * Function Name: usbx_function_NRDYInterruptPIPE0
* Description : Executes NRDY interrupt for pipe0.
* Arguments : uint16_t status ; NRDYSTS Register Value
* : uint16_t intenb ; NRDYENB Register Value
* Return Value : none
*****************************************************************************/
extern "C" {
- void usb0_function_NRDYInterruptPIPE0(
+ void usbx_function_NRDYInterruptPIPE0(
uint16_t status,
uint16_t intenb,
USBHAL *object,
@@ -393,24 +393,24 @@
{
volatile uint16_t dumy_sts;
- USB200.NRDYSTS =
- (uint16_t)~g_usb0_function_bit_set[USB_FUNCTION_PIPE0];
+ USB20X.NRDYSTS =
+ (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
/* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB200.NRDYSTS;
+ dumy_sts = USB20X.NRDYSTS;
}
}
/******************************************************************************
- * Function Name: usb0_function_NRDYInterrupt
+ * Function Name: usbx_function_NRDYInterrupt
* Description : Executes NRDY interrupt exclude pipe0.
* Arguments : uint16_t status ; NRDYSTS Register Value
* : uint16_t intenb ; NRDYENB Register Value
* Return Value : none
*****************************************************************************/
extern "C" {
- void usb0_function_NRDYInterrupt(
+ void usbx_function_NRDYInterrupt(
uint16_t status,
uint16_t intenb,
USBHAL *object,
@@ -420,7 +420,7 @@
volatile uint16_t dumy_sts;
/**************************************************************
- * Function Name: usb0_function_nrdy_int
+ * Function Name: usbx_function_nrdy_int
* Description : Executes NRDY interrupt(USB_FUNCTION_PIPE1-9).
* : Checks NRDY interrupt cause by PID. When the cause if STALL,
* : regards the pipe state as STALL and ends the processing.
@@ -433,7 +433,7 @@
* : uint16_t int_enb ; NRDYENB Register Value
* Return Value : none
*************************************************************/
- /* copied from usb0_function_intrn.c */
+ /* copied from usbx_function_intrn.c */
#if 0
uint16_t usefifo;
#endif
@@ -448,72 +448,72 @@
bitcheck = (uint16_t)(status & intenb);
- USB200.NRDYSTS = (uint16_t)~status;
+ USB20X.NRDYSTS = (uint16_t)~status;
- if (RZA_IO_RegRead_16(&USB200.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1) {
+ if (RZA_IO_RegRead_16(&USB20X.SYSCFG0, USB_SYSCFG_DCFM_SHIFT, USB_SYSCFG_DCFM) == 1) {
/* USB HOST */
/* not support */
} else {
/* USB Function */
for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
- if ((bitcheck&g_usb0_function_bit_set[pipe]) != g_usb0_function_bit_set[pipe]) {
+ if ((bitcheck&g_usbx_function_bit_set[pipe]) != g_usbx_function_bit_set[pipe]) {
continue;
}
- if (g_usb0_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_WAIT) {
+ if (g_usbx_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_WAIT) {
continue;
}
#if 0
- usb0_function_set_pid_nak(pipe);
+ usbx_function_set_pid_nak(pipe);
- size = (uint32_t)g_usb0_function_data_count[pipe];
- mbw = usb0_function_get_mbw(
- size, (uint32_t)g_usb0_function_data_pointer[pipe]);
+ size = (uint32_t)g_usbx_function_data_count[pipe];
+ mbw = usbx_function_get_mbw(
+ size, (uint32_t)g_usbx_function_data_pointer[pipe]);
- usefifo = (uint16_t)(g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
+ usefifo = (uint16_t)(g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
switch (usefifo) {
case USB_FUNCTION_D0FIFO_USE:
- usb0_function_set_curpipe(
+ usbx_function_set_curpipe(
pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
- USB200.D0FIFOCTR = USB_FUNCTION_BITBCLR;
+ USB20X.D0FIFOCTR = USB_FUNCTION_BITBCLR;
break;
case USB_FUNCTION_D1FIFO_USE:
- usb0_function_set_curpipe(
+ usbx_function_set_curpipe(
pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
- USB200.D1FIFOCTR = USB_FUNCTION_BITBCLR;
+ USB20X.D1FIFOCTR = USB_FUNCTION_BITBCLR;
break;
default:
- usb0_function_set_curpipe(
+ usbx_function_set_curpipe(
pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
- USB200.CFIFOCTR = USB_FUNCTION_BITBCLR;
+ USB20X.CFIFOCTR = USB_FUNCTION_BITBCLR;
break;
}
- usb0_function_aclrm(pipe);
+ usbx_function_aclrm(pipe);
- usb0_function_enable_nrdy_int(pipe);
- usb0_function_enable_brdy_int(pipe);
+ usbx_function_enable_nrdy_int(pipe);
+ usbx_function_enable_brdy_int(pipe);
- usb0_function_set_pid_buf(pipe);
+ usbx_function_set_pid_buf(pipe);
#endif
- pid = usb0_function_get_pid(pipe);
+ pid = usbx_function_get_pid(pipe);
if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2)) {
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+ g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
} else {
- usb0_function_set_pid_buf(pipe);
+ usbx_function_set_pid_buf(pipe);
}
- ep = (g_usb0_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
+ ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
ep <<= 1;
if (RZA_IO_RegRead_16(
- &g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
+ &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
/* read */
__NOP();
} else {
@@ -524,19 +524,19 @@
}
/* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB200.NRDYSTS;
+ dumy_sts = USB20X.NRDYSTS;
}
}
/******************************************************************************
- * Function Name: usb0_function_BEMPInterruptPIPE0
+ * Function Name: usbx_function_BEMPInterruptPIPE0
* Description : Executes BEMP interrupt for pipe0.
* Arguments : uint16_t status ; BEMPSTS Register Value
* : uint16_t intenb ; BEMPENB Register Value
* Return Value : none
*****************************************************************************/
extern "C" {
- void usb0_function_BEMPInterruptPIPE0(
+ void usbx_function_BEMPInterruptPIPE0(
uint16_t status,
uint16_t intenb,
USBHAL *object,
@@ -545,30 +545,30 @@
{
volatile uint16_t dumy_sts;
- USB200.BEMPSTS =
- (uint16_t)~g_usb0_function_bit_set[USB_FUNCTION_PIPE0];
+ USB20X.BEMPSTS =
+ (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
RZA_IO_RegWrite_16(
- &USB200.CFIFOSEL, USB_FUNCTION_PIPE0,
+ &USB20X.CFIFOSEL, USB_FUNCTION_PIPE0,
USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
- /*usb0_function_write_buffer_c(USB_FUNCTION_PIPE0);*/
+ /*usbx_function_write_buffer_c(USB_FUNCTION_PIPE0);*/
(object->*EP0func)();
/* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB200.BEMPSTS;
+ dumy_sts = USB20X.BEMPSTS;
}
}
/******************************************************************************
- * Function Name: usb0_function_BEMPInterrupt
+ * Function Name: usbx_function_BEMPInterrupt
* Description : Executes BEMP interrupt exclude pipe0.
* Arguments : uint16_t status ; BEMPSTS Register Value
* : uint16_t intenb ; BEMPENB Register Value
* Return Value : none
*****************************************************************************/
extern "C" {
- void usb0_function_BEMPInterrupt(
+ void usbx_function_BEMPInterrupt(
uint16_t status,
uint16_t intenb,
USBHAL *object,
@@ -578,13 +578,13 @@
volatile uint16_t dumy_sts;
/**************************************************************
- * Function Name: usb0_function_bemp_int
+ * Function Name: usbx_function_bemp_int
* Description : Executes BEMP interrupt(USB_FUNCTION_PIPE1-9).
* Arguments : uint16_t status ; BEMPSTS Register Value
* : uint16_t intenb ; BEMPENB Register Value
* Return Value : none
*************************************************************/
- /* copied from usb0_function_intrn.c */
+ /* copied from usbx_function_intrn.c */
uint16_t pid;
uint16_t pipe;
uint16_t bitcheck;
@@ -593,28 +593,28 @@
bitcheck = (uint16_t)(status & intenb);
- USB200.BEMPSTS = (uint16_t)~status;
+ USB20X.BEMPSTS = (uint16_t)~status;
for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
- if ((bitcheck&g_usb0_function_bit_set[pipe]) != g_usb0_function_bit_set[pipe]) {
+ if ((bitcheck&g_usbx_function_bit_set[pipe]) != g_usbx_function_bit_set[pipe]) {
continue;
}
- pid = usb0_function_get_pid(pipe);
+ pid = usbx_function_get_pid(pipe);
if ((pid == DEVDRV_USBF_PID_STALL) ||
(pid == DEVDRV_USBF_PID_STALL2)) {
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
+ g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
} else {
- inbuf = usb0_function_get_inbuf(pipe);
+ inbuf = usbx_function_get_inbuf(pipe);
if (inbuf == 0) {
- usb0_function_disable_bemp_int(pipe);
- usb0_function_set_pid_nak(pipe);
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
+ usbx_function_disable_bemp_int(pipe);
+ usbx_function_set_pid_nak(pipe);
+ g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- switch (g_usb0_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
+ switch (g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
case USB_FUNCTION_D0FIFO_DMA:
/*now, DMA is not supported*/
break;
@@ -624,10 +624,10 @@
break;
default:
- ep = (g_usb0_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
+ ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
ep <<= 1;
if (RZA_IO_RegRead_16(
- &g_usb0_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
+ &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
/* read */
__NOP();
} else {
@@ -642,7 +642,7 @@
}
/* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB200.BEMPSTS;
+ dumy_sts = USB20X.BEMPSTS;
}
}
@@ -653,28 +653,28 @@
* Return Value : number of pipe
*****************************************************************************/
/*EP2PIPE converter is for pipe1, pipe3 and pipe6 only.*/
-#define EP2PIPE(endpoint) ((uint32_t)usb0_function_EpToPipe(endpoint))
+#define EP2PIPE(endpoint) ((uint32_t)usbx_function_EpToPipe(endpoint))
/******************************************************************************
- * Function Name: usb0_function_save_request
+ * Function Name: usbx_function_save_request
* Description : Retains the USB request information in variables.
* Arguments : none
* Return Value : none
*****************************************************************************/
-#define usb0_function_save_request() \
+#define usbx_function_save_request() \
{ \
uint16_t *bufO = &setup_buffer[0]; \
\
- USB200.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVALID; \
+ USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVALID; \
/*data[0] <= bmRequest, data[1] <= bmRequestType */ \
- *bufO++ = USB200.USBREQ; \
+ *bufO++ = USB20X.USBREQ; \
/*data[2] data[3] <= wValue*/ \
- *bufO++ = USB200.USBVAL; \
+ *bufO++ = USB20X.USBVAL; \
/*data[4] data[5] <= wIndex*/ \
- *bufO++ = USB200.USBINDX; \
+ *bufO++ = USB20X.USBINDX; \
/*data[6] data[6] <= wIndex*/ \
- *bufO++ = USB200.USBLENG; \
+ *bufO++ = USB20X.USBLENG; \
}
@@ -687,16 +687,16 @@
USBHAL::USBHAL(void)
{
/* ---- P4_1 : P4_1 (USB0_EN for GR-PEACH) ---- */
- //usb0_en = new DigitalOut(P4_1, 1);
+ //usbx_en = new DigitalOut(P4_1, 1);
/* some constants */
- int_id = USBI0_IRQn;
+ int_id = USBIX_IRQn;
int_level = ( 2 << 3 );
clock_mode = USBFCLOCK_X1_48MHZ;
-#if 1
+#if (USB_FUNCTION_HISPEED == 0)
+ mode = USB_FUNCTION_FULL_SPEED;
+#else
mode = USB_FUNCTION_HIGH_SPEED;
-#else
- mode = USB_FUNCTION_FULL_SPEED;
#endif
EP0_read_status = DEVDRV_USBF_WRITEEND;
EPx_read_status = DEVDRV_USBF_PIPE_DONE;
@@ -740,20 +740,24 @@
instance = this;
/* Clear pipe table */
- usb0_function_clear_pipe_tbl();
+ usbx_function_clear_pipe_tbl();
/******************************************************************************
- * Function Name: usb0_api_function_init
+ * Function Name: usbx_api_function_init
* Description : Initializes the USB module in the USB function mode.
*****************************************************************************/
/* The clock of USB0 modules is permitted */
+#if (USB_FUNCTION_CH == 0)
CPG.STBCR7 &= ~(CPG_STBCR7_MSTP71);
+#else
+ CPG.STBCR7 &= ~(CPG_STBCR7_MSTP71 | CPG_STBCR7_MSTP70);
+#endif
volatile uint8_t dummy8;
dummy8 = CPG.STBCR7;
{
/******************************************************************************
- * Function Name: usb0_function_setting_interrupt
+ * Function Name: usbx_function_setting_interrupt
* Description : Sets the USB module interrupt level.
*****************************************************************************/
#if 0 /*DMA is not supported*/
@@ -766,18 +770,18 @@
GIC_EnableIRQ(int_id);
#if 0 /*DMA is not supported*/
- d0fifo_dmaintid = Userdef_USB_usb0_function_d0fifo_dmaintid();
+ d0fifo_dmaintid = Userdef_USB_usbx_function_d0fifo_dmaintid();
if (d0fifo_dmaintid != 0xFFFF) {
- InterruptHandlerRegister(d0fifo_dmaintid, usb0_function_dma_interrupt_d0fifo);
+ InterruptHandlerRegister(d0fifo_dmaintid, usbx_function_dma_interrupt_d0fifo);
GIC_SetPriority(d0fifo_dmaintid, int_level);
GIC_EnableIRQ(d0fifo_dmaintid);
}
#endif
#if 0 /*DMA is not supported*/
- d1fifo_dmaintid = Userdef_USB_usb0_function_d1fifo_dmaintid();
+ d1fifo_dmaintid = Userdef_USB_usbx_function_d1fifo_dmaintid();
if (d1fifo_dmaintid != 0xFFFF) {
- InterruptHandlerRegister(d1fifo_dmaintid, usb0_function_dma_interrupt_d1fifo);
+ InterruptHandlerRegister(d1fifo_dmaintid, usbx_function_dma_interrupt_d1fifo);
GIC_SetPriority(d1fifo_dmaintid, int_level);
GIC_EnableIRQ(d1fifo_dmaintid);
}
@@ -786,20 +790,20 @@
}
/* reset USB module with setting tranciever and HSE=1 */
- usb0_function_reset_module(clock_mode);
+ usbx_function_reset_module(clock_mode);
/* clear variables */
- usb0_function_init_status();
+ usbx_function_init_status();
/* select USB Function and Interrupt Enable */
/* Detect USB Device to attach or detach */
- usb0_function_InitModule(mode);
+ usbx_function_InitModule(mode);
{
uint16_t buf;
- buf = USB200.INTENB0;
+ buf = USB20X.INTENB0;
buf |= USB_INTENB0_SOFE;
- USB200.INTENB0 = buf;
+ USB20X.INTENB0 = buf;
}
}
@@ -811,7 +815,7 @@
/* Unregisters interrupt function and priority */
InterruptHandlerRegister( int_id, (uint32_t)NULL );
- //usb0_en = NULL;
+ //usbx_en = NULL;
instance = NULL;
}
@@ -819,7 +823,7 @@
void USBHAL::connect(void)
{
/* Activates USB0_EN */
- //(*usb0_en) = 0;
+ //(*usbx_en) = 0;
}
@@ -827,7 +831,7 @@
void USBHAL::disconnect(void)
{
/* Deactivates USB0_EN */
- //(*usb0_en) = 1;
+ //(*usbx_en) = 1;
}
@@ -835,8 +839,8 @@
void USBHAL::configureDevice(void)
{
/*The pipes set up in USBHAL::realiseEndpoint*/
- /*usb0_function_clear_alt();*/ /* Alternate setting clear */
- /*usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
+ /*usbx_function_clear_alt();*/ /* Alternate setting clear */
+ /*usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
}
@@ -844,8 +848,8 @@
void USBHAL::unconfigureDevice(void)
{
/* The Interface would be managed by USBDevice */
- /*usb0_function_clear_alt();*/ /* Alternate setting clear */
- /*usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
+ /*usbx_function_clear_alt();*/ /* Alternate setting clear */
+ /*usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
}
@@ -853,9 +857,9 @@
void USBHAL::setAddress(uint8_t address)
{
if (address <= 127) {
- usb0_function_set_pid_buf(USB_FUNCTION_PIPE0); /* OK */
+ usbx_function_set_pid_buf(USB_FUNCTION_PIPE0); /* OK */
} else {
- usb0_function_set_pid_stall(USB_FUNCTION_PIPE0); /* Not Spec */
+ usbx_function_set_pid_stall(USB_FUNCTION_PIPE0); /* Not Spec */
}
}
@@ -882,7 +886,7 @@
pipe = ((cfg->pipesel & USB_PIPESEL_PIPESEL) >> USB_PIPESEL_PIPESEL_SHIFT);
- g_usb0_function_PipeTbl[ pipe ] = (uint16_t)(endpoint | ((cfg->pipesel & USB_FUNCTION_FIFO_USE) << 0));
+ g_usbx_function_PipeTbl[ pipe ] = (uint16_t)(endpoint | ((cfg->pipesel & USB_FUNCTION_FIFO_USE) << 0));
/* There are maintenance routine of SHTNAK and BFRE bits
* in original sample program. This sample is not
@@ -890,50 +894,50 @@
* you want it. */
/* Interrupt Disable */
- buf = USB200.BRDYENB;
- buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
- USB200.BRDYENB = buf;
- buf = USB200.NRDYENB;
- buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
- USB200.NRDYENB = buf;
- buf = USB200.BEMPENB;
- buf &= (uint16_t)~g_usb0_function_bit_set[pipe];
- USB200.BEMPENB = buf;
+ buf = USB20X.BRDYENB;
+ buf &= (uint16_t)~g_usbx_function_bit_set[pipe];
+ USB20X.BRDYENB = buf;
+ buf = USB20X.NRDYENB;
+ buf &= (uint16_t)~g_usbx_function_bit_set[pipe];
+ USB20X.NRDYENB = buf;
+ buf = USB20X.BEMPENB;
+ buf &= (uint16_t)~g_usbx_function_bit_set[pipe];
+ USB20X.BEMPENB = buf;
- usb0_function_set_pid_nak(pipe);
+ usbx_function_set_pid_nak(pipe);
/* CurrentPIPE Clear */
- if (RZA_IO_RegRead_16(&USB200.CFIFOSEL, USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE) == pipe) {
- RZA_IO_RegWrite_16(&USB200.CFIFOSEL, 0, USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
+ if (RZA_IO_RegRead_16(&USB20X.CFIFOSEL, USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE) == pipe) {
+ RZA_IO_RegWrite_16(&USB20X.CFIFOSEL, 0, USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
}
- if (RZA_IO_RegRead_16(&USB200.D0FIFOSEL, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE) == pipe) {
- RZA_IO_RegWrite_16(&USB200.D0FIFOSEL, 0, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE);
+ if (RZA_IO_RegRead_16(&USB20X.D0FIFOSEL, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE) == pipe) {
+ RZA_IO_RegWrite_16(&USB20X.D0FIFOSEL, 0, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE);
}
- if (RZA_IO_RegRead_16(&USB200.D1FIFOSEL, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE) == pipe) {
- RZA_IO_RegWrite_16(&USB200.D1FIFOSEL, 0, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE);
+ if (RZA_IO_RegRead_16(&USB20X.D1FIFOSEL, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE) == pipe) {
+ RZA_IO_RegWrite_16(&USB20X.D1FIFOSEL, 0, USB_DnFIFOSEL_CURPIPE_SHIFT, USB_DnFIFOSEL_CURPIPE);
}
/* PIPE Configuration */
- USB200.PIPESEL = pipe;
- USB200.PIPECFG = cfg->pipecfg;
- USB200.PIPEBUF = cfg->pipebuf;
- USB200.PIPEMAXP = cfg->pipemaxp;
- USB200.PIPEPERI = cfg->pipeperi;
+ USB20X.PIPESEL = pipe;
+ USB20X.PIPECFG = cfg->pipecfg;
+ USB20X.PIPEBUF = cfg->pipebuf;
+ USB20X.PIPEMAXP = cfg->pipemaxp;
+ USB20X.PIPEPERI = cfg->pipeperi;
- g_usb0_function_pipecfg[pipe] = cfg->pipecfg;
- g_usb0_function_pipebuf[pipe] = cfg->pipebuf;
- g_usb0_function_pipemaxp[pipe] = cfg->pipemaxp;
- g_usb0_function_pipeperi[pipe] = cfg->pipeperi;
+ g_usbx_function_pipecfg[pipe] = cfg->pipecfg;
+ g_usbx_function_pipebuf[pipe] = cfg->pipebuf;
+ g_usbx_function_pipemaxp[pipe] = cfg->pipemaxp;
+ g_usbx_function_pipeperi[pipe] = cfg->pipeperi;
/* Buffer Clear */
- usb0_function_set_sqclr(pipe);
- usb0_function_aclrm(pipe);
+ usbx_function_set_sqclr(pipe);
+ usbx_function_aclrm(pipe);
/* init Global */
- g_usb0_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
- g_usb0_function_PipeDataSize[pipe] = 0;
+ g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
+ g_usbx_function_PipeDataSize[pipe] = 0;
return true;
}
@@ -968,16 +972,16 @@
buffer = (uint8_t*)(&setup_buffer[4]);
size = (MAX_PACKET_SIZE_EP0 / 2) - 8;
- usb0_api_function_CtrlWriteStart(size, buffer);
+ usbx_api_function_CtrlWriteStart(size, buffer);
}
/*************************************************************************/
uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
{
- memcpy(buffer, (uint8_t*)(&setup_buffer[4]), g_usb0_function_PipeDataSize[USB_FUNCTION_PIPE0]);
+ memcpy(buffer, (uint8_t*)(&setup_buffer[4]), g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0]);
- return g_usb0_function_PipeDataSize[USB_FUNCTION_PIPE0];
+ return g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0];
}
@@ -991,13 +995,13 @@
if (EP0_read_status == DEVDRV_USBF_WRITEEND) {
/*1st block*/
- EP0_read_status = usb0_api_function_CtrlReadStart(size, buffer);
+ EP0_read_status = usbx_api_function_CtrlReadStart(size, buffer);
} else {
/* waits the last transmission */
/*other blocks*/
- g_usb0_function_data_count[ USB_FUNCTION_PIPE0 ] = size;
- g_usb0_function_data_pointer [ USB_FUNCTION_PIPE0 ] = buffer;
- EP0_read_status = usb0_function_write_buffer_c(USB_FUNCTION_PIPE0);
+ g_usbx_function_data_count[ USB_FUNCTION_PIPE0 ] = size;
+ g_usbx_function_data_pointer [ USB_FUNCTION_PIPE0 ] = buffer;
+ EP0_read_status = usbx_function_write_buffer_c(USB_FUNCTION_PIPE0);
}
/*max size may be deblocking outside*/
if (size == MAX_PACKET_SIZE_EP0) {
@@ -1028,15 +1032,15 @@
uint16_t pipe_status;
EP_STATUS status = EP_COMPLETED;
- pipe_status = usb0_api_function_check_pipe_status(pipe, &pipe_size);
+ pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
switch (pipe_status) {
case DEVDRV_USBF_PIPE_IDLE:
case DEVDRV_USBF_PIPE_WAIT:
- usb0_api_function_set_pid_nak(pipe);
- usb0_api_function_clear_pipe_status(pipe);
+ usbx_api_function_set_pid_nak(pipe);
+ usbx_api_function_clear_pipe_status(pipe);
- usb0_api_function_start_receive_transfer(pipe, max_size, recv_buffer);
+ usbx_api_function_start_receive_transfer(pipe, max_size, recv_buffer);
break;
default:
@@ -1061,7 +1065,7 @@
return status;
}
- pipe_status = usb0_api_function_check_pipe_status(pipe, bytes_read);
+ pipe_status = usbx_api_function_check_pipe_status(pipe, bytes_read);
switch (pipe_status) {
case DEVDRV_USBF_PIPE_IDLE:
return EP_COMPLETED;
@@ -1077,16 +1081,16 @@
}
/* sets the output buffer and size */
- g_usb0_function_data_pointer[pipe] = buffer;
+ g_usbx_function_data_pointer[pipe] = buffer;
/* receives data from pipe */
- err = usb0_function_read_buffer(pipe);
+ err = usbx_function_read_buffer(pipe);
recv_error = err;
switch (err) {
case USB_FUNCTION_READEND:
case USB_FUNCTION_READSHRT:
case USB_FUNCTION_READOVER:
- *bytes_read = g_usb0_function_PipeDataSize[pipe];
+ *bytes_read = g_usbx_function_PipeDataSize[pipe];
break;
case USB_FUNCTION_READING:
@@ -1094,7 +1098,7 @@
break;
}
- pipe_status = usb0_api_function_check_pipe_status(pipe, bytes_read);
+ pipe_status = usbx_api_function_check_pipe_status(pipe, bytes_read);
switch (pipe_status) {
case DEVDRV_USBF_PIPE_DONE:
status = EP_COMPLETED;
@@ -1122,12 +1126,12 @@
uint16_t count;
EP_STATUS status = EP_PENDING;
- pipe_status = usb0_api_function_check_pipe_status(pipe, &pipe_size);
+ pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
/* waits the last transmission */
count = 30000;
while ((pipe_status == DEVDRV_USBF_PIPE_WAIT) || (pipe_status == DEVDRV_USBF_PIPE_DONE)) {
- pipe_status = usb0_api_function_check_pipe_status(pipe, &pipe_size);
+ pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
if( --count == 0 ) {
pipe_status = DEVDRV_USBF_PIPE_STALL;
break;
@@ -1136,7 +1140,7 @@
switch (pipe_status) {
case DEVDRV_USBF_PIPE_IDLE:
- err = usb0_api_function_start_send_transfer(pipe, size, data);
+ err = usbx_api_function_start_send_transfer(pipe, size, data);
switch (err) {
/* finish to write */
@@ -1178,7 +1182,7 @@
uint16_t pipe_status;
EP_STATUS status = EP_PENDING;
- pipe_status = usb0_api_function_check_pipe_status(pipe, &pipe_size);
+ pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
switch (pipe_status) {
case DEVDRV_USBF_PIPE_IDLE:
@@ -1190,7 +1194,7 @@
break;
case DEVDRV_USBF_PIPE_DONE:
- usb0_function_stop_transfer(pipe);
+ usbx_function_stop_transfer(pipe);
status = EP_COMPLETED;
break;
@@ -1215,7 +1219,7 @@
{
uint32_t pipe = EP2PIPE(endpoint);
- usb0_function_clear_pid_stall(pipe);
+ usbx_function_clear_pid_stall(pipe);
}
@@ -1224,7 +1228,7 @@
{
uint32_t pipe = EP2PIPE(endpoint);
- usb0_function_set_pid_stall( pipe );
+ usbx_function_set_pid_stall( pipe );
}
@@ -1264,7 +1268,7 @@
volatile uint16_t dumy_sts;
- int_sts0 = USB200.INTSTS0;
+ int_sts0 = USB20X.INTSTS0;
if (!(int_sts0 & (
USB_FUNCTION_BITVBINT |
@@ -1278,81 +1282,81 @@
return;
}
- int_sts1 = USB200.BRDYSTS;
- int_sts2 = USB200.NRDYSTS;
- int_sts3 = USB200.BEMPSTS;
- int_enb0 = USB200.INTENB0;
- int_enb2 = USB200.BRDYENB;
- int_enb3 = USB200.NRDYENB;
- int_enb4 = USB200.BEMPENB;
+ int_sts1 = USB20X.BRDYSTS;
+ int_sts2 = USB20X.NRDYSTS;
+ int_sts3 = USB20X.BEMPSTS;
+ int_enb0 = USB20X.INTENB0;
+ int_enb2 = USB20X.BRDYENB;
+ int_enb3 = USB20X.NRDYENB;
+ int_enb4 = USB20X.BEMPENB;
if ((int_sts0 & USB_FUNCTION_BITRESM) &&
(int_enb0 & USB_FUNCTION_BITRSME)) {
- USB200.INTSTS0 = (uint16_t)~USB_FUNCTION_BITRESM;
- RZA_IO_RegWrite_16(&USB200.INTENB0, 0, USB_INTENB0_RSME_SHIFT, USB_INTENB0_RSME);
- /*usb0_function_USB_FUNCTION_Resume();*/
+ USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITRESM;
+ RZA_IO_RegWrite_16(&USB20X.INTENB0, 0, USB_INTENB0_RSME_SHIFT, USB_INTENB0_RSME);
+ /*usbx_function_USB_FUNCTION_Resume();*/
suspendStateChanged(1);
} else if (
(int_sts0 & USB_FUNCTION_BITVBINT) &&
(int_enb0 & USB_FUNCTION_BITVBSE)) {
- USB200.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVBINT;
+ USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVBINT;
- if (usb0_function_CheckVBUStaus() == DEVDRV_USBF_ON) {
- usb0_function_USB_FUNCTION_Attach();
+ if (usbx_function_CheckVBUStaus() == DEVDRV_USBF_ON) {
+ usbx_function_USB_FUNCTION_Attach();
} else {
- usb0_function_USB_FUNCTION_Detach();
+ usbx_function_USB_FUNCTION_Detach();
}
} else if (
(int_sts0 & USB_FUNCTION_BITSOFR) &&
(int_enb0 & USB_FUNCTION_BITSOFE)) {
- USB200.INTSTS0 = (uint16_t)~USB_FUNCTION_BITSOFR;
- SOF((USB200.FRMNUM & USB_FRMNUM_FRNM) >> USB_FRMNUM_FRNM_SHIFT);
+ USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITSOFR;
+ SOF((USB20X.FRMNUM & USB_FRMNUM_FRNM) >> USB_FRMNUM_FRNM_SHIFT);
} else if (
(int_sts0 & USB_FUNCTION_BITDVST) &&
(int_enb0 & USB_FUNCTION_BITDVSE)) {
- USB200.INTSTS0 = (uint16_t)~USB_FUNCTION_BITDVST;
+ USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITDVST;
switch (int_sts0 & USB_FUNCTION_BITDVSQ) {
case USB_FUNCTION_DS_POWR:
break;
case USB_FUNCTION_DS_DFLT:
/*****************************************************************************
- * Function Name: usb0_function_USB_FUNCTION_BusReset
+ * Function Name: usbx_function_USB_FUNCTION_BusReset
* Description : This function is executed when the USB device is transitioned
* : to POWERD_STATE. Sets the device descriptor according to the
* : connection speed determined by the USB reset hand shake.
* Arguments : none
* Return Value : none
*****************************************************************************/
- usb0_function_init_status(); /* memory clear */
+ usbx_function_init_status(); /* memory clear */
#if 0
/* You would program those steps in USBCallback_busReset
* if the system need the comment out steps.
*/
- if (usb0_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED) {
+ if (usbx_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED) {
/* Device Descriptor reset */
- usb0_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);
+ usbx_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);
} else {
/* Device Descriptor reset */
- usb0_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);
+ usbx_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);
}
#endif
/* Default Control PIPE reset */
/*****************************************************************************
- * Function Name: usb0_function_ResetDCP
+ * Function Name: usbx_function_ResetDCP
* Description : Initializes the default control pipe(DCP).
* Outline : Reset default control pipe
* Arguments : none
* Return Value : none
*****************************************************************************/
- USB200.DCPCFG = 0;
- USB200.DCPMAXP = 64; /*TODO: This value is copied from sample*/
+ USB20X.DCPCFG = 0;
+ USB20X.DCPMAXP = 64; /*TODO: This value is copied from sample*/
- USB200.CFIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
- USB200.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
- USB200.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+ USB20X.CFIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+ USB20X.D0FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
+ USB20X.D1FIFOSEL = (uint16_t)(USB_FUNCTION_BITMBW_8 | USB_FUNCTION_BITBYTE_LITTLE);
busReset();
break;
@@ -1368,7 +1372,7 @@
case USB_FUNCTION_DS_SPD_ADDR:
case USB_FUNCTION_DS_SPD_CNFG:
suspendStateChanged(0);
- /*usb0_function_USB_FUNCTION_Suspend();*/
+ /*usbx_function_USB_FUNCTION_Suspend();*/
break;
default:
@@ -1377,50 +1381,50 @@
} else if (
(int_sts0 & USB_FUNCTION_BITBEMP) &&
(int_enb0 & USB_FUNCTION_BITBEMP) &&
- ((int_sts3 & int_enb4) & g_usb0_function_bit_set[USB_FUNCTION_PIPE0])) {
+ ((int_sts3 & int_enb4) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
/* ==== BEMP PIPE0 ==== */
- usb0_function_BEMPInterruptPIPE0(int_sts3, int_enb4, this, &USBHAL::EP0in);
+ usbx_function_BEMPInterruptPIPE0(int_sts3, int_enb4, this, &USBHAL::EP0in);
} else if (
(int_sts0 & USB_FUNCTION_BITBRDY) &&
(int_enb0 & USB_FUNCTION_BITBRDY) &&
- ((int_sts1 & int_enb2) & g_usb0_function_bit_set[USB_FUNCTION_PIPE0])) {
+ ((int_sts1 & int_enb2) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
/* ==== BRDY PIPE0 ==== */
- usb0_function_BRDYInterruptPIPE0(int_sts1, int_enb2, this, &USBHAL::EP0out);
+ usbx_function_BRDYInterruptPIPE0(int_sts1, int_enb2, this, &USBHAL::EP0out);
} else if (
(int_sts0 & USB_FUNCTION_BITNRDY) &&
(int_enb0 & USB_FUNCTION_BITNRDY) &&
- ((int_sts2 & int_enb3) & g_usb0_function_bit_set[USB_FUNCTION_PIPE0])) {
+ ((int_sts2 & int_enb3) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
/* ==== NRDY PIPE0 ==== */
- usb0_function_NRDYInterruptPIPE0(int_sts2, int_enb3, this, NULL);
+ usbx_function_NRDYInterruptPIPE0(int_sts2, int_enb3, this, NULL);
} else if (
(int_sts0 & USB_FUNCTION_BITCTRT) && (int_enb0 & USB_FUNCTION_BITCTRE)) {
- int_sts0 = USB200.INTSTS0;
- USB200.INTSTS0 = (uint16_t)~USB_FUNCTION_BITCTRT;
+ int_sts0 = USB20X.INTSTS0;
+ USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITCTRT;
if (((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_RDDS) ||
((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRDS) ||
((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRND)) {
/* remake EP0 into buffer */
- usb0_function_save_request();
- if ((USB200.INTSTS0 & USB_FUNCTION_BITVALID) && (
+ usbx_function_save_request();
+ if ((USB20X.INTSTS0 & USB_FUNCTION_BITVALID) && (
((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_RDDS) ||
((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRDS) ||
((int_sts0 & USB_FUNCTION_BITCTSQ) == USB_FUNCTION_CS_WRND))) {
/* New SETUP token received */
/* Three dummy reads for cleearing interrupt requests */
- dumy_sts = USB200.INTSTS0;
- dumy_sts = USB200.INTSTS0;
- dumy_sts = USB200.INTSTS0;
+ dumy_sts = USB20X.INTSTS0;
+ dumy_sts = USB20X.INTSTS0;
+ dumy_sts = USB20X.INTSTS0;
return;
}
}
switch (int_sts0 & USB_FUNCTION_BITCTSQ) {
case USB_FUNCTION_CS_IDST:
- if (g_usb0_function_TestModeFlag == DEVDRV_USBF_YES) {
+ if (g_usbx_function_TestModeFlag == DEVDRV_USBF_YES) {
/* ==== Test Mode ==== */
- usb0_function_USB_FUNCTION_TestMode();
+ usbx_function_USB_FUNCTION_TestMode();
}
/* Needs not procedure in this state */
break;
@@ -1439,25 +1443,25 @@
EP0setupCallback();
/*The EP0setupCallback should finish in successful */
- usb0_function_set_pid_buf(USB_FUNCTION_PIPE0);
+ usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
- RZA_IO_RegWrite_16(&USB200.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
+ RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
break;
case USB_FUNCTION_CS_RDSS:
- RZA_IO_RegWrite_16(&USB200.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
+ RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
break;
case USB_FUNCTION_CS_WRSS:
- RZA_IO_RegWrite_16(&USB200.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
+ RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
break;
case USB_FUNCTION_CS_SQER:
- usb0_function_set_pid_stall(USB_FUNCTION_PIPE0);
+ usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
break;
default:
- usb0_function_set_pid_stall(USB_FUNCTION_PIPE0);
+ usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
break;
}
} else if (
@@ -1465,26 +1469,26 @@
(int_enb0 & USB_FUNCTION_BITBEMP) &&
(int_sts3 & int_enb4) ) {
/* ==== BEMP PIPEx ==== */
- usb0_function_BEMPInterrupt(int_sts3, int_enb4, this, epCallback);
+ usbx_function_BEMPInterrupt(int_sts3, int_enb4, this, epCallback);
} else if (
(int_sts0 & USB_FUNCTION_BITBRDY) &&
(int_enb0 & USB_FUNCTION_BITBRDY) &&
(int_sts1 & int_enb2) ) {
/* ==== BRDY PIPEx ==== */
- usb0_function_BRDYInterrupt(int_sts1, int_enb2, this, epCallback);
+ usbx_function_BRDYInterrupt(int_sts1, int_enb2, this, epCallback);
} else if (
(int_sts0 & USB_FUNCTION_BITNRDY) &&
(int_enb0 & USB_FUNCTION_BITNRDY) &&
(int_sts2 & int_enb3)) {
/* ==== NRDY PIPEx ==== */
- usb0_function_NRDYInterrupt(int_sts2, int_enb3, this, epCallback);
+ usbx_function_NRDYInterrupt(int_sts2, int_enb3, this, epCallback);
} else {
/* Do Nothing */
}
/* Three dummy reads for cleearing interrupt requests */
- dumy_sts = USB200.INTSTS0;
- dumy_sts = USB200.INTSTS1;
+ dumy_sts = USB20X.INTSTS0;
+ dumy_sts = USB20X.INTSTS1;
}
/*************************************************************************/
