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 65:48fe9050cb4a, committed 2016-07-08
- Comitter:
- hudakz
- Date:
- Fri Jul 08 21:16:25 2016 +0000
- Parent:
- 64:c3d0530b6d82
- Child:
- 66:390c4a31db54
- Commit message:
- Working fork of Norimasa Okamoto's library for STM32F103 boards.
Changed in this revision
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/devdrv_usb_function_api.h Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,365 +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 : devdrv_usb_function_api.h
-* $Rev: 1116 $
-* $Date:: 2014-07-09 16:29:19 +0900#$
-* Description : RZ/A1H R7S72100 USB Sample Program
-*******************************************************************************/
-#ifndef USB_FUNCTION_API_H
-#define USB_FUNCTION_API_H
-
-
-/*******************************************************************************
-Includes <System Includes> , "Project Includes"
-*******************************************************************************/
-#include <MBRZA1H.h>
-#include "r_typedefs.h"
-#include "usb0_function_api.h"
-#include "usb1_function_api.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-Typedef definitions
-*******************************************************************************/
-typedef struct
-{
- uint32_t fifo;
- uint32_t buffer;
- uint32_t bytes;
- uint32_t dir;
- uint32_t size;
-} USB_FUNCTION_DMA_t;
-
-
-/*******************************************************************************
-Macro definitions
-*******************************************************************************/
-#define USBFCLOCK_X1_48MHZ (0x0000u) /* USB_X1_48MHz */
-#define USBFCLOCK_EXTAL_12MHZ (0x0004u) /* EXTAL_12MHz */
-
-#define DEVDRV_USBF_ON (1)
-#define DEVDRV_USBF_OFF (0)
-#define DEVDRV_USBF_YES (1)
-#define DEVDRV_USBF_NO (0)
-
-#define DEVDRV_USBF_STALL (-2)
-
-#define DEVDRV_USBF_WRITEEND (0)
-#define DEVDRV_USBF_WRITESHRT (1)
-#define DEVDRV_USBF_WRITING (2)
-#define DEVDRV_USBF_WRITEDMA (3)
-
-#define DEVDRV_USBF_FIFOERROR (0xffff)
-
-#define DEVDRV_USBF_PIPE_IDLE (0x00)
-#define DEVDRV_USBF_PIPE_WAIT (0x01)
-#define DEVDRV_USBF_PIPE_DONE (0x02)
-#define DEVDRV_USBF_PIPE_NORES (0x03)
-#define DEVDRV_USBF_PIPE_STALL (0x04)
-
-#define DEVDRV_USBF_PID_NAK (0x0000u)
-#define DEVDRV_USBF_PID_BUF (0x0001u)
-#define DEVDRV_USBF_PID_STALL (0x0002u)
-#define DEVDRV_USBF_PID_STALL2 (0x0003u)
-
-#define USB_FUNCTION_NON_SPEED (0)
-#define USB_FUNCTION_LOW_SPEED (1)
-#define USB_FUNCTION_FULL_SPEED (2)
-#define USB_FUNCTION_HIGH_SPEED (3)
-
-#define USB_FUNCTION_READEND (0)
-#define USB_FUNCTION_READSHRT (1)
-#define USB_FUNCTION_READING (2)
-#define USB_FUNCTION_READOVER (3)
-#define USB_FUNCTION_READZERO (4)
-
-#define USB_FUNCTION_MAX_PIPE_NO (15u)
-#define USB_FUNCTION_PIPE0 (0)
-#define USB_FUNCTION_PIPE1 (1)
-#define USB_FUNCTION_PIPE2 (2)
-#define USB_FUNCTION_PIPE3 (3)
-#define USB_FUNCTION_PIPE4 (4)
-#define USB_FUNCTION_PIPE5 (5)
-#define USB_FUNCTION_PIPE6 (6)
-#define USB_FUNCTION_PIPE7 (7)
-#define USB_FUNCTION_PIPE8 (8)
-#define USB_FUNCTION_PIPE9 (9)
-#define USB_FUNCTION_PIPEA (10)
-#define USB_FUNCTION_PIPEB (11)
-#define USB_FUNCTION_PIPEC (12)
-#define USB_FUNCTION_PIPED (13)
-#define USB_FUNCTION_PIPEE (14)
-#define USB_FUNCTION_PIPEF (15)
-
-#define USB_FUNCTION_ISO (0xc000u)
-#define USB_FUNCTION_INTERRUPT (0x8000u)
-#define USB_FUNCTION_BULK (0x4000u)
-
-#define USB_FUNCTION_NONE (0x0000u)
-#define USB_FUNCTON_BFREFIELD (0x0400u)
-#define USB_FUNCTION_BFREON (0x0400u)
-#define USB_FUNCTION_BFREOFF (0x0000u)
-#define USB_FUNCTION_DBLBFIELD (0x0200u)
-#define USB_FUNCTION_DBLBON (0x0200u)
-#define USB_FUNCTION_DBLBOFF (0x0000u)
-#define USB_FUNCTION_CNTMDFIELD (0x0100u)
-#define USB_FUNCTION_CNTMDON (0x0100u)
-#define USB_FUNCTION_CNTMDOFF (0x0000u)
-#define USB_FUNCTION_SHTNAKON (0x0080u)
-#define USB_FUNCTION_SHTNAKOFF (0x0000u)
-#define USB_FUNCTION_DIRFIELD (0x0010u)
-#define USB_FUNCTION_DIR_P_OUT (0x0000u)
-#define USB_FUNCTION_DIR_P_IN (0x0010u)
-#define USB_FUNCTION_EPNUMFIELD (0x000fu)
-#define USB_FUNCTION_MAX_EP_NO (15u)
-#define USB_FUNCTION_EP0 (0u)
-#define USB_FUNCTION_EP1 (1u)
-#define USB_FUNCTION_EP2 (2u)
-#define USB_FUNCTION_EP3 (3u)
-#define USB_FUNCTION_EP4 (4u)
-#define USB_FUNCTION_EP5 (5u)
-#define USB_FUNCTION_EP6 (6u)
-#define USB_FUNCTION_EP7 (7u)
-#define USB_FUNCTION_EP8 (8u)
-#define USB_FUNCTION_EP9 (9u)
-#define USB_FUNCTION_EP10 (10u)
-#define USB_FUNCTION_EP11 (11u)
-#define USB_FUNCTION_EP12 (12u)
-#define USB_FUNCTION_EP13 (13u)
-#define USB_FUNCTION_EP14 (14u)
-#define USB_FUNCTION_EP15 (15u)
-
-#define USB_FUNCTION_EPTABLE_LENGTH (5u)
-
-#define USB_FUNCTION_CUSE (0)
-#define USB_FUNCTION_D0USE (1)
-#define USB_FUNCTION_D0DMA (2)
-#define USB_FUNCTION_D1USE (3)
-#define USB_FUNCTION_D1DMA (4)
-
-#define USB_FUNCTION_CFIFO_USE (0x0000)
-#define USB_FUNCTION_D0FIFO_USE (0x1000)
-#define USB_FUNCTION_D1FIFO_USE (0x2000)
-#define USB_FUNCTION_D0FIFO_DMA (0x5000)
-#define USB_FUNCTION_D1FIFO_DMA (0x6000)
-
-#define USB_FUNCTION_BUF2FIFO (0)
-#define USB_FUNCTION_FIFO2BUF (1)
-
-#define USB_FUNCTION_DVST_POWERED (0x0001)
-#define USB_FUNCTION_DVST_DEFAULT (0x0002)
-#define USB_FUNCTION_DVST_ADDRESS (0x0003)
-#define USB_FUNCTION_DVST_CONFIGURED (0x0004)
-#define USB_FUNCTION_DVST_SUSPEND (0x0005)
-#define USB_FUNCTION_DVST_CONFIGURED_SUSPEND (0x0006)
-
-#define USB_FUNCTION_FUNCTION_TEST_SELECT (0xff00u)
-#define USB_FUNCTION_FUNCTION_TEST_J (0x0100u)
-#define USB_FUNCTION_FUNCTION_TEST_K (0x0200u)
-#define USB_FUNCTION_FUNCTION_TEST_SE0_NAK (0x0300u)
-#define USB_FUNCTION_FUNCTION_TEST_PACKET (0x0400u)
-#define USB_FUNCTION_FUNCTION_TEST_FORCE_ENABLE (0x0500u)
-#define USB_FUNCTION_FUNCTION_TEST_STSelectors (0x0600u)
-#define USB_FUNCTION_FUNCTION_TEST_Reserved (0x4000u)
-#define USB_FUNCTION_FUNCTION_TEST_VSTModes (0xc000u)
-
-#define USB_FUNCTION_DT_TYPE (0xff00u)
-#define USB_FUNCTION_DT_INDEX (0xff)
-#define USB_FUNCTION_DT_DEVICE (0x01)
-#define USB_FUNCTION_DT_CONFIGURATION (0x02)
-#define USB_FUNCTION_DT_STRING (0x03)
-#define USB_FUNCTION_DT_INTERFACE (0x04)
-#define USB_FUNCTION_DT_ENDPOINT (0x05)
-#define USB_FUNCTION_DT_DEVICE_QUALIFIER (0x06)
-#define USB_FUNCTION_DT_OTHER_SPEED_CONFIGURATION (0x07)
-#define USB_FUNCTION_DT_INTERFACE_POWER (0x08)
-
-#define USB_FUNCTION_CF_RESERVED (0x80)
-#define USB_FUNCTION_CF_SELF (0x40)
-#define USB_FUNCTION_CF_RWUP (0x20)
-#define USB_FUNCTION_CF_NORWUP (0x00)
-#define USB_FUNCTION_EP_ERROR (0xff)
-
-#define USB_FUNCTION_EP_OUT (0x00)
-#define USB_FUNCTION_EP_IN (0x80)
-#define USB_FUNCTION_EP_CNTRL (0x00)
-#define USB_FUNCTION_EP_ISO (0x01)
-#define USB_FUNCTION_EP_BULK (0x02)
-#define USB_FUNCTION_EP_INT (0x03)
-
-#define USB_FUNCTION_STANDARD_REQUEST (0x0000u)
-#define USB_FUNCTION_CLASS_REQUEST (0x0020u)
-#define USB_FUNCTION_VENDOR_REQUEST (0x0040u)
-#define USB_FUNCTION_DEVICE_REQUEST (0x0000u)
-#define USB_FUNCTION_INTERFACE_REQUEST (0x0001u)
-#define USB_FUNCTION_ENDPOINT_REQUEST (0x0002u)
-
-#define USB_FUNCTION_GETSTATUS_BUSPOWERD (0x0000u)
-#define USB_FUNCTION_GETSTATUS_SELFPOWERD (0x0001u)
-#define USB_FUNCTION_GETSTATUS_REMOTEWAKEUP (0x0002u)
-#define USB_FUNCTION_GETSTATUS_NOTHALT (0x0000u)
-#define USB_FUNCTION_GETSTATUS_HALT (0x0001u)
-
-#define USB_FUNCTION_FEATURE_ENDPOINT_HALT (0x0000u)
-#define USB_FUNCTION_FEATURE_REMOTE_WAKEUP (0x0001u)
-#define USB_FUNCTION_FEATURE_TEST_MODE (0x0002u)
-
-#define USB_FUNCTION_bRequest (0xff00u) /* b15-8:bRequest */
-#define USB_FUNCTION_bmRequestType (0x00ffu) /* b7-0: bmRequestType */
-#define USB_FUNCTION_bmRequestTypeDir (0x0080u) /* b7 : Data transfer direction */
-#define USB_FUNCTION_bmRequestTypeType (0x0060u) /* b6-5: Type */
-#define USB_FUNCTION_bmRequestTypeRecip (0x001fu) /* b4-0: Recipient */
-
-
-/*******************************************************************************
-Variable Externs
-*******************************************************************************/
-
-
-/*******************************************************************************
-Functions Prototypes
-*******************************************************************************/
-#if 0
-void R_USB_api_function_init(uint16_t root, uint8_t int_level, uint16_t mode, uint16_t clockmode);
-uint16_t R_USB_api_function_IsConfigured(uint16_t root);
-uint16_t R_USB_api_function_CtrlReadStart(uint16_t root, uint32_t size, uint8_t *data);
-void R_USB_api_function_CtrlWriteStart(uint16_t root, uint32_t size, uint8_t *data);
-uint16_t R_USB_api_function_start_send_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
-uint16_t R_USB_api_function_check_pipe_status(uint16_t root, uint16_t pipe, uint32_t *size);
-void R_USB_api_function_clear_pipe_status(uint16_t root, uint16_t pipe);
-void R_USB_api_function_start_receive_transfer(uint16_t root, uint16_t pipe, uint32_t size, uint8_t *data);
-void R_USB_api_function_set_pid_buf(uint16_t root, uint16_t pipe);
-void R_USB_api_function_set_pid_nak(uint16_t root, uint16_t pipe);
-void R_USB_api_function_set_pid_stall(uint16_t root, uint16_t pipe);
-void R_USB_api_function_clear_pid_stall(uint16_t root, uint16_t pipe);
-uint16_t R_USB_api_function_get_pid(uint16_t root, uint16_t pipe);
-int32_t R_USB_api_function_check_stall(uint16_t root, uint16_t pipe);
-void R_USB_api_function_set_sqclr(uint16_t root, uint16_t pipe);
-void R_USB_api_function_set_sqset(uint16_t root, uint16_t pipe);
-void R_USB_api_function_set_csclr(uint16_t root, uint16_t pipe);
-void R_USB_api_function_set_curpipe(uint16_t root, uint16_t pipe, uint16_t fifosel, uint16_t isel, uint16_t mbw);
-void R_USB_api_function_clear_brdy_sts(uint16_t root, uint16_t pipe);
-void R_USB_api_function_clear_bemp_sts(uint16_t root, uint16_t pipe);
-void R_USB_api_function_clear_nrdy_sts(uint16_t root, uint16_t pipe);
-void R_USB_api_function_enable_brdy_int(uint16_t root, uint16_t pipe);
-void R_USB_api_function_disable_brdy_int(uint16_t root, uint16_t pipe);
-void R_USB_api_function_enable_bemp_int(uint16_t root, uint16_t pipe);
-void R_USB_api_function_disable_bemp_int(uint16_t root, uint16_t pipe);
-void R_USB_api_function_enable_nrdy_int(uint16_t root, uint16_t pipe);
-void R_USB_api_function_disable_nrdy_int(uint16_t root, uint16_t pipe);
-void R_USB_api_function_stop_transfer(uint16_t root, uint16_t pipe);
-#endif
-
-#ifdef USB0_FUNCTION_API_H
-void usb0_function_interrupt(uint32_t int_sense);
-void usb0_function_dma_interrupt_d0fifo(uint32_t int_sense);
-void usb0_function_dma_interrupt_d1fifo(uint32_t int_sense);
-
-void usb0_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb0_function_ResetDescriptor(uint16_t mode);
-
-IRQn_Type Userdef_USB_usb0_function_d0fifo_dmaintid(void);
-IRQn_Type Userdef_USB_usb0_function_d1fifo_dmaintid(void);
-void Userdef_USB_usb0_function_attach(void);
-void Userdef_USB_usb0_function_detach(void);
-void Userdef_USB_usb0_function_delay_1ms(void);
-void Userdef_USB_usb0_function_delay_xms(uint32_t msec);
-void Userdef_USB_usb0_function_delay_10us(uint32_t usec);
-void Userdef_USB_usb0_function_delay_500ns(void);
-void Userdef_USB_usb0_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
-uint32_t Userdef_USB_usb0_function_stop_dma0(void);
-uint32_t Userdef_USB_usb0_function_stop_dma1(void);
-
-void usb0_function_stop_transfer(uint16_t pipe);
-void usb0_function_enable_brdy_int(uint16_t pipe);
-void usb0_function_disable_brdy_int(uint16_t pipe);
-void usb0_function_enable_bemp_int(uint16_t pipe);
-void usb0_function_disable_bemp_int(uint16_t pipe);
-void usb0_function_enable_nrdy_int(uint16_t pipe);
-void usb0_function_disable_nrdy_int(uint16_t pipe);
-#endif
-
-#ifdef USB1_FUNCTION_API_H
-void usb1_function_interrupt(uint32_t int_sense);
-void usb1_function_dma_interrupt_d0fifo(uint32_t int_sense);
-void usb1_function_dma_interrupt_d1fifo(uint32_t int_sense);
-
-void usb1_function_Class0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Class1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Class2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Class3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Class4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Class5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Vendor0(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Vendor1(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Vendor2(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Vendor3(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Vendor4(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_Vendor5(uint16_t type, uint16_t req, uint16_t value, uint16_t index, uint16_t length);
-void usb1_function_ResetDescriptor(uint16_t mode);
-
-uint16_t Userdef_USB_usb1_function_d0fifo_dmaintid(void);
-uint16_t Userdef_USB_usb1_function_d1fifo_dmaintid(void);
-void Userdef_USB_usb1_function_attach(void);
-void Userdef_USB_usb1_function_detach(void);
-void Userdef_USB_usb1_function_delay_1ms(void);
-void Userdef_USB_usb1_function_delay_xms(uint32_t msec);
-void Userdef_USB_usb1_function_delay_10us(uint32_t usec);
-void Userdef_USB_usb1_function_delay_500ns(void);
-void Userdef_USB_usb1_function_start_dma(USB_FUNCTION_DMA_t *dma, uint16_t dfacc);
-uint32_t Userdef_USB_usb1_function_stop_dma0(void);
-uint32_t Userdef_USB_usb1_function_stop_dma1(void);
-
-void usb1_function_stop_transfer(uint16_t pipe);
-void usb1_function_enable_brdy_int(uint16_t pipe);
-void usb1_function_disable_brdy_int(uint16_t pipe);
-void usb1_function_enable_bemp_int(uint16_t pipe);
-void usb1_function_disable_bemp_int(uint16_t pipe);
-void usb1_function_enable_nrdy_int(uint16_t pipe);
-void usb1_function_disable_nrdy_int(uint16_t pipe);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* USB_FUNCTION_API_H */
-
-/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function.h Thu Jun 25 09:33:51 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,143 +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 : usb_function.h -* $Rev: 1116 $ -* $Date:: 2014-07-09 16:29:19 +0900#$ -* Description : RZ/A1H R7S72100 USB Sample Program -*******************************************************************************/ -#ifndef USB_FUNCTION_H -#define USB_FUNCTION_H - -/******************************************************************************* -Includes <System Includes> , "Project Includes" -*******************************************************************************/ -#include "r_typedefs.h" -#include "iodefine.h" -#include "rza_io_regrw.h" - -/******************************************************************************* -Macro definitions -*******************************************************************************/ -#define USB_FUNCTION_ALT_NO (255) -#define USB_FUNCTION_ALT_SET (0xff) - -#define USB_FUNCTION_BITUPLLE (0x0002u) -#define USB_FUNCTION_BITUCKSEL (0x0004u) -#define USB_FUNCTION_BITBWAIT (0x003fu) - -#define USB_FUNCTION_BUSWAIT_02 (0x0000u) -#define USB_FUNCTION_BUSWAIT_03 (0x0001u) -#define USB_FUNCTION_BUSWAIT_04 (0x0002u) -#define USB_FUNCTION_BUSWAIT_05 (0x0003u) -#define USB_FUNCTION_BUSWAIT_06 (0x0004u) -#define USB_FUNCTION_BUSWAIT_07 (0x0005u) -#define USB_FUNCTION_BUSWAIT_08 (0x0006u) -#define USB_FUNCTION_BUSWAIT_09 (0x0007u) -#define USB_FUNCTION_BUSWAIT_10 (0x0008u) -#define USB_FUNCTION_BUSWAIT_11 (0x0009u) -#define USB_FUNCTION_BUSWAIT_12 (0x000au) -#define USB_FUNCTION_BUSWAIT_13 (0x000bu) -#define USB_FUNCTION_BUSWAIT_14 (0x000cu) -#define USB_FUNCTION_BUSWAIT_15 (0x000du) -#define USB_FUNCTION_BUSWAIT_16 (0x000eu) -#define USB_FUNCTION_BUSWAIT_17 (0x000fu) - -#define USB_FUNCTION_BITRESUME (0x0020u) -#define USB_FUNCTION_BITUACT (0x0010u) -#define USB_FUNCTION_HSPROC (0x0004u) -#define USB_FUNCTION_HSMODE (0x0003u) -#define USB_FUNCTION_FSMODE (0x0002u) -#define USB_FUNCTION_LSMODE (0x0001u) -#define USB_FUNCTION_UNDECID (0x0000u) - -#define USB_FUNCTION_BITRCNT (0x8000u) -#define USB_FUNCTION_BITDREQE (0x1000u) -#define USB_FUNCTION_BITMBW (0x0c00u) -#define USB_FUNCTION_BITMBW_8 (0x0000u) -#define USB_FUNCTION_BITMBW_16 (0x0400u) -#define USB_FUNCTION_BITMBW_32 (0x0800u) -#define USB_FUNCTION_BITBYTE_LITTLE (0x0000u) -#define USB_FUNCTION_BITBYTE_BIG (0x0100u) -#define USB_FUNCTION_BITISEL (0x0020u) -#define USB_FUNCTION_BITCURPIPE (0x000fu) - -#define USB_FUNCTION_CFIFO_READ (0x0000u) -#define USB_FUNCTION_CFIFO_WRITE (0x0020u) - -#define USB_FUNCTION_BITBVAL (0x8000u) -#define USB_FUNCTION_BITBCLR (0x4000u) -#define USB_FUNCTION_BITFRDY (0x2000u) -#define USB_FUNCTION_BITDTLN (0x0fffu) - -#define USB_FUNCTION_BITVBSE (0x8000u) -#define USB_FUNCTION_BITRSME (0x4000u) -#define USB_FUNCTION_BITSOFE (0x2000u) -#define USB_FUNCTION_BITDVSE (0x1000u) -#define USB_FUNCTION_BITCTRE (0x0800u) -#define USB_FUNCTION_BITVBINT (0x8000u) -#define USB_FUNCTION_BITRESM (0x4000u) -#define USB_FUNCTION_BITSOFR (0x2000u) -#define USB_FUNCTION_BITDVST (0x1000u) -#define USB_FUNCTION_BITCTRT (0x0800u) - -#define USB_FUNCTION_BITBEMPE (0x0400u) -#define USB_FUNCTION_BITNRDYE (0x0200u) -#define USB_FUNCTION_BITBRDYE (0x0100u) -#define USB_FUNCTION_BITBEMP (0x0400u) -#define USB_FUNCTION_BITNRDY (0x0200u) -#define USB_FUNCTION_BITBRDY (0x0100u) - -#define USB_FUNCTION_BITDVSQ (0x0070u) -#define USB_FUNCTION_BITDVSQS (0x0030u) -#define USB_FUNCTION_DS_SPD_CNFG (0x0070u) -#define USB_FUNCTION_DS_SPD_ADDR (0x0060u) -#define USB_FUNCTION_DS_SPD_DFLT (0x0050u) -#define USB_FUNCTION_DS_SPD_POWR (0x0040u) -#define USB_FUNCTION_DS_CNFG (0x0030u) -#define USB_FUNCTION_DS_ADDS (0x0020u) -#define USB_FUNCTION_DS_DFLT (0x0010u) -#define USB_FUNCTION_DS_POWR (0x0000u) -#define USB_FUNCTION_BITVALID (0x0008u) -#define USB_FUNCTION_BITCTSQ (0x0007u) -#define USB_FUNCTION_CS_SQER (0x0006u) -#define USB_FUNCTION_CS_WRND (0x0005u) -#define USB_FUNCTION_CS_WRSS (0x0004u) -#define USB_FUNCTION_CS_WRDS (0x0003u) -#define USB_FUNCTION_CS_RDSS (0x0002u) -#define USB_FUNCTION_CS_RDDS (0x0001u) -#define USB_FUNCTION_CS_IDST (0x0000u) - -#define USB_FUNCTION_PIPExBUF (64u) - -#define USB_FUNCTION_D0FIFO (0) -#define USB_FUNCTION_D1FIFO (1) -#define USB_FUNCTION_DMA_READY (0) -#define USB_FUNCTION_DMA_BUSY (1) -#define USB_FUNCTION_DMA_BUSYEND (2) - -#define USB_FUNCTION_FIFO_USE (0x7000) - -#endif /* USB_FUNCTION_FUNCTION_H */ - -/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/inc/usb_function_version.h Thu Jun 25 09:33:51 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +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 : usb_function_version.h -* $Rev: 1116 $ -* $Date:: 2014-07-09 16:29:19 +0900#$ -* Description : RZ/A1H R7S72100 USB Sample Program -*******************************************************************************/ - -#define USB_FUNCTION_LOCAL_Rev "VER080_140709" - -/* End of File */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb0/inc/usb0_function.h Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/inc/usb0_function_api.h Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/inc/usb0_function_dmacdrv.h Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/common/usb0_function_dataio.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/common/usb0_function_dma.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/common/usb0_function_intrn.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/common/usb0_function_lib.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/function/usb0_function_api.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/function/usb0_function_controlrw.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/function/usb0_function_global.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/function/usb0_function_sig.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/function/usb0_function_sub.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/userdef/usb0_function_dmacdrv.c Thu Jun 25 09:33:51 2015 +0900
+++ /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/usb0/src/userdef/usb0_function_userdef.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function.h Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_api.h Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/inc/usb1_function_dmacdrv.h Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dataio.c Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2932 +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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_dma.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_intrn.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/common/usb1_function_lib.c Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2044 +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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_api.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_controlrw.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_global.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sig.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/function/usb1_function_sub.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_dmacdrv.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb1/src/userdef/usb1_function_userdef.c Thu Jun 25 09:33:51 2015 +0900
+++ /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 : 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 */
--- a/USBDevice/TARGET_RENESAS/TARGET_RZ_A1H/usb_function_setting.h Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +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) 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/USBEndpoints.h Thu Jun 25 09:33:51 2015 +0900 +++ b/USBDevice/USBEndpoints.h Fri Jul 08 21:16:25 2016 +0000 @@ -37,20 +37,8 @@ } EP_STATUS; /* Include configuration for specific target */ -#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) || defined(TARGET_LPC2460) || defined(TARGET_LPC4088_DM) -#include "USBEndpoints_LPC17_LPC23.h" -#elif defined(TARGET_LPC11UXX) || defined(TARGET_LPC1347) || defined (TARGET_LPC11U6X) || defined (TARGET_LPC1549) -#include "USBEndpoints_LPC11U.h" -#elif defined(TARGET_KL25Z) | defined(TARGET_KL43Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D50M) | defined(TARGET_K64F) | defined(TARGET_K22F) | defined(TARGET_TEENSY3_1) -#include "USBEndpoints_KL25Z.h" -#elif defined (TARGET_STM32F4) -#include "USBEndpoints_STM32F4.h" -#elif defined(TARGET_STM32L1)||defined(TARGET_STM32F1) -#include "USBEndpoints_STM32L1.h" -#elif defined (TARGET_RZ_A1H) -#include "USBEndpoints_RZ_A1H.h" -#elif defined(TARGET_Maxim) -#include "USBEndpoints_Maxim.h" +#if defined(TARGET_STM32F1) +#include "USBEndpoints_STM32F1.h" #else #error "Unknown target type" #endif
--- a/USBDevice/USBEndpoints_KL25Z.h Thu Jun 25 09:33:51 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* Copyright (c) 2010-2011 mbed.org, MIT License -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of this software -* and associated documentation files (the "Software"), to deal in the Software without -* restriction, including without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all copies or -* substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING -* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#define NUMBER_OF_LOGICAL_ENDPOINTS (16) -#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2) - -/* Define physical endpoint numbers */ - -/* Endpoint No. */ -/* ---------------- */ -#define EP0OUT (0) -#define EP0IN (1) -#define EP1OUT (2) -#define EP1IN (3) -#define EP2OUT (4) -#define EP2IN (5) -#define EP3OUT (6) -#define EP3IN (7) -#define EP4OUT (8) -#define EP4IN (9) -#define EP5OUT (10) -#define EP5IN (11) -#define EP6OUT (12) -#define EP6IN (13) -#define EP7OUT (14) -#define EP7IN (15) -#define EP8OUT (16) -#define EP8IN (17) -#define EP9OUT (18) -#define EP9IN (19) -#define EP10OUT (20) -#define EP10IN (21) -#define EP11OUT (22) -#define EP11IN (23) -#define EP12OUT (24) -#define EP12IN (25) -#define EP13OUT (26) -#define EP13IN (27) -#define EP14OUT (28) -#define EP14IN (29) -#define EP15OUT (30) -#define EP15IN (31) - -/* Maximum Packet sizes */ - -#define MAX_PACKET_SIZE_EP0 (64) -#define MAX_PACKET_SIZE_EP1 (64) -#define MAX_PACKET_SIZE_EP2 (64) -#define MAX_PACKET_SIZE_EP3 (1023) -#define MAX_PACKET_SIZE_EP4 (64) -#define MAX_PACKET_SIZE_EP5 (64) -#define MAX_PACKET_SIZE_EP6 (64) -#define MAX_PACKET_SIZE_EP7 (64) -#define MAX_PACKET_SIZE_EP8 (64) -#define MAX_PACKET_SIZE_EP9 (64) -#define MAX_PACKET_SIZE_EP10 (64) -#define MAX_PACKET_SIZE_EP11 (64) -#define MAX_PACKET_SIZE_EP12 (64) -#define MAX_PACKET_SIZE_EP13 (64) -#define MAX_PACKET_SIZE_EP14 (64) -#define MAX_PACKET_SIZE_EP15 (64) - -/* Generic endpoints - intended to be portable accross devices */ -/* and be suitable for simple USB devices. */ - -/* Bulk endpoints */ -#define EPBULK_OUT (EP2OUT) -#define EPBULK_IN (EP2IN) -#define EPBULK_OUT_callback EP2_OUT_callback -#define EPBULK_IN_callback EP2_IN_callback -/* Interrupt endpoints */ -#define EPINT_OUT (EP1OUT) -#define EPINT_IN (EP1IN) -#define EPINT_OUT_callback EP1_OUT_callback -#define EPINT_IN_callback EP1_IN_callback -/* Isochronous endpoints */ -#define EPISO_OUT (EP3OUT) -#define EPISO_IN (EP3IN) -#define EPISO_OUT_callback EP3_OUT_callback -#define EPISO_IN_callback EP3_IN_callback - -#define MAX_PACKET_SIZE_EPBULK (MAX_PACKET_SIZE_EP2) -#define MAX_PACKET_SIZE_EPINT (MAX_PACKET_SIZE_EP1) -#define MAX_PACKET_SIZE_EPISO (MAX_PACKET_SIZE_EP3)
--- a/USBDevice/USBEndpoints_LPC11U.h Thu Jun 25 09:33:51 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* Copyright (c) 2010-2011 mbed.org, MIT License -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of this software -* and associated documentation files (the "Software"), to deal in the Software without -* restriction, including without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all copies or -* substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING -* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#define NUMBER_OF_LOGICAL_ENDPOINTS (5) -#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2) - -/* Define physical endpoint numbers */ - -/* Endpoint No. Type(s) MaxPacket DoubleBuffer */ -/* ---------------- ------------ ---------- --- */ -#define EP0OUT (0) /* Control 64 No */ -#define EP0IN (1) /* Control 64 No */ -#define EP1OUT (2) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP1IN (3) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP2OUT (4) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP2IN (5) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP3OUT (6) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP3IN (7) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP4OUT (8) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP4IN (9) /* Int/Bulk/Iso 64/64/1023 Yes */ - -/* Maximum Packet sizes */ - -#define MAX_PACKET_SIZE_EP0 (64) -#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */ -#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */ -#define MAX_PACKET_SIZE_EP3 (64) /* Int/Bulk */ -#define MAX_PACKET_SIZE_EP4 (64) /* Int/Bulk */ - -#define MAX_PACKET_SIZE_EP1_ISO (1023) /* Isochronous */ -#define MAX_PACKET_SIZE_EP2_ISO (1023) /* Isochronous */ -#define MAX_PACKET_SIZE_EP3_ISO (1023) /* Isochronous */ -#define MAX_PACKET_SIZE_EP4_ISO (1023) /* Isochronous */ - -/* Generic endpoints - intended to be portable accross devices */ -/* and be suitable for simple USB devices. */ - -/* Bulk endpoint */ -#define EPBULK_OUT (EP2OUT) -#define EPBULK_IN (EP2IN) -#define EPBULK_OUT_callback EP2_OUT_callback -#define EPBULK_IN_callback EP2_IN_callback -/* Interrupt endpoint */ -#define EPINT_OUT (EP1OUT) -#define EPINT_IN (EP1IN) -#define EPINT_OUT_callback EP1_OUT_callback -#define EPINT_IN_callback EP1_IN_callback -/* Isochronous endpoint */ -#define EPISO_OUT (EP3OUT) -#define EPISO_IN (EP3IN) -#define EPISO_OUT_callback EP3_OUT_callback -#define EPISO_IN_callback EP3_IN_callback - -#define MAX_PACKET_SIZE_EPBULK (MAX_PACKET_SIZE_EP2) -#define MAX_PACKET_SIZE_EPINT (MAX_PACKET_SIZE_EP1) -#define MAX_PACKET_SIZE_EPISO (MAX_PACKET_SIZE_EP3_ISO)
--- a/USBDevice/USBEndpoints_LPC17_LPC23.h Thu Jun 25 09:33:51 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* Copyright (c) 2010-2011 mbed.org, MIT License -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of this software -* and associated documentation files (the "Software"), to deal in the Software without -* restriction, including without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all copies or -* substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING -* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#define NUMBER_OF_LOGICAL_ENDPOINTS (16) -#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2) - -/* Define physical endpoint numbers */ - -/* Endpoint No. Type(s) MaxPacket DoubleBuffer */ -/* ---------------- ------------ ---------- --- */ -#define EP0OUT (0) /* Control 64 No */ -#define EP0IN (1) /* Control 64 No */ -#define EP1OUT (2) /* Interrupt 64 No */ -#define EP1IN (3) /* Interrupt 64 No */ -#define EP2OUT (4) /* Bulk 64 Yes */ -#define EP2IN (5) /* Bulk 64 Yes */ -#define EP3OUT (6) /* Isochronous 1023 Yes */ -#define EP3IN (7) /* Isochronous 1023 Yes */ -#define EP4OUT (8) /* Interrupt 64 No */ -#define EP4IN (9) /* Interrupt 64 No */ -#define EP5OUT (10) /* Bulk 64 Yes */ -#define EP5IN (11) /* Bulk 64 Yes */ -#define EP6OUT (12) /* Isochronous 1023 Yes */ -#define EP6IN (13) /* Isochronous 1023 Yes */ -#define EP7OUT (14) /* Interrupt 64 No */ -#define EP7IN (15) /* Interrupt 64 No */ -#define EP8OUT (16) /* Bulk 64 Yes */ -#define EP8IN (17) /* Bulk 64 Yes */ -#define EP9OUT (18) /* Isochronous 1023 Yes */ -#define EP9IN (19) /* Isochronous 1023 Yes */ -#define EP10OUT (20) /* Interrupt 64 No */ -#define EP10IN (21) /* Interrupt 64 No */ -#define EP11OUT (22) /* Bulk 64 Yes */ -#define EP11IN (23) /* Bulk 64 Yes */ -#define EP12OUT (24) /* Isochronous 1023 Yes */ -#define EP12IN (25) /* Isochronous 1023 Yes */ -#define EP13OUT (26) /* Interrupt 64 No */ -#define EP13IN (27) /* Interrupt 64 No */ -#define EP14OUT (28) /* Bulk 64 Yes */ -#define EP14IN (29) /* Bulk 64 Yes */ -#define EP15OUT (30) /* Bulk 64 Yes */ -#define EP15IN (31) /* Bulk 64 Yes */ - -/* Maximum Packet sizes */ - -#define MAX_PACKET_SIZE_EP0 (64) -#define MAX_PACKET_SIZE_EP1 (64) -#define MAX_PACKET_SIZE_EP2 (64) -#define MAX_PACKET_SIZE_EP3 (1023) -#define MAX_PACKET_SIZE_EP4 (64) -#define MAX_PACKET_SIZE_EP5 (64) -#define MAX_PACKET_SIZE_EP6 (1023) -#define MAX_PACKET_SIZE_EP7 (64) -#define MAX_PACKET_SIZE_EP8 (64) -#define MAX_PACKET_SIZE_EP9 (1023) -#define MAX_PACKET_SIZE_EP10 (64) -#define MAX_PACKET_SIZE_EP11 (64) -#define MAX_PACKET_SIZE_EP12 (1023) -#define MAX_PACKET_SIZE_EP13 (64) -#define MAX_PACKET_SIZE_EP14 (64) -#define MAX_PACKET_SIZE_EP15 (64) - -/* Generic endpoints - intended to be portable accross devices */ -/* and be suitable for simple USB devices. */ - -/* Bulk endpoints */ -#define EPBULK_OUT (EP2OUT) -#define EPBULK_IN (EP2IN) -#define EPBULK_OUT_callback EP2_OUT_callback -#define EPBULK_IN_callback EP2_IN_callback -/* Interrupt endpoints */ -#define EPINT_OUT (EP1OUT) -#define EPINT_IN (EP1IN) -#define EPINT_OUT_callback EP1_OUT_callback -#define EPINT_IN_callback EP1_IN_callback -/* Isochronous endpoints */ -#define EPISO_OUT (EP3OUT) -#define EPISO_IN (EP3IN) -#define EPISO_OUT_callback EP3_OUT_callback -#define EPISO_IN_callback EP3_IN_callback - -#define MAX_PACKET_SIZE_EPBULK (MAX_PACKET_SIZE_EP2) -#define MAX_PACKET_SIZE_EPINT (MAX_PACKET_SIZE_EP1) -#define MAX_PACKET_SIZE_EPISO (MAX_PACKET_SIZE_EP3)
--- a/USBDevice/USBEndpoints_Maxim.h Thu Jun 25 09:33:51 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES - * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * Except as contained in this notice, the name of Maxim Integrated - * Products, Inc. shall not be used except as stated in the Maxim Integrated - * Products, Inc. Branding Policy. - * - * The mere transfer of this software does not imply any licenses - * of trade secrets, proprietary technology, copyrights, patents, - * trademarks, maskwork rights, or any other form of intellectual - * property whatsoever. Maxim Integrated Products, Inc. retains all - * ownership rights. - ******************************************************************************* - */ - -#define NUMBER_OF_LOGICAL_ENDPOINTS (8) -#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2) - -#define DIR_OUT 0x00 -#define DIR_IN 0x01 -#define EP_NUM(ep) (ep >> 1) -#define IN_EP(ep) (ep & DIR_IN) -#define OUT_EP(ep) (!(ep & DIR_IN)) - -/* Define physical endpoint numbers */ - -/* Endpoint No. */ -/* ---------------- */ -#define EP0OUT ((0 << 1) | DIR_OUT) -#define EP0IN ((0 << 1) | DIR_IN) -#define EP1OUT ((1 << 1) | DIR_OUT) -#define EP1IN ((1 << 1) | DIR_IN) -#define EP2OUT ((2 << 1) | DIR_OUT) -#define EP2IN ((2 << 1) | DIR_IN) -#define EP3OUT ((3 << 1) | DIR_OUT) -#define EP3IN ((3 << 1) | DIR_IN) -#define EP4OUT ((4 << 1) | DIR_OUT) -#define EP4IN ((4 << 1) | DIR_IN) -#define EP5OUT ((5 << 1) | DIR_OUT) -#define EP5IN ((5 << 1) | DIR_IN) -#define EP6OUT ((6 << 1) | DIR_OUT) -#define EP6IN ((6 << 1) | DIR_IN) -#define EP7OUT ((7 << 1) | DIR_OUT) -#define EP7IN ((7 << 1) | DIR_IN) - -/* Maximum Packet sizes */ - -#define MAX_PACKET_SIZE_EP0 (64) -#define MAX_PACKET_SIZE_EP1 (64) -#define MAX_PACKET_SIZE_EP2 (64) -#define MAX_PACKET_SIZE_EP3 (64) -#define MAX_PACKET_SIZE_EP4 (64) -#define MAX_PACKET_SIZE_EP5 (64) -#define MAX_PACKET_SIZE_EP6 (64) -#define MAX_PACKET_SIZE_EP7 (64) - -/* Generic endpoints - intended to be portable accross devices */ -/* and be suitable for simple USB devices. */ - -/* Bulk endpoints */ -#define EPBULK_OUT (EP1OUT) -#define EPBULK_IN (EP2IN) -#define EPBULK_OUT_callback EP1_OUT_callback -#define EPBULK_IN_callback EP2_IN_callback -/* Interrupt endpoints */ -#define EPINT_OUT (EP3OUT) -#define EPINT_IN (EP4IN) -#define EPINT_OUT_callback EP3_OUT_callback -#define EPINT_IN_callback EP4_IN_callback -/* Isochronous endpoints */ -/* NOT SUPPORTED - use invalid endpoint number to prevent built errors */ -#define EPISO_OUT (EP0OUT) -#define EPISO_IN (EP0IN) - -#define MAX_PACKET_SIZE_EPBULK (64) -#define MAX_PACKET_SIZE_EPINT (64)
--- a/USBDevice/USBEndpoints_RZ_A1H.h Thu Jun 25 09:33:51 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/* Copyright (c) 2010-2011 mbed.org, MIT License -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of this software -* and associated documentation files (the "Software"), to deal in the Software without -* restriction, including without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all copies or -* substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING -* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#define NUMBER_OF_LOGICAL_ENDPOINTS (16) -#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2) - -/* Define physical endpoint numbers */ - -/* Endpoint No. Type(s) MaxSiz DoubleBuf pipe */ -/* ---------------- --------- ------ --------- ---- */ -#define EP0OUT (0) /* Control 256 No 0 */ -#define EP0IN (1) /* Control 256 No 0 */ -#define EP1OUT (2) /* Int 64 No 6 */ -#define EP1IN (3) /* Int 64 No 7 */ -#define EP2OUT (4) /* Bulk 2048 Yes 3 */ -#define EP2IN (5) /* Bulk 2048 Yes 4 */ -#define EP3OUT (6) /* Bulk/Iso 2048 Yes 1 */ -#define EP3IN (7) /* Bulk/Iso 2048 Yes 2 */ -/*following EP is not configured in sample program*/ -#define EP6IN (8) /* Bulk 2048 Yes 5 */ -#define EP8IN (9) /* Int 64 No 8 */ -#define EP9IN (10) /* Bulk 512 Bulk 9 */ -#define EP10IN (11) /* Int/Bulk 2048 Bulk 10 */ -#define EP11IN (12) /* Bulk 2048 Yes 11 */ -#define EP12IN (13) /* Bulk 2048 Yes 12 */ -#define EP13IN (14) /* Bulk 2048 Yes 13 */ -#define EP14IN (15) /* Bulk 2048 Yes 14 */ -#define EP15IN (16) /* Bulk 2048 Yes 15 */ - -/* Maximum Packet sizes */ -#define MAX_PACKET_SIZE_EP0 (64) /*pipe0/pipe0: control */ -#define MAX_PACKET_SIZE_EP1 (64) /*pipe6/pipe7: interrupt */ -#define MAX_PACKET_SIZE_EP2 (512) /*pipe3/pipe4: bulk */ -#define MAX_PACKET_SIZE_EP3 (512) /*pipe1/pipe2: isochronous */ -#define MAX_PACKET_SIZE_EP6 (64) /*pipe5: Note *1 */ -#define MAX_PACKET_SIZE_EP8 (64) /*pipe7: Note *1 */ -#define MAX_PACKET_SIZE_EP9 (512) /*pipe8: Note *1 */ -#define MAX_PACKET_SIZE_EP10 (512) /*pipe9: Note *1 */ -#define MAX_PACKET_SIZE_EP11 (512) /*pipe10: Note *1 */ -#define MAX_PACKET_SIZE_EP12 (512) /*pipe11: Note *1 */ -#define MAX_PACKET_SIZE_EP13 (512) /*pipe12: Note *1 */ -#define MAX_PACKET_SIZE_EP14 (512) /*pipe13: Note *1 */ -#define MAX_PACKET_SIZE_EP15 (512) /*pipe14: Note *1 */ -/* Note *1: This pipe is not configure in sample program */ - - -/* Generic endpoints - intended to be portable accross devices */ -/* and be suitable for simple USB devices. */ - -/* Bulk endpoints */ -#define EPBULK_OUT (EP2OUT) -#define EPBULK_IN (EP2IN) -#define EPBULK_OUT_callback EP2_OUT_callback -#define EPBULK_IN_callback EP2_IN_callback -/* Interrupt endpoints */ -#define EPINT_OUT (EP1OUT) -#define EPINT_IN (EP1IN) -#define EPINT_OUT_callback EP1_OUT_callback -#define EPINT_IN_callback EP1_IN_callback -/* Isochronous endpoints */ -#define EPISO_OUT (EP3OUT) -#define EPISO_IN (EP3IN) -#define EPISO_OUT_callback EP3_OUT_callback -#define EPISO_IN_callback EP3_IN_callback - -#define MAX_PACKET_SIZE_EPBULK (MAX_PACKET_SIZE_EP2) -#define MAX_PACKET_SIZE_EPINT (MAX_PACKET_SIZE_EP1) -#define MAX_PACKET_SIZE_EPISO (MAX_PACKET_SIZE_EP3) - -/*EOF*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/USBDevice/USBEndpoints_STM32F1.h Fri Jul 08 21:16:25 2016 +0000 @@ -0,0 +1,67 @@ +/* Copyright (c) 2010-2015 mbed.org, MIT License +* +* Permission is hereby granted, free of charge, to any person obtaining a copy of this software +* and associated documentation files (the "Software"), to deal in the Software without +* restriction, including without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all copies or +* substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#define NUMBER_OF_LOGICAL_ENDPOINTS (4) +#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2) + +/* Define physical endpoint numbers */ + +/* Endpoint No. Type(s) MaxPacket DoubleBuffer */ +/* ---------------- ------------ ---------- --- */ +#define EP0OUT (0) /* Control 64 No */ +#define EP0IN (1) /* Control 64 No */ +#define EP1OUT (2) /* Int/Bulk/Iso 64/64/1023 Yes */ +#define EP1IN (3) /* Int/Bulk/Iso 64/64/1023 Yes */ +#define EP2OUT (4) /* Int/Bulk/Iso 64/64/1023 Yes */ +#define EP2IN (5) /* Int/Bulk/Iso 64/64/1023 Yes */ +#define EP3OUT (6) /* Int/Bulk/Iso 64/64/1023 Yes */ +#define EP3IN (7) /* Int/Bulk/Iso 64/64/1023 Yes */ + +/* Maximum Packet sizes */ + +#define MAX_PACKET_SIZE_EP0 (64) +#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */ +#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */ +#define MAX_PACKET_SIZE_EP3 (64) /* Int/Bulk */ + +#define MAX_PACKET_SIZE_EP1_ISO (192) /* Isochronous */ +#define MAX_PACKET_SIZE_EP2_ISO (192) /* Isochronous */ +#define MAX_PACKET_SIZE_EP3_ISO (192) /* Isochronous */ + +/* Generic endpoints - intended to be portable accross devices */ +/* and be suitable for simple USB devices. */ + +/* Bulk endpoint */ +#define EPBULK_OUT (EP2OUT) +#define EPBULK_IN (EP2IN) +#define EPBULK_OUT_callback EP2_OUT_callback +#define EPBULK_IN_callback EP2_IN_callback +/* Interrupt endpoint */ +#define EPINT_OUT (EP1OUT) +#define EPINT_IN (EP1IN) +#define EPINT_OUT_callback EP1_OUT_callback +#define EPINT_IN_callback EP1_IN_callback +/* Isochronous endpoint */ +#define EPISO_OUT (EP3OUT) +#define EPISO_IN (EP3IN) +#define EPISO_OUT_callback EP3_OUT_callback +#define EPISO_IN_callback EP3_IN_callback + +#define MAX_PACKET_SIZE_EPBULK (MAX_PACKET_SIZE_EP2) +#define MAX_PACKET_SIZE_EPINT (MAX_PACKET_SIZE_EP1) +#define MAX_PACKET_SIZE_EPISO (MAX_PACKET_SIZE_EP3_ISO)
--- a/USBDevice/USBEndpoints_STM32F4.h Thu Jun 25 09:33:51 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* Copyright (c) 2010-2011 mbed.org, MIT License -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of this software -* and associated documentation files (the "Software"), to deal in the Software without -* restriction, including without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all copies or -* substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING -* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#define NUMBER_OF_LOGICAL_ENDPOINTS (4) -#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2) - -/* Define physical endpoint numbers */ - -/* Endpoint No. Type(s) MaxPacket DoubleBuffer */ -/* ---------------- ------------ ---------- --- */ -#define EP0OUT (0) /* Control 64 No */ -#define EP0IN (1) /* Control 64 No */ -#define EP1OUT (2) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP1IN (3) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP2OUT (4) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP2IN (5) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP3OUT (6) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP3IN (7) /* Int/Bulk/Iso 64/64/1023 Yes */ - -/* Maximum Packet sizes */ - -#define MAX_PACKET_SIZE_EP0 (64) -#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */ -#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */ -#define MAX_PACKET_SIZE_EP3 (64) /* Int/Bulk */ - -#define MAX_PACKET_SIZE_EP1_ISO (1023) /* Isochronous */ -#define MAX_PACKET_SIZE_EP2_ISO (1023) /* Isochronous */ -#define MAX_PACKET_SIZE_EP3_ISO (1023) /* Isochronous */ - -/* Generic endpoints - intended to be portable accross devices */ -/* and be suitable for simple USB devices. */ - -/* Bulk endpoint */ -#define EPBULK_OUT (EP2OUT) -#define EPBULK_IN (EP2IN) -#define EPBULK_OUT_callback EP2_OUT_callback -#define EPBULK_IN_callback EP2_IN_callback -/* Interrupt endpoint */ -#define EPINT_OUT (EP1OUT) -#define EPINT_IN (EP1IN) -#define EPINT_OUT_callback EP1_OUT_callback -#define EPINT_IN_callback EP1_IN_callback -/* Isochronous endpoint */ -#define EPISO_OUT (EP3OUT) -#define EPISO_IN (EP3IN) -#define EPISO_OUT_callback EP3_OUT_callback -#define EPISO_IN_callback EP3_IN_callback - -#define MAX_PACKET_SIZE_EPBULK (MAX_PACKET_SIZE_EP2) -#define MAX_PACKET_SIZE_EPINT (MAX_PACKET_SIZE_EP1) -#define MAX_PACKET_SIZE_EPISO (MAX_PACKET_SIZE_EP3_ISO)
--- a/USBDevice/USBEndpoints_STM32L1.h Thu Jun 25 09:33:51 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* Copyright (c) 2010-2015 mbed.org, MIT License -* -* Permission is hereby granted, free of charge, to any person obtaining a copy of this software -* and associated documentation files (the "Software"), to deal in the Software without -* restriction, including without limitation the rights to use, copy, modify, merge, publish, -* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following conditions: -* -* The above copyright notice and this permission notice shall be included in all copies or -* substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING -* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#define NUMBER_OF_LOGICAL_ENDPOINTS (4) -#define NUMBER_OF_PHYSICAL_ENDPOINTS (NUMBER_OF_LOGICAL_ENDPOINTS * 2) - -/* Define physical endpoint numbers */ - -/* Endpoint No. Type(s) MaxPacket DoubleBuffer */ -/* ---------------- ------------ ---------- --- */ -#define EP0OUT (0) /* Control 64 No */ -#define EP0IN (1) /* Control 64 No */ -#define EP1OUT (2) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP1IN (3) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP2OUT (4) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP2IN (5) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP3OUT (6) /* Int/Bulk/Iso 64/64/1023 Yes */ -#define EP3IN (7) /* Int/Bulk/Iso 64/64/1023 Yes */ - -/* Maximum Packet sizes */ - -#define MAX_PACKET_SIZE_EP0 (64) -#define MAX_PACKET_SIZE_EP1 (64) /* Int/Bulk */ -#define MAX_PACKET_SIZE_EP2 (64) /* Int/Bulk */ -#define MAX_PACKET_SIZE_EP3 (64) /* Int/Bulk */ - -#define MAX_PACKET_SIZE_EP1_ISO (192) /* Isochronous */ -#define MAX_PACKET_SIZE_EP2_ISO (192) /* Isochronous */ -#define MAX_PACKET_SIZE_EP3_ISO (192) /* Isochronous */ - -/* Generic endpoints - intended to be portable accross devices */ -/* and be suitable for simple USB devices. */ - -/* Bulk endpoint */ -#define EPBULK_OUT (EP2OUT) -#define EPBULK_IN (EP2IN) -#define EPBULK_OUT_callback EP2_OUT_callback -#define EPBULK_IN_callback EP2_IN_callback -/* Interrupt endpoint */ -#define EPINT_OUT (EP1OUT) -#define EPINT_IN (EP1IN) -#define EPINT_OUT_callback EP1_OUT_callback -#define EPINT_IN_callback EP1_IN_callback -/* Isochronous endpoint */ -#define EPISO_OUT (EP3OUT) -#define EPISO_IN (EP3IN) -#define EPISO_OUT_callback EP3_OUT_callback -#define EPISO_IN_callback EP3_IN_callback - -#define MAX_PACKET_SIZE_EPBULK (MAX_PACKET_SIZE_EP2) -#define MAX_PACKET_SIZE_EPINT (MAX_PACKET_SIZE_EP1) -#define MAX_PACKET_SIZE_EPISO (MAX_PACKET_SIZE_EP3_ISO)
--- a/USBDevice/USBHAL_KL25Z.cpp Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,551 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_KL25Z) | defined(TARGET_KL43Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D50M) | defined(TARGET_K64F) | defined(TARGET_K22F) | defined(TARGET_TEENSY3_1)
-
-#include "USBHAL.h"
-
-USBHAL * USBHAL::instance;
-
-static volatile int epComplete = 0;
-
-// Convert physical endpoint number to register bit
-#define EP(endpoint) (1<<(endpoint))
-
-// Convert physical to logical
-#define PHY_TO_LOG(endpoint) ((endpoint)>>1)
-
-// Get endpoint direction
-#define IN_EP(endpoint) ((endpoint) & 1U ? true : false)
-#define OUT_EP(endpoint) ((endpoint) & 1U ? false : true)
-
-#define BD_OWN_MASK (1<<7)
-#define BD_DATA01_MASK (1<<6)
-#define BD_KEEP_MASK (1<<5)
-#define BD_NINC_MASK (1<<4)
-#define BD_DTS_MASK (1<<3)
-#define BD_STALL_MASK (1<<2)
-
-#define TX 1
-#define RX 0
-#define ODD 0
-#define EVEN 1
-// this macro waits a physical endpoint number
-#define EP_BDT_IDX(ep, dir, odd) (((ep * 4) + (2 * dir) + (1 * odd)))
-
-#define SETUP_TOKEN 0x0D
-#define IN_TOKEN 0x09
-#define OUT_TOKEN 0x01
-#define TOK_PID(idx) ((bdt[idx].info >> 2) & 0x0F)
-
-// for each endpt: 8 bytes
-typedef struct BDT {
- uint8_t info; // BD[0:7]
- uint8_t dummy; // RSVD: BD[8:15]
- uint16_t byte_count; // BD[16:32]
- uint32_t address; // Addr
-} BDT;
-
-
-// there are:
-// * 16 bidirectionnal endpt -> 32 physical endpt
-// * as there are ODD and EVEN buffer -> 32*2 bdt
-__attribute__((__aligned__(512))) BDT bdt[NUMBER_OF_PHYSICAL_ENDPOINTS * 2];
-uint8_t * endpoint_buffer[(NUMBER_OF_PHYSICAL_ENDPOINTS - 2) * 2];
-uint8_t * endpoint_buffer_iso[2*2];
-
-static uint8_t set_addr = 0;
-static uint8_t addr = 0;
-
-static uint32_t Data1 = 0x55555555;
-
-static uint32_t frameNumber() {
- return((USB0->FRMNUML | (USB0->FRMNUMH << 8)) & 0x07FF);
-}
-
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
- return 0;
-}
-
-USBHAL::USBHAL(void) {
- // Disable IRQ
- NVIC_DisableIRQ(USB0_IRQn);
-
-#if defined(TARGET_K64F)
- MPU->CESR=0;
-#endif
- // fill in callback array
- epCallback[0] = &USBHAL::EP1_OUT_callback;
- epCallback[1] = &USBHAL::EP1_IN_callback;
- epCallback[2] = &USBHAL::EP2_OUT_callback;
- epCallback[3] = &USBHAL::EP2_IN_callback;
- epCallback[4] = &USBHAL::EP3_OUT_callback;
- epCallback[5] = &USBHAL::EP3_IN_callback;
- epCallback[6] = &USBHAL::EP4_OUT_callback;
- epCallback[7] = &USBHAL::EP4_IN_callback;
- epCallback[8] = &USBHAL::EP5_OUT_callback;
- epCallback[9] = &USBHAL::EP5_IN_callback;
- epCallback[10] = &USBHAL::EP6_OUT_callback;
- epCallback[11] = &USBHAL::EP6_IN_callback;
- epCallback[12] = &USBHAL::EP7_OUT_callback;
- epCallback[13] = &USBHAL::EP7_IN_callback;
- epCallback[14] = &USBHAL::EP8_OUT_callback;
- epCallback[15] = &USBHAL::EP8_IN_callback;
- epCallback[16] = &USBHAL::EP9_OUT_callback;
- epCallback[17] = &USBHAL::EP9_IN_callback;
- epCallback[18] = &USBHAL::EP10_OUT_callback;
- epCallback[19] = &USBHAL::EP10_IN_callback;
- epCallback[20] = &USBHAL::EP11_OUT_callback;
- epCallback[21] = &USBHAL::EP11_IN_callback;
- epCallback[22] = &USBHAL::EP12_OUT_callback;
- epCallback[23] = &USBHAL::EP12_IN_callback;
- epCallback[24] = &USBHAL::EP13_OUT_callback;
- epCallback[25] = &USBHAL::EP13_IN_callback;
- epCallback[26] = &USBHAL::EP14_OUT_callback;
- epCallback[27] = &USBHAL::EP14_IN_callback;
- epCallback[28] = &USBHAL::EP15_OUT_callback;
- epCallback[29] = &USBHAL::EP15_IN_callback;
-
-#if defined(TARGET_KL43Z)
- // enable USBFS clock
- SIM->SCGC4 |= SIM_SCGC4_USBFS_MASK;
-
- // enable the IRC48M clock
- USB0->CLK_RECOVER_IRC_EN |= USB_CLK_RECOVER_IRC_EN_IRC_EN_MASK;
-
- // enable the USB clock recovery tuning
- USB0->CLK_RECOVER_CTRL |= USB_CLK_RECOVER_CTRL_CLOCK_RECOVER_EN_MASK;
-
- // choose usb src clock
- SIM->SOPT2 |= SIM_SOPT2_USBSRC_MASK;
-#else
- // choose usb src as PLL
- SIM->SOPT2 &= ~SIM_SOPT2_PLLFLLSEL_MASK;
- SIM->SOPT2 |= (SIM_SOPT2_USBSRC_MASK | (1 << SIM_SOPT2_PLLFLLSEL_SHIFT));
-
- // enable OTG clock
- SIM->SCGC4 |= SIM_SCGC4_USBOTG_MASK;
-#endif
-
- // Attach IRQ
- instance = this;
- NVIC_SetVector(USB0_IRQn, (uint32_t)&_usbisr);
- NVIC_EnableIRQ(USB0_IRQn);
-
- // USB Module Configuration
- // Reset USB Module
- USB0->USBTRC0 |= USB_USBTRC0_USBRESET_MASK;
- while(USB0->USBTRC0 & USB_USBTRC0_USBRESET_MASK);
-
- // Set BDT Base Register
- USB0->BDTPAGE1 = (uint8_t)((uint32_t)bdt>>8);
- USB0->BDTPAGE2 = (uint8_t)((uint32_t)bdt>>16);
- USB0->BDTPAGE3 = (uint8_t)((uint32_t)bdt>>24);
-
- // Clear interrupt flag
- USB0->ISTAT = 0xff;
-
- // USB Interrupt Enablers
- USB0->INTEN |= USB_INTEN_TOKDNEEN_MASK |
- USB_INTEN_SOFTOKEN_MASK |
- USB_INTEN_ERROREN_MASK |
- USB_INTEN_USBRSTEN_MASK;
-
- // Disable weak pull downs
- USB0->USBCTRL &= ~(USB_USBCTRL_PDE_MASK | USB_USBCTRL_SUSP_MASK);
-
- USB0->USBTRC0 |= 0x40;
-}
-
-USBHAL::~USBHAL(void) { }
-
-void USBHAL::connect(void) {
- // enable USB
- USB0->CTL |= USB_CTL_USBENSOFEN_MASK;
- // Pull up enable
- USB0->CONTROL |= USB_CONTROL_DPPULLUPNONOTG_MASK;
-}
-
-void USBHAL::disconnect(void) {
- // disable USB
- USB0->CTL &= ~USB_CTL_USBENSOFEN_MASK;
- // Pull up disable
- USB0->CONTROL &= ~USB_CONTROL_DPPULLUPNONOTG_MASK;
-
- //Free buffers if required:
- for (int i = 0; i<(NUMBER_OF_PHYSICAL_ENDPOINTS - 2) * 2; i++) {
- free(endpoint_buffer[i]);
- endpoint_buffer[i] = NULL;
- }
- free(endpoint_buffer_iso[2]);
- endpoint_buffer_iso[2] = NULL;
- free(endpoint_buffer_iso[0]);
- endpoint_buffer_iso[0] = NULL;
-}
-
-void USBHAL::configureDevice(void) {
- // not needed
-}
-
-void USBHAL::unconfigureDevice(void) {
- // not needed
-}
-
-void USBHAL::setAddress(uint8_t address) {
- // we don't set the address now otherwise the usb controller does not ack
- // we set a flag instead
- // see usbisr when an IN token is received
- set_addr = 1;
- addr = address;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
- uint32_t handshake_flag = 0;
- uint8_t * buf;
-
- if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1) {
- return false;
- }
-
- uint32_t log_endpoint = PHY_TO_LOG(endpoint);
-
- if ((flags & ISOCHRONOUS) == 0) {
- handshake_flag = USB_ENDPT_EPHSHK_MASK;
- if (IN_EP(endpoint)) {
- if (endpoint_buffer[EP_BDT_IDX(log_endpoint, TX, ODD)] == NULL)
- endpoint_buffer[EP_BDT_IDX(log_endpoint, TX, ODD)] = (uint8_t *) malloc (64*2);
- buf = &endpoint_buffer[EP_BDT_IDX(log_endpoint, TX, ODD)][0];
- } else {
- if (endpoint_buffer[EP_BDT_IDX(log_endpoint, RX, ODD)] == NULL)
- endpoint_buffer[EP_BDT_IDX(log_endpoint, RX, ODD)] = (uint8_t *) malloc (64*2);
- buf = &endpoint_buffer[EP_BDT_IDX(log_endpoint, RX, ODD)][0];
- }
- } else {
- if (IN_EP(endpoint)) {
- if (endpoint_buffer_iso[2] == NULL)
- endpoint_buffer_iso[2] = (uint8_t *) malloc (1023*2);
- buf = &endpoint_buffer_iso[2][0];
- } else {
- if (endpoint_buffer_iso[0] == NULL)
- endpoint_buffer_iso[0] = (uint8_t *) malloc (1023*2);
- buf = &endpoint_buffer_iso[0][0];
- }
- }
-
- // IN endpt -> device to host (TX)
- if (IN_EP(endpoint)) {
- USB0->ENDPOINT[log_endpoint].ENDPT |= handshake_flag | // ep handshaking (not if iso endpoint)
- USB_ENDPT_EPTXEN_MASK; // en TX (IN) tran
- bdt[EP_BDT_IDX(log_endpoint, TX, ODD )].address = (uint32_t) buf;
- bdt[EP_BDT_IDX(log_endpoint, TX, EVEN)].address = 0;
- }
- // OUT endpt -> host to device (RX)
- else {
- USB0->ENDPOINT[log_endpoint].ENDPT |= handshake_flag | // ep handshaking (not if iso endpoint)
- USB_ENDPT_EPRXEN_MASK; // en RX (OUT) tran.
- bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].byte_count = maxPacket;
- bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].address = (uint32_t) buf;
- bdt[EP_BDT_IDX(log_endpoint, RX, ODD )].info = BD_OWN_MASK | BD_DTS_MASK;
- bdt[EP_BDT_IDX(log_endpoint, RX, EVEN)].info = 0;
- }
-
- Data1 |= (1 << endpoint);
-
- return true;
-}
-
-// read setup packet
-void USBHAL::EP0setup(uint8_t *buffer) {
- uint32_t sz;
- endpointReadResult(EP0OUT, buffer, &sz);
-}
-
-void USBHAL::EP0readStage(void) {
- Data1 &= ~1UL; // set DATA0
- bdt[0].info = (BD_DTS_MASK | BD_OWN_MASK);
-}
-
-void USBHAL::EP0read(void) {
- uint32_t idx = EP_BDT_IDX(PHY_TO_LOG(EP0OUT), RX, 0);
- bdt[idx].byte_count = MAX_PACKET_SIZE_EP0;
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
- uint32_t sz;
- endpointReadResult(EP0OUT, buffer, &sz);
- return sz;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
- endpointWrite(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
-}
-
-void USBHAL::EP0stall(void) {
- stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
- endpoint = PHY_TO_LOG(endpoint);
- uint32_t idx = EP_BDT_IDX(endpoint, RX, 0);
- bdt[idx].byte_count = maximumSize;
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
- uint32_t n, sz, idx, setup = 0;
- uint8_t not_iso;
- uint8_t * ep_buf;
-
- uint32_t log_endpoint = PHY_TO_LOG(endpoint);
-
- if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1) {
- return EP_INVALID;
- }
-
- // if read on a IN endpoint -> error
- if (IN_EP(endpoint)) {
- return EP_INVALID;
- }
-
- idx = EP_BDT_IDX(log_endpoint, RX, 0);
- sz = bdt[idx].byte_count;
- not_iso = USB0->ENDPOINT[log_endpoint].ENDPT & USB_ENDPT_EPHSHK_MASK;
-
- //for isochronous endpoint, we don't wait an interrupt
- if ((log_endpoint != 0) && not_iso && !(epComplete & EP(endpoint))) {
- return EP_PENDING;
- }
-
- if ((log_endpoint == 0) && (TOK_PID(idx) == SETUP_TOKEN)) {
- setup = 1;
- }
-
- // non iso endpoint
- if (not_iso) {
- ep_buf = endpoint_buffer[idx];
- } else {
- ep_buf = endpoint_buffer_iso[0];
- }
-
- for (n = 0; n < sz; n++) {
- buffer[n] = ep_buf[n];
- }
-
- if (((Data1 >> endpoint) & 1) == ((bdt[idx].info >> 6) & 1)) {
- if (setup && (buffer[6] == 0)) // if no setup data stage,
- Data1 &= ~1UL; // set DATA0
- else
- Data1 ^= (1 << endpoint);
- }
-
- if (((Data1 >> endpoint) & 1)) {
- bdt[idx].info = BD_DTS_MASK | BD_DATA01_MASK | BD_OWN_MASK;
- }
- else {
- bdt[idx].info = BD_DTS_MASK | BD_OWN_MASK;
- }
-
- USB0->CTL &= ~USB_CTL_TXSUSPENDTOKENBUSY_MASK;
- *bytesRead = sz;
-
- epComplete &= ~EP(endpoint);
- return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
- uint32_t idx, n;
- uint8_t * ep_buf;
-
- if (endpoint > NUMBER_OF_PHYSICAL_ENDPOINTS - 1) {
- return EP_INVALID;
- }
-
- // if write on a OUT endpoint -> error
- if (OUT_EP(endpoint)) {
- return EP_INVALID;
- }
-
- idx = EP_BDT_IDX(PHY_TO_LOG(endpoint), TX, 0);
- bdt[idx].byte_count = size;
-
-
- // non iso endpoint
- if (USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT & USB_ENDPT_EPHSHK_MASK) {
- ep_buf = endpoint_buffer[idx];
- } else {
- ep_buf = endpoint_buffer_iso[2];
- }
-
- for (n = 0; n < size; n++) {
- ep_buf[n] = data[n];
- }
-
- if ((Data1 >> endpoint) & 1) {
- bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK;
- } else {
- bdt[idx].info = BD_OWN_MASK | BD_DTS_MASK | BD_DATA01_MASK;
- }
-
- Data1 ^= (1 << endpoint);
-
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
- if (epComplete & EP(endpoint)) {
- epComplete &= ~EP(endpoint);
- return EP_COMPLETED;
- }
-
- return EP_PENDING;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
- USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT |= USB_ENDPT_EPSTALL_MASK;
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
- USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT &= ~USB_ENDPT_EPSTALL_MASK;
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
- uint8_t stall = (USB0->ENDPOINT[PHY_TO_LOG(endpoint)].ENDPT & USB_ENDPT_EPSTALL_MASK);
- return (stall) ? true : false;
-}
-
-void USBHAL::remoteWakeup(void) {
- // [TODO]
-}
-
-
-void USBHAL::_usbisr(void) {
- instance->usbisr();
-}
-
-
-void USBHAL::usbisr(void) {
- uint8_t i;
- uint8_t istat = USB0->ISTAT;
-
- // reset interrupt
- if (istat & USB_ISTAT_USBRST_MASK) {
- // disable all endpt
- for(i = 0; i < 16; i++) {
- USB0->ENDPOINT[i].ENDPT = 0x00;
- }
-
- // enable control endpoint
- realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
- realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
-
- Data1 = 0x55555555;
- USB0->CTL |= USB_CTL_ODDRST_MASK;
-
- USB0->ISTAT = 0xFF; // clear all interrupt status flags
- USB0->ERRSTAT = 0xFF; // clear all error flags
- USB0->ERREN = 0xFF; // enable error interrupt sources
- USB0->ADDR = 0x00; // set default address
-
- return;
- }
-
- // resume interrupt
- if (istat & USB_ISTAT_RESUME_MASK) {
- USB0->ISTAT = USB_ISTAT_RESUME_MASK;
- }
-
- // SOF interrupt
- if (istat & USB_ISTAT_SOFTOK_MASK) {
- USB0->ISTAT = USB_ISTAT_SOFTOK_MASK;
- // SOF event, read frame number
- SOF(frameNumber());
- }
-
- // stall interrupt
- if (istat & 1<<7) {
- if (USB0->ENDPOINT[0].ENDPT & USB_ENDPT_EPSTALL_MASK)
- USB0->ENDPOINT[0].ENDPT &= ~USB_ENDPT_EPSTALL_MASK;
- USB0->ISTAT |= USB_ISTAT_STALL_MASK;
- }
-
- // token interrupt
- if (istat & 1<<3) {
- uint32_t num = (USB0->STAT >> 4) & 0x0F;
- uint32_t dir = (USB0->STAT >> 3) & 0x01;
- uint32_t ev_odd = (USB0->STAT >> 2) & 0x01;
-
- // setup packet
- if ((num == 0) && (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == SETUP_TOKEN)) {
- Data1 &= ~0x02;
- bdt[EP_BDT_IDX(0, TX, EVEN)].info &= ~BD_OWN_MASK;
- bdt[EP_BDT_IDX(0, TX, ODD)].info &= ~BD_OWN_MASK;
-
- // EP0 SETUP event (SETUP data received)
- EP0setupCallback();
-
- } else {
- // OUT packet
- if (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == OUT_TOKEN) {
- if (num == 0)
- EP0out();
- else {
- epComplete |= (1 << EP(num));
- if ((instance->*(epCallback[EP(num) - 2]))()) {
- epComplete &= ~(1 << EP(num));
- }
- }
- }
-
- // IN packet
- if (TOK_PID((EP_BDT_IDX(num, dir, ev_odd))) == IN_TOKEN) {
- if (num == 0) {
- EP0in();
- if (set_addr == 1) {
- USB0->ADDR = addr & 0x7F;
- set_addr = 0;
- }
- }
- else {
- epComplete |= (1 << (EP(num) + 1));
- if ((instance->*(epCallback[EP(num) + 1 - 2]))()) {
- epComplete &= ~(1 << (EP(num) + 1));
- }
- }
- }
- }
-
- USB0->ISTAT = USB_ISTAT_TOKDNE_MASK;
- }
-
- // sleep interrupt
- if (istat & 1<<4) {
- USB0->ISTAT |= USB_ISTAT_SLEEP_MASK;
- }
-
- // error interrupt
- if (istat & USB_ISTAT_ERROR_MASK) {
- USB0->ERRSTAT = 0xFF;
- USB0->ISTAT |= USB_ISTAT_ERROR_MASK;
- }
-}
-
-
-#endif
--- a/USBDevice/USBHAL_LPC11U.cpp Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,738 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_LPC11UXX) || defined(TARGET_LPC11U6X) || defined(TARGET_LPC1347) || defined(TARGET_LPC1549)
-
-#if defined(TARGET_LPC1347) || defined(TARGET_LPC1549)
-#define USB_IRQ USB_IRQ_IRQn
-#else
-#define USB_IRQ USB_IRQn
-#endif
-
-#include "USBHAL.h"
-
-USBHAL * USBHAL::instance;
-#if defined(TARGET_LPC1549)
-static uint8_t usbmem[2048] __attribute__((aligned(2048)));
-#endif
-
-// Valid physical endpoint numbers are 0 to (NUMBER_OF_PHYSICAL_ENDPOINTS-1)
-#define LAST_PHYSICAL_ENDPOINT (NUMBER_OF_PHYSICAL_ENDPOINTS-1)
-
-// Convert physical endpoint number to register bit
-#define EP(endpoint) (1UL<<endpoint)
-
-// Convert physical to logical
-#define PHY_TO_LOG(endpoint) ((endpoint)>>1)
-
-// Get endpoint direction
-#define IN_EP(endpoint) ((endpoint) & 1U ? true : false)
-#define OUT_EP(endpoint) ((endpoint) & 1U ? false : true)
-
-// USB RAM
-#if defined(TARGET_LPC1549)
-#define USB_RAM_START ((uint32_t)usbmem)
-#define USB_RAM_SIZE sizeof(usbmem)
-#else
-#define USB_RAM_START (0x20004000)
-#define USB_RAM_SIZE (0x00000800)
-#endif
-
-// SYSAHBCLKCTRL
-#if defined(TARGET_LPC1549)
-#define CLK_USB (1UL<<23)
-#else
-#define CLK_USB (1UL<<14)
-#define CLK_USBRAM (1UL<<27)
-#endif
-
-// USB Information register
-#define FRAME_NR(a) ((a) & 0x7ff) // Frame number
-
-// USB Device Command/Status register
-#define DEV_ADDR_MASK (0x7f) // Device address
-#define DEV_ADDR(a) ((a) & DEV_ADDR_MASK)
-#define DEV_EN (1UL<<7) // Device enable
-#define SETUP (1UL<<8) // SETUP token received
-#define PLL_ON (1UL<<9) // PLL enabled in suspend
-#define DCON (1UL<<16) // Device status - connect
-#define DSUS (1UL<<17) // Device status - suspend
-#define DCON_C (1UL<<24) // Connect change
-#define DSUS_C (1UL<<25) // Suspend change
-#define DRES_C (1UL<<26) // Reset change
-#define VBUSDEBOUNCED (1UL<<28) // Vbus detected
-
-// Endpoint Command/Status list
-#define CMDSTS_A (1UL<<31) // Active
-#define CMDSTS_D (1UL<<30) // Disable
-#define CMDSTS_S (1UL<<29) // Stall
-#define CMDSTS_TR (1UL<<28) // Toggle Reset
-#define CMDSTS_RF (1UL<<27) // Rate Feedback mode
-#define CMDSTS_TV (1UL<<27) // Toggle Value
-#define CMDSTS_T (1UL<<26) // Endpoint Type
-#define CMDSTS_NBYTES(n) (((n)&0x3ff)<<16) // Number of bytes
-#define CMDSTS_ADDRESS_OFFSET(a) (((a)>>6)&0xffff) // Buffer start address
-
-#define BYTES_REMAINING(s) (((s)>>16)&0x3ff) // Bytes remaining after transfer
-
-// USB Non-endpoint interrupt sources
-#define FRAME_INT (1UL<<30)
-#define DEV_INT (1UL<<31)
-
-static volatile int epComplete = 0;
-
-// One entry for a double-buffered logical endpoint in the endpoint
-// command/status list. Endpoint 0 is single buffered, out[1] is used
-// for the SETUP packet and in[1] is not used
-typedef struct {
- uint32_t out[2];
- uint32_t in[2];
-} PACKED EP_COMMAND_STATUS;
-
-typedef struct {
- uint8_t out[MAX_PACKET_SIZE_EP0];
- uint8_t in[MAX_PACKET_SIZE_EP0];
- uint8_t setup[SETUP_PACKET_SIZE];
-} PACKED CONTROL_TRANSFER;
-
-typedef struct {
- uint32_t maxPacket;
- uint32_t buffer[2];
- uint32_t options;
-} PACKED EP_STATE;
-
-static volatile EP_STATE endpointState[NUMBER_OF_PHYSICAL_ENDPOINTS];
-
-// Pointer to the endpoint command/status list
-static EP_COMMAND_STATUS *ep = NULL;
-
-// Pointer to endpoint 0 data (IN/OUT and SETUP)
-static CONTROL_TRANSFER *ct = NULL;
-
-// Shadow DEVCMDSTAT register to avoid accidentally clearing flags or
-// initiating a remote wakeup event.
-static volatile uint32_t devCmdStat;
-
-// Pointers used to allocate USB RAM
-static uint32_t usbRamPtr = USB_RAM_START;
-static uint32_t epRamPtr = 0; // Buffers for endpoints > 0 start here
-
-#define ROUND_UP_TO_MULTIPLE(x, m) ((((x)+((m)-1))/(m))*(m))
-
-void USBMemCopy(uint8_t *dst, uint8_t *src, uint32_t size);
-void USBMemCopy(uint8_t *dst, uint8_t *src, uint32_t size) {
- if (size > 0) {
- do {
- *dst++ = *src++;
- } while (--size > 0);
- }
-}
-
-
-USBHAL::USBHAL(void) {
- NVIC_DisableIRQ(USB_IRQ);
-
- // fill in callback array
- epCallback[0] = &USBHAL::EP1_OUT_callback;
- epCallback[1] = &USBHAL::EP1_IN_callback;
- epCallback[2] = &USBHAL::EP2_OUT_callback;
- epCallback[3] = &USBHAL::EP2_IN_callback;
- epCallback[4] = &USBHAL::EP3_OUT_callback;
- epCallback[5] = &USBHAL::EP3_IN_callback;
- epCallback[6] = &USBHAL::EP4_OUT_callback;
- epCallback[7] = &USBHAL::EP4_IN_callback;
-
-#if defined(TARGET_LPC1549)
- /* Set USB PLL input to system oscillator */
- LPC_SYSCON->USBPLLCLKSEL = 0x01;
-
- /* Setup USB PLL (FCLKIN = 12MHz) * 4 = 48MHz
- MSEL = 3 (this is pre-decremented), PSEL = 1 (for P = 2)
- FCLKOUT = FCLKIN * (MSEL + 1) = 12MHz * 4 = 48MHz
- FCCO = FCLKOUT * 2 * P = 48MHz * 2 * 2 = 192MHz (within FCCO range) */
- LPC_SYSCON->USBPLLCTRL = (0x3 | (1UL << 6));
-
- /* Powerup USB PLL */
- LPC_SYSCON->PDRUNCFG &= ~(CLK_USB);
-
- /* Wait for PLL to lock */
- while(!(LPC_SYSCON->USBPLLSTAT & 0x01));
-
- /* enable USB main clock */
- LPC_SYSCON->USBCLKSEL = 0x02;
- LPC_SYSCON->USBCLKDIV = 1;
-
- /* Enable AHB clock to the USB block. */
- LPC_SYSCON->SYSAHBCLKCTRL1 |= CLK_USB;
-
- /* power UP USB Phy */
- LPC_SYSCON->PDRUNCFG &= ~(1UL << 9);
-
- /* Reset USB block */
- LPC_SYSCON->PRESETCTRL1 |= (CLK_USB);
- LPC_SYSCON->PRESETCTRL1 &= ~(CLK_USB);
-
-#else
- #if defined(TARGET_LPC11U35_401) || defined(TARGET_LPC11U35_501)
- // USB_VBUS input with pull-down
- LPC_IOCON->PIO0_3 = 0x00000009;
- #endif
-
- // nUSB_CONNECT output
- LPC_IOCON->PIO0_6 = 0x00000001;
-
- // Enable clocks (USB registers, USB RAM)
- LPC_SYSCON->SYSAHBCLKCTRL |= CLK_USB | CLK_USBRAM;
-
- // Ensure device disconnected (DCON not set)
- LPC_USB->DEVCMDSTAT = 0;
-#endif
- // to ensure that the USB host sees the device as
- // disconnected if the target CPU is reset.
- wait(0.3);
-
- // Reserve space in USB RAM for endpoint command/status list
- // Must be 256 byte aligned
- usbRamPtr = ROUND_UP_TO_MULTIPLE(usbRamPtr, 256);
- ep = (EP_COMMAND_STATUS *)usbRamPtr;
- usbRamPtr += (sizeof(EP_COMMAND_STATUS) * NUMBER_OF_LOGICAL_ENDPOINTS);
- LPC_USB->EPLISTSTART = (uint32_t)(ep) & 0xffffff00;
-
- // Reserve space in USB RAM for Endpoint 0
- // Must be 64 byte aligned
- usbRamPtr = ROUND_UP_TO_MULTIPLE(usbRamPtr, 64);
- ct = (CONTROL_TRANSFER *)usbRamPtr;
- usbRamPtr += sizeof(CONTROL_TRANSFER);
- LPC_USB->DATABUFSTART =(uint32_t)(ct) & 0xffc00000;
-
- // Setup command/status list for EP0
- ep[0].out[0] = 0;
- ep[0].in[0] = 0;
- ep[0].out[1] = CMDSTS_ADDRESS_OFFSET((uint32_t)ct->setup);
-
- // Route all interrupts to IRQ, some can be routed to
- // USB_FIQ if you wish.
- LPC_USB->INTROUTING = 0;
-
- // Set device address 0, enable USB device, no remote wakeup
- devCmdStat = DEV_ADDR(0) | DEV_EN | DSUS;
- LPC_USB->DEVCMDSTAT = devCmdStat;
-
- // Enable interrupts for device events and EP0
- LPC_USB->INTEN = DEV_INT | EP(EP0IN) | EP(EP0OUT) | FRAME_INT;
- instance = this;
-
- //attach IRQ handler and enable interrupts
- NVIC_SetVector(USB_IRQ, (uint32_t)&_usbisr);
-}
-
-USBHAL::~USBHAL(void) {
- // Ensure device disconnected (DCON not set)
- LPC_USB->DEVCMDSTAT = 0;
- // Disable USB interrupts
- NVIC_DisableIRQ(USB_IRQ);
-}
-
-void USBHAL::connect(void) {
- NVIC_EnableIRQ(USB_IRQ);
- devCmdStat |= DCON;
- LPC_USB->DEVCMDSTAT = devCmdStat;
-}
-
-void USBHAL::disconnect(void) {
- NVIC_DisableIRQ(USB_IRQ);
- devCmdStat &= ~DCON;
- LPC_USB->DEVCMDSTAT = devCmdStat;
-}
-
-void USBHAL::configureDevice(void) {
- // Not required
-}
-
-void USBHAL::unconfigureDevice(void) {
- // Not required
-}
-
-void USBHAL::EP0setup(uint8_t *buffer) {
- // Copy setup packet data
- USBMemCopy(buffer, ct->setup, SETUP_PACKET_SIZE);
-}
-
-void USBHAL::EP0read(void) {
- // Start an endpoint 0 read
-
- // The USB ISR will call USBDevice_EP0out() when a packet has been read,
- // the USBDevice layer then calls USBBusInterface_EP0getReadResult() to
- // read the data.
-
- ep[0].out[0] = CMDSTS_A |CMDSTS_NBYTES(MAX_PACKET_SIZE_EP0) \
- | CMDSTS_ADDRESS_OFFSET((uint32_t)ct->out);
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
- // Complete an endpoint 0 read
- uint32_t bytesRead;
-
- // Find how many bytes were read
- bytesRead = MAX_PACKET_SIZE_EP0 - BYTES_REMAINING(ep[0].out[0]);
-
- // Copy data
- USBMemCopy(buffer, ct->out, bytesRead);
- return bytesRead;
-}
-
-
-void USBHAL::EP0readStage(void) {
- // Not required
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
- // Start and endpoint 0 write
-
- // The USB ISR will call USBDevice_EP0in() when the data has
- // been written, the USBDevice layer then calls
- // USBBusInterface_EP0getWriteResult() to complete the transaction.
-
- // Copy data
- USBMemCopy(ct->in, buffer, size);
-
- // Start transfer
- ep[0].in[0] = CMDSTS_A | CMDSTS_NBYTES(size) \
- | CMDSTS_ADDRESS_OFFSET((uint32_t)ct->in);
-}
-
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
- uint8_t bf = 0;
- uint32_t flags = 0;
-
- //check which buffer must be filled
- if (LPC_USB->EPBUFCFG & EP(endpoint)) {
- // Double buffered
- if (LPC_USB->EPINUSE & EP(endpoint)) {
- bf = 1;
- } else {
- bf = 0;
- }
- }
-
- // if isochronous endpoint, T = 1
- if(endpointState[endpoint].options & ISOCHRONOUS)
- {
- flags |= CMDSTS_T;
- }
-
- //Active the endpoint for reading
- ep[PHY_TO_LOG(endpoint)].out[bf] = CMDSTS_A | CMDSTS_NBYTES(maximumSize) \
- | CMDSTS_ADDRESS_OFFSET((uint32_t)ct->out) | flags;
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *data, uint32_t *bytesRead) {
-
- uint8_t bf = 0;
-
- if (!(epComplete & EP(endpoint)))
- return EP_PENDING;
- else {
- epComplete &= ~EP(endpoint);
-
- //check which buffer has been filled
- if (LPC_USB->EPBUFCFG & EP(endpoint)) {
- // Double buffered (here we read the previous buffer which was used)
- if (LPC_USB->EPINUSE & EP(endpoint)) {
- bf = 0;
- } else {
- bf = 1;
- }
- }
-
- // Find how many bytes were read
- *bytesRead = (uint32_t) (endpointState[endpoint].maxPacket - BYTES_REMAINING(ep[PHY_TO_LOG(endpoint)].out[bf]));
-
- // Copy data
- USBMemCopy(data, ct->out, *bytesRead);
- return EP_COMPLETED;
- }
-}
-
-void USBHAL::EP0getWriteResult(void) {
- // Not required
-}
-
-void USBHAL::EP0stall(void) {
- ep[0].in[0] = CMDSTS_S;
- ep[0].out[0] = CMDSTS_S;
-}
-
-void USBHAL::setAddress(uint8_t address) {
- devCmdStat &= ~DEV_ADDR_MASK;
- devCmdStat |= DEV_ADDR(address);
- LPC_USB->DEVCMDSTAT = devCmdStat;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
- uint32_t flags = 0;
- uint32_t bf;
-
- // Validate parameters
- if (data == NULL) {
- return EP_INVALID;
- }
-
- if (endpoint > LAST_PHYSICAL_ENDPOINT) {
- return EP_INVALID;
- }
-
- if ((endpoint==EP0IN) || (endpoint==EP0OUT)) {
- return EP_INVALID;
- }
-
- if (size > endpointState[endpoint].maxPacket) {
- return EP_INVALID;
- }
-
- if (LPC_USB->EPBUFCFG & EP(endpoint)) {
- // Double buffered
- if (LPC_USB->EPINUSE & EP(endpoint)) {
- bf = 1;
- } else {
- bf = 0;
- }
- } else {
- // Single buffered
- bf = 0;
- }
-
- // Check if already active
- if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_A) {
- return EP_INVALID;
- }
-
- // Check if stalled
- if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_S) {
- return EP_STALLED;
- }
-
- // Copy data to USB RAM
- USBMemCopy((uint8_t *)endpointState[endpoint].buffer[bf], data, size);
-
- // Add options
- if (endpointState[endpoint].options & RATE_FEEDBACK_MODE) {
- flags |= CMDSTS_RF;
- }
-
- if (endpointState[endpoint].options & ISOCHRONOUS) {
- flags |= CMDSTS_T;
- }
-
- // Add transfer
- ep[PHY_TO_LOG(endpoint)].in[bf] = CMDSTS_ADDRESS_OFFSET( \
- endpointState[endpoint].buffer[bf]) \
- | CMDSTS_NBYTES(size) | CMDSTS_A | flags;
-
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
- uint32_t bf;
-
- // Validate parameters
- if (endpoint > LAST_PHYSICAL_ENDPOINT) {
- return EP_INVALID;
- }
-
- if (OUT_EP(endpoint)) {
- return EP_INVALID;
- }
-
- if (LPC_USB->EPBUFCFG & EP(endpoint)) {
- // Double buffered // TODO: FIX THIS
- if (LPC_USB->EPINUSE & EP(endpoint)) {
- bf = 1;
- } else {
- bf = 0;
- }
- } else {
- // Single buffered
- bf = 0;
- }
-
- // Check if endpoint still active
- if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_A) {
- return EP_PENDING;
- }
-
- // Check if stalled
- if (ep[PHY_TO_LOG(endpoint)].in[bf] & CMDSTS_S) {
- return EP_STALLED;
- }
-
- return EP_COMPLETED;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
-
- // FIX: should this clear active bit?
- if (IN_EP(endpoint)) {
- ep[PHY_TO_LOG(endpoint)].in[0] |= CMDSTS_S;
- ep[PHY_TO_LOG(endpoint)].in[1] |= CMDSTS_S;
- } else {
- ep[PHY_TO_LOG(endpoint)].out[0] |= CMDSTS_S;
- ep[PHY_TO_LOG(endpoint)].out[1] |= CMDSTS_S;
- }
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
- if (LPC_USB->EPBUFCFG & EP(endpoint)) {
- // Double buffered
- if (IN_EP(endpoint)) {
- ep[PHY_TO_LOG(endpoint)].in[0] = 0; // S = 0
- ep[PHY_TO_LOG(endpoint)].in[1] = 0; // S = 0
-
- if (LPC_USB->EPINUSE & EP(endpoint)) {
- ep[PHY_TO_LOG(endpoint)].in[1] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
- } else {
- ep[PHY_TO_LOG(endpoint)].in[0] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
- }
- } else {
- ep[PHY_TO_LOG(endpoint)].out[0] = 0; // S = 0
- ep[PHY_TO_LOG(endpoint)].out[1] = 0; // S = 0
-
- if (LPC_USB->EPINUSE & EP(endpoint)) {
- ep[PHY_TO_LOG(endpoint)].out[1] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
- } else {
- ep[PHY_TO_LOG(endpoint)].out[0] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
- }
- }
- } else {
- // Single buffered
- if (IN_EP(endpoint)) {
- ep[PHY_TO_LOG(endpoint)].in[0] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
- } else {
- ep[PHY_TO_LOG(endpoint)].out[0] = CMDSTS_TR; // S = 0, TR = 1, TV = 0
- }
- }
-}
-
-bool USBHAL::getEndpointStallState(unsigned char endpoint) {
- if (IN_EP(endpoint)) {
- if (LPC_USB->EPINUSE & EP(endpoint)) {
- if (ep[PHY_TO_LOG(endpoint)].in[1] & CMDSTS_S) {
- return true;
- }
- } else {
- if (ep[PHY_TO_LOG(endpoint)].in[0] & CMDSTS_S) {
- return true;
- }
- }
- } else {
- if (LPC_USB->EPINUSE & EP(endpoint)) {
- if (ep[PHY_TO_LOG(endpoint)].out[1] & CMDSTS_S) {
- return true;
- }
- } else {
- if (ep[PHY_TO_LOG(endpoint)].out[0] & CMDSTS_S) {
- return true;
- }
- }
- }
-
- return false;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options) {
- uint32_t tmpEpRamPtr;
-
- if (endpoint > LAST_PHYSICAL_ENDPOINT) {
- return false;
- }
-
- // Not applicable to the control endpoints
- if ((endpoint==EP0IN) || (endpoint==EP0OUT)) {
- return false;
- }
-
- // Allocate buffers in USB RAM
- tmpEpRamPtr = epRamPtr;
-
- // Must be 64 byte aligned
- tmpEpRamPtr = ROUND_UP_TO_MULTIPLE(tmpEpRamPtr, 64);
-
- if ((tmpEpRamPtr + maxPacket) > (USB_RAM_START + USB_RAM_SIZE)) {
- // Out of memory
- return false;
- }
-
- // Allocate first buffer
- endpointState[endpoint].buffer[0] = tmpEpRamPtr;
- tmpEpRamPtr += maxPacket;
-
- if (!(options & SINGLE_BUFFERED)) {
- // Must be 64 byte aligned
- tmpEpRamPtr = ROUND_UP_TO_MULTIPLE(tmpEpRamPtr, 64);
-
- if ((tmpEpRamPtr + maxPacket) > (USB_RAM_START + USB_RAM_SIZE)) {
- // Out of memory
- return false;
- }
-
- // Allocate second buffer
- endpointState[endpoint].buffer[1] = tmpEpRamPtr;
- tmpEpRamPtr += maxPacket;
- }
-
- // Commit to this USB RAM allocation
- epRamPtr = tmpEpRamPtr;
-
- // Remaining endpoint state values
- endpointState[endpoint].maxPacket = maxPacket;
- endpointState[endpoint].options = options;
-
- // Enable double buffering if required
- if (options & SINGLE_BUFFERED) {
- LPC_USB->EPBUFCFG &= ~EP(endpoint);
- } else {
- // Double buffered
- LPC_USB->EPBUFCFG |= EP(endpoint);
- }
-
- // Enable interrupt
- LPC_USB->INTEN |= EP(endpoint);
-
- // Enable endpoint
- unstallEndpoint(endpoint);
- return true;
-}
-
-void USBHAL::remoteWakeup(void) {
- // Clearing DSUS bit initiates a remote wakeup if the
- // device is currently enabled and suspended - otherwise
- // it has no effect.
- LPC_USB->DEVCMDSTAT = devCmdStat & ~DSUS;
-}
-
-
-static void disableEndpoints(void) {
- uint32_t logEp;
-
- // Ref. Table 158 "When a bus reset is received, software
- // must set the disable bit of all endpoints to 1".
-
- for (logEp = 1; logEp < NUMBER_OF_LOGICAL_ENDPOINTS; logEp++) {
- ep[logEp].out[0] = CMDSTS_D;
- ep[logEp].out[1] = CMDSTS_D;
- ep[logEp].in[0] = CMDSTS_D;
- ep[logEp].in[1] = CMDSTS_D;
- }
-
- // Start of USB RAM for endpoints > 0
- epRamPtr = usbRamPtr;
-}
-
-
-
-void USBHAL::_usbisr(void) {
- instance->usbisr();
-}
-
-void USBHAL::usbisr(void) {
- // Start of frame
- if (LPC_USB->INTSTAT & FRAME_INT) {
- // Clear SOF interrupt
- LPC_USB->INTSTAT = FRAME_INT;
-
- // SOF event, read frame number
- SOF(FRAME_NR(LPC_USB->INFO));
- }
-
- // Device state
- if (LPC_USB->INTSTAT & DEV_INT) {
- LPC_USB->INTSTAT = DEV_INT;
-
- if (LPC_USB->DEVCMDSTAT & DSUS_C) {
- // Suspend status changed
- LPC_USB->DEVCMDSTAT = devCmdStat | DSUS_C;
- if((LPC_USB->DEVCMDSTAT & DSUS) != 0) {
- suspendStateChanged(1);
- }
- }
-
- if (LPC_USB->DEVCMDSTAT & DRES_C) {
- // Bus reset
- LPC_USB->DEVCMDSTAT = devCmdStat | DRES_C;
-
- suspendStateChanged(0);
-
- // Disable endpoints > 0
- disableEndpoints();
-
- // Bus reset event
- busReset();
- }
- }
-
- // Endpoint 0
- if (LPC_USB->INTSTAT & EP(EP0OUT)) {
- // Clear EP0OUT/SETUP interrupt
- LPC_USB->INTSTAT = EP(EP0OUT);
-
- // Check if SETUP
- if (LPC_USB->DEVCMDSTAT & SETUP) {
- // Clear Active and Stall bits for EP0
- // Documentation does not make it clear if we must use the
- // EPSKIP register to achieve this, Fig. 16 and NXP reference
- // code suggests we can just clear the Active bits - check with
- // NXP to be sure.
- ep[0].in[0] = 0;
- ep[0].out[0] = 0;
-
- // Clear EP0IN interrupt
- LPC_USB->INTSTAT = EP(EP0IN);
-
- // Clear SETUP (and INTONNAK_CI/O) in device status register
- LPC_USB->DEVCMDSTAT = devCmdStat | SETUP;
-
- // EP0 SETUP event (SETUP data received)
- EP0setupCallback();
- } else {
- // EP0OUT ACK event (OUT data received)
- EP0out();
- }
- }
-
- if (LPC_USB->INTSTAT & EP(EP0IN)) {
- // Clear EP0IN interrupt
- LPC_USB->INTSTAT = EP(EP0IN);
-
- // EP0IN ACK event (IN data sent)
- EP0in();
- }
-
- for (uint8_t num = 2; num < 5*2; num++) {
- if (LPC_USB->INTSTAT & EP(num)) {
- LPC_USB->INTSTAT = EP(num);
- epComplete |= EP(num);
- if ((instance->*(epCallback[num - 2]))()) {
- epComplete &= ~EP(num);
- }
- }
- }
-}
-
-#endif
--- a/USBDevice/USBHAL_LPC17.cpp Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,623 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC2460)
-
-#include "USBHAL.h"
-
-
-// Get endpoint direction
-#define IN_EP(endpoint) ((endpoint) & 1U ? true : false)
-#define OUT_EP(endpoint) ((endpoint) & 1U ? false : true)
-
-// Convert physical endpoint number to register bit
-#define EP(endpoint) (1UL<<endpoint)
-
-// Power Control for Peripherals register
-#define PCUSB (1UL<<31)
-
-// USB Clock Control register
-#define DEV_CLK_EN (1UL<<1)
-#define AHB_CLK_EN (1UL<<4)
-
-// USB Clock Status register
-#define DEV_CLK_ON (1UL<<1)
-#define AHB_CLK_ON (1UL<<4)
-
-// USB Device Interupt registers
-#define FRAME (1UL<<0)
-#define EP_FAST (1UL<<1)
-#define EP_SLOW (1UL<<2)
-#define DEV_STAT (1UL<<3)
-#define CCEMPTY (1UL<<4)
-#define CDFULL (1UL<<5)
-#define RxENDPKT (1UL<<6)
-#define TxENDPKT (1UL<<7)
-#define EP_RLZED (1UL<<8)
-#define ERR_INT (1UL<<9)
-
-// USB Control register
-#define RD_EN (1<<0)
-#define WR_EN (1<<1)
-#define LOG_ENDPOINT(endpoint) ((endpoint>>1)<<2)
-
-// USB Receive Packet Length register
-#define DV (1UL<<10)
-#define PKT_RDY (1UL<<11)
-#define PKT_LNGTH_MASK (0x3ff)
-
-// Serial Interface Engine (SIE)
-#define SIE_WRITE (0x01)
-#define SIE_READ (0x02)
-#define SIE_COMMAND (0x05)
-#define SIE_CMD_CODE(phase, data) ((phase<<8)|(data<<16))
-
-// SIE Command codes
-#define SIE_CMD_SET_ADDRESS (0xD0)
-#define SIE_CMD_CONFIGURE_DEVICE (0xD8)
-#define SIE_CMD_SET_MODE (0xF3)
-#define SIE_CMD_READ_FRAME_NUMBER (0xF5)
-#define SIE_CMD_READ_TEST_REGISTER (0xFD)
-#define SIE_CMD_SET_DEVICE_STATUS (0xFE)
-#define SIE_CMD_GET_DEVICE_STATUS (0xFE)
-#define SIE_CMD_GET_ERROR_CODE (0xFF)
-#define SIE_CMD_READ_ERROR_STATUS (0xFB)
-
-#define SIE_CMD_SELECT_ENDPOINT(endpoint) (0x00+endpoint)
-#define SIE_CMD_SELECT_ENDPOINT_CLEAR_INTERRUPT(endpoint) (0x40+endpoint)
-#define SIE_CMD_SET_ENDPOINT_STATUS(endpoint) (0x40+endpoint)
-
-#define SIE_CMD_CLEAR_BUFFER (0xF2)
-#define SIE_CMD_VALIDATE_BUFFER (0xFA)
-
-// SIE Device Status register
-#define SIE_DS_CON (1<<0)
-#define SIE_DS_CON_CH (1<<1)
-#define SIE_DS_SUS (1<<2)
-#define SIE_DS_SUS_CH (1<<3)
-#define SIE_DS_RST (1<<4)
-
-// SIE Device Set Address register
-#define SIE_DSA_DEV_EN (1<<7)
-
-// SIE Configue Device register
-#define SIE_CONF_DEVICE (1<<0)
-
-// Select Endpoint register
-#define SIE_SE_FE (1<<0)
-#define SIE_SE_ST (1<<1)
-#define SIE_SE_STP (1<<2)
-#define SIE_SE_PO (1<<3)
-#define SIE_SE_EPN (1<<4)
-#define SIE_SE_B_1_FULL (1<<5)
-#define SIE_SE_B_2_FULL (1<<6)
-
-// Set Endpoint Status command
-#define SIE_SES_ST (1<<0)
-#define SIE_SES_DA (1<<5)
-#define SIE_SES_RF_MO (1<<6)
-#define SIE_SES_CND_ST (1<<7)
-
-
-USBHAL * USBHAL::instance;
-
-static volatile int epComplete;
-static uint32_t endpointStallState;
-
-static void SIECommand(uint32_t command) {
- // The command phase of a SIE transaction
- LPC_USB->USBDevIntClr = CCEMPTY;
- LPC_USB->USBCmdCode = SIE_CMD_CODE(SIE_COMMAND, command);
- while (!(LPC_USB->USBDevIntSt & CCEMPTY));
-}
-
-static void SIEWriteData(uint8_t data) {
- // The data write phase of a SIE transaction
- LPC_USB->USBDevIntClr = CCEMPTY;
- LPC_USB->USBCmdCode = SIE_CMD_CODE(SIE_WRITE, data);
- while (!(LPC_USB->USBDevIntSt & CCEMPTY));
-}
-
-static uint8_t SIEReadData(uint32_t command) {
- // The data read phase of a SIE transaction
- LPC_USB->USBDevIntClr = CDFULL;
- LPC_USB->USBCmdCode = SIE_CMD_CODE(SIE_READ, command);
- while (!(LPC_USB->USBDevIntSt & CDFULL));
- return (uint8_t)LPC_USB->USBCmdData;
-}
-
-static void SIEsetDeviceStatus(uint8_t status) {
- // Write SIE device status register
- SIECommand(SIE_CMD_SET_DEVICE_STATUS);
- SIEWriteData(status);
-}
-
-static uint8_t SIEgetDeviceStatus(void) {
- // Read SIE device status register
- SIECommand(SIE_CMD_GET_DEVICE_STATUS);
- return SIEReadData(SIE_CMD_GET_DEVICE_STATUS);
-}
-
-void SIEsetAddress(uint8_t address) {
- // Write SIE device address register
- SIECommand(SIE_CMD_SET_ADDRESS);
- SIEWriteData((address & 0x7f) | SIE_DSA_DEV_EN);
-}
-
-static uint8_t SIEselectEndpoint(uint8_t endpoint) {
- // SIE select endpoint command
- SIECommand(SIE_CMD_SELECT_ENDPOINT(endpoint));
- return SIEReadData(SIE_CMD_SELECT_ENDPOINT(endpoint));
-}
-
-static uint8_t SIEclearBuffer(void) {
- // SIE clear buffer command
- SIECommand(SIE_CMD_CLEAR_BUFFER);
- return SIEReadData(SIE_CMD_CLEAR_BUFFER);
-}
-
-static void SIEvalidateBuffer(void) {
- // SIE validate buffer command
- SIECommand(SIE_CMD_VALIDATE_BUFFER);
-}
-
-static void SIEsetEndpointStatus(uint8_t endpoint, uint8_t status) {
- // SIE set endpoint status command
- SIECommand(SIE_CMD_SET_ENDPOINT_STATUS(endpoint));
- SIEWriteData(status);
-}
-
-static uint16_t SIEgetFrameNumber(void) __attribute__ ((unused));
-static uint16_t SIEgetFrameNumber(void) {
- // Read current frame number
- uint16_t lowByte;
- uint16_t highByte;
-
- SIECommand(SIE_CMD_READ_FRAME_NUMBER);
- lowByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
- highByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
-
- return (highByte << 8) | lowByte;
-}
-
-static void SIEconfigureDevice(void) {
- // SIE Configure device command
- SIECommand(SIE_CMD_CONFIGURE_DEVICE);
- SIEWriteData(SIE_CONF_DEVICE);
-}
-
-static void SIEunconfigureDevice(void) {
- // SIE Configure device command
- SIECommand(SIE_CMD_CONFIGURE_DEVICE);
- SIEWriteData(0);
-}
-
-static void SIEconnect(void) {
- // Connect USB device
- uint8_t status = SIEgetDeviceStatus();
- SIEsetDeviceStatus(status | SIE_DS_CON);
-}
-
-
-static void SIEdisconnect(void) {
- // Disconnect USB device
- uint8_t status = SIEgetDeviceStatus();
- SIEsetDeviceStatus(status & ~SIE_DS_CON);
-}
-
-
-static uint8_t selectEndpointClearInterrupt(uint8_t endpoint) {
- // Implemented using using EP_INT_CLR.
- LPC_USB->USBEpIntClr = EP(endpoint);
- while (!(LPC_USB->USBDevIntSt & CDFULL));
- return (uint8_t)LPC_USB->USBCmdData;
-}
-
-
-static void enableEndpointEvent(uint8_t endpoint) {
- // Enable an endpoint interrupt
- LPC_USB->USBEpIntEn |= EP(endpoint);
-}
-
-static void disableEndpointEvent(uint8_t endpoint) __attribute__ ((unused));
-static void disableEndpointEvent(uint8_t endpoint) {
- // Disable an endpoint interrupt
- LPC_USB->USBEpIntEn &= ~EP(endpoint);
-}
-
-static volatile uint32_t __attribute__((used)) dummyRead;
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
- // Read from an OUT endpoint
- uint32_t size;
- uint32_t i;
- uint32_t data = 0;
- uint8_t offset;
-
- LPC_USB->USBCtrl = LOG_ENDPOINT(endpoint) | RD_EN;
- while (!(LPC_USB->USBRxPLen & PKT_RDY));
-
- size = LPC_USB->USBRxPLen & PKT_LNGTH_MASK;
-
- offset = 0;
-
- if (size > 0) {
- for (i=0; i<size; i++) {
- if (offset==0) {
- // Fetch up to four bytes of data as a word
- data = LPC_USB->USBRxData;
- }
-
- // extract a byte
- *buffer = (data>>offset) & 0xff;
- buffer++;
-
- // move on to the next byte
- offset = (offset + 8) % 32;
- }
- } else {
- dummyRead = LPC_USB->USBRxData;
- }
-
- LPC_USB->USBCtrl = 0;
-
- if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
- SIEselectEndpoint(endpoint);
- SIEclearBuffer();
- }
-
- return size;
-}
-
-static void endpointWritecore(uint8_t endpoint, uint8_t *buffer, uint32_t size) {
- // Write to an IN endpoint
- uint32_t temp, data;
- uint8_t offset;
-
- LPC_USB->USBCtrl = LOG_ENDPOINT(endpoint) | WR_EN;
-
- LPC_USB->USBTxPLen = size;
- offset = 0;
- data = 0;
-
- if (size>0) {
- do {
- // Fetch next data byte into a word-sized temporary variable
- temp = *buffer++;
-
- // Add to current data word
- temp = temp << offset;
- data = data | temp;
-
- // move on to the next byte
- offset = (offset + 8) % 32;
- size--;
-
- if ((offset==0) || (size==0)) {
- // Write the word to the endpoint
- LPC_USB->USBTxData = data;
- data = 0;
- }
- } while (size>0);
- } else {
- LPC_USB->USBTxData = 0;
- }
-
- // Clear WR_EN to cover zero length packet case
- LPC_USB->USBCtrl=0;
-
- SIEselectEndpoint(endpoint);
- SIEvalidateBuffer();
-}
-
-USBHAL::USBHAL(void) {
- // Disable IRQ
- NVIC_DisableIRQ(USB_IRQn);
-
- // fill in callback array
- epCallback[0] = &USBHAL::EP1_OUT_callback;
- epCallback[1] = &USBHAL::EP1_IN_callback;
- epCallback[2] = &USBHAL::EP2_OUT_callback;
- epCallback[3] = &USBHAL::EP2_IN_callback;
- epCallback[4] = &USBHAL::EP3_OUT_callback;
- epCallback[5] = &USBHAL::EP3_IN_callback;
- epCallback[6] = &USBHAL::EP4_OUT_callback;
- epCallback[7] = &USBHAL::EP4_IN_callback;
- epCallback[8] = &USBHAL::EP5_OUT_callback;
- epCallback[9] = &USBHAL::EP5_IN_callback;
- epCallback[10] = &USBHAL::EP6_OUT_callback;
- epCallback[11] = &USBHAL::EP6_IN_callback;
- epCallback[12] = &USBHAL::EP7_OUT_callback;
- epCallback[13] = &USBHAL::EP7_IN_callback;
- epCallback[14] = &USBHAL::EP8_OUT_callback;
- epCallback[15] = &USBHAL::EP8_IN_callback;
- epCallback[16] = &USBHAL::EP9_OUT_callback;
- epCallback[17] = &USBHAL::EP9_IN_callback;
- epCallback[18] = &USBHAL::EP10_OUT_callback;
- epCallback[19] = &USBHAL::EP10_IN_callback;
- epCallback[20] = &USBHAL::EP11_OUT_callback;
- epCallback[21] = &USBHAL::EP11_IN_callback;
- epCallback[22] = &USBHAL::EP12_OUT_callback;
- epCallback[23] = &USBHAL::EP12_IN_callback;
- epCallback[24] = &USBHAL::EP13_OUT_callback;
- epCallback[25] = &USBHAL::EP13_IN_callback;
- epCallback[26] = &USBHAL::EP14_OUT_callback;
- epCallback[27] = &USBHAL::EP14_IN_callback;
- epCallback[28] = &USBHAL::EP15_OUT_callback;
- epCallback[29] = &USBHAL::EP15_IN_callback;
-
- // Enable power to USB device controller
- LPC_SC->PCONP |= PCUSB;
-
- // Enable USB clocks
- LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN;
- while (LPC_USB->USBClkSt != (DEV_CLK_ON | AHB_CLK_ON));
-
- // Configure pins P0.29 and P0.30 to be USB D+ and USB D-
- LPC_PINCON->PINSEL1 &= 0xc3ffffff;
- LPC_PINCON->PINSEL1 |= 0x14000000;
-
- // Disconnect USB device
- SIEdisconnect();
-
- // Configure pin P2.9 to be Connect
- LPC_PINCON->PINSEL4 &= 0xfffcffff;
- LPC_PINCON->PINSEL4 |= 0x00040000;
-
- // Connect must be low for at least 2.5uS
- wait(0.3);
-
- // Set the maximum packet size for the control endpoints
- realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
- realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
-
- // Attach IRQ
- instance = this;
- NVIC_SetVector(USB_IRQn, (uint32_t)&_usbisr);
-
- // Enable interrupts for device events and EP0
- LPC_USB->USBDevIntEn = EP_SLOW | DEV_STAT | FRAME;
- enableEndpointEvent(EP0IN);
- enableEndpointEvent(EP0OUT);
-}
-
-USBHAL::~USBHAL(void) {
- // Ensure device disconnected
- SIEdisconnect();
- // Disable USB interrupts
- NVIC_DisableIRQ(USB_IRQn);
-}
-
-void USBHAL::connect(void) {
- NVIC_EnableIRQ(USB_IRQn);
- // Connect USB device
- SIEconnect();
-}
-
-void USBHAL::disconnect(void) {
- NVIC_DisableIRQ(USB_IRQn);
- // Disconnect USB device
- SIEdisconnect();
-}
-
-void USBHAL::configureDevice(void) {
- SIEconfigureDevice();
-}
-
-void USBHAL::unconfigureDevice(void) {
- SIEunconfigureDevice();
-}
-
-void USBHAL::setAddress(uint8_t address) {
- SIEsetAddress(address);
-}
-
-void USBHAL::EP0setup(uint8_t *buffer) {
- endpointReadcore(EP0OUT, buffer);
-}
-
-void USBHAL::EP0read(void) {
- // Not required
-}
-
-void USBHAL::EP0readStage(void) {
- // Not required
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
- return endpointReadcore(EP0OUT, buffer);
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
- endpointWritecore(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
- // Not required
-}
-
-void USBHAL::EP0stall(void) {
- // This will stall both control endpoints
- stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
-
- //for isochronous endpoint, we don't wait an interrupt
- if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
- if (!(epComplete & EP(endpoint)))
- return EP_PENDING;
- }
-
- *bytesRead = endpointReadcore(endpoint, buffer);
- epComplete &= ~EP(endpoint);
- return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
- if (getEndpointStallState(endpoint)) {
- return EP_STALLED;
- }
-
- epComplete &= ~EP(endpoint);
-
- endpointWritecore(endpoint, data, size);
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
- if (epComplete & EP(endpoint)) {
- epComplete &= ~EP(endpoint);
- return EP_COMPLETED;
- }
-
- return EP_PENDING;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
- // Realise an endpoint
- LPC_USB->USBDevIntClr = EP_RLZED;
- LPC_USB->USBReEp |= EP(endpoint);
- LPC_USB->USBEpInd = endpoint;
- LPC_USB->USBMaxPSize = maxPacket;
-
- while (!(LPC_USB->USBDevIntSt & EP_RLZED));
- LPC_USB->USBDevIntClr = EP_RLZED;
-
- // Clear stall state
- endpointStallState &= ~EP(endpoint);
-
- enableEndpointEvent(endpoint);
- return true;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
- // Stall an endpoint
- if ( (endpoint==EP0IN) || (endpoint==EP0OUT) ) {
- // Conditionally stall both control endpoints
- SIEsetEndpointStatus(EP0OUT, SIE_SES_CND_ST);
- } else {
- SIEsetEndpointStatus(endpoint, SIE_SES_ST);
-
- // Update stall state
- endpointStallState |= EP(endpoint);
- }
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
- // Unstall an endpoint. The endpoint will also be reinitialised
- SIEsetEndpointStatus(endpoint, 0);
-
- // Update stall state
- endpointStallState &= ~EP(endpoint);
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
- // Returns true if endpoint stalled
- return endpointStallState & EP(endpoint);
-}
-
-void USBHAL::remoteWakeup(void) {
- // Remote wakeup
- uint8_t status;
-
- // Enable USB clocks
- LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN;
- while (LPC_USB->USBClkSt != (DEV_CLK_ON | AHB_CLK_ON));
-
- status = SIEgetDeviceStatus();
- SIEsetDeviceStatus(status & ~SIE_DS_SUS);
-}
-
-void USBHAL::_usbisr(void) {
- instance->usbisr();
-}
-
-
-void USBHAL::usbisr(void) {
- uint8_t devStat;
-
- if (LPC_USB->USBDevIntSt & FRAME) {
- // Start of frame event
- SOF(SIEgetFrameNumber());
- // Clear interrupt status flag
- LPC_USB->USBDevIntClr = FRAME;
- }
-
- if (LPC_USB->USBDevIntSt & DEV_STAT) {
- // Device Status interrupt
- // Must clear the interrupt status flag before reading the device status from the SIE
- LPC_USB->USBDevIntClr = DEV_STAT;
-
- // Read device status from SIE
- devStat = SIEgetDeviceStatus();
- //printf("devStat: %d\r\n", devStat);
-
- if (devStat & SIE_DS_SUS_CH) {
- // Suspend status changed
- if((devStat & SIE_DS_SUS) != 0) {
- suspendStateChanged(0);
- }
- }
-
- if (devStat & SIE_DS_RST) {
- // Bus reset
- if((devStat & SIE_DS_SUS) == 0) {
- suspendStateChanged(1);
- }
- busReset();
- }
- }
-
- if (LPC_USB->USBDevIntSt & EP_SLOW) {
- // (Slow) Endpoint Interrupt
-
- // Process each endpoint interrupt
- if (LPC_USB->USBEpIntSt & EP(EP0OUT)) {
- if (selectEndpointClearInterrupt(EP0OUT) & SIE_SE_STP) {
- // this is a setup packet
- EP0setupCallback();
- } else {
- EP0out();
- }
- LPC_USB->USBDevIntClr = EP_SLOW;
- }
-
- if (LPC_USB->USBEpIntSt & EP(EP0IN)) {
- selectEndpointClearInterrupt(EP0IN);
- LPC_USB->USBDevIntClr = EP_SLOW;
- EP0in();
- }
-
- for (uint8_t num = 2; num < 16*2; num++) {
- if (LPC_USB->USBEpIntSt & EP(num)) {
- selectEndpointClearInterrupt(num);
- epComplete |= EP(num);
- LPC_USB->USBDevIntClr = EP_SLOW;
- if ((instance->*(epCallback[num - 2]))()) {
- epComplete &= ~EP(num);
- }
- }
- }
- }
-}
-
-#endif
--- a/USBDevice/USBHAL_LPC40.cpp Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,628 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_LPC4088) || defined(TARGET_LPC4088_DM)
-
-#include "USBHAL.h"
-
-
-// Get endpoint direction
-#define IN_EP(endpoint) ((endpoint) & 1U ? true : false)
-#define OUT_EP(endpoint) ((endpoint) & 1U ? false : true)
-
-// Convert physical endpoint number to register bit
-#define EP(endpoint) (1UL<<endpoint)
-
-// Power Control for Peripherals register
-#define PCUSB (1UL<<31)
-
-// USB Clock Control register
-#define DEV_CLK_EN (1UL<<1)
-#define PORT_CLK_EN (1UL<<3)
-#define AHB_CLK_EN (1UL<<4)
-
-// USB Clock Status register
-#define DEV_CLK_ON (1UL<<1)
-#define AHB_CLK_ON (1UL<<4)
-
-// USB Device Interupt registers
-#define FRAME (1UL<<0)
-#define EP_FAST (1UL<<1)
-#define EP_SLOW (1UL<<2)
-#define DEV_STAT (1UL<<3)
-#define CCEMPTY (1UL<<4)
-#define CDFULL (1UL<<5)
-#define RxENDPKT (1UL<<6)
-#define TxENDPKT (1UL<<7)
-#define EP_RLZED (1UL<<8)
-#define ERR_INT (1UL<<9)
-
-// USB Control register
-#define RD_EN (1<<0)
-#define WR_EN (1<<1)
-#define LOG_ENDPOINT(endpoint) ((endpoint>>1)<<2)
-
-// USB Receive Packet Length register
-#define DV (1UL<<10)
-#define PKT_RDY (1UL<<11)
-#define PKT_LNGTH_MASK (0x3ff)
-
-// Serial Interface Engine (SIE)
-#define SIE_WRITE (0x01)
-#define SIE_READ (0x02)
-#define SIE_COMMAND (0x05)
-#define SIE_CMD_CODE(phase, data) ((phase<<8)|(data<<16))
-
-// SIE Command codes
-#define SIE_CMD_SET_ADDRESS (0xD0)
-#define SIE_CMD_CONFIGURE_DEVICE (0xD8)
-#define SIE_CMD_SET_MODE (0xF3)
-#define SIE_CMD_READ_FRAME_NUMBER (0xF5)
-#define SIE_CMD_READ_TEST_REGISTER (0xFD)
-#define SIE_CMD_SET_DEVICE_STATUS (0xFE)
-#define SIE_CMD_GET_DEVICE_STATUS (0xFE)
-#define SIE_CMD_GET_ERROR_CODE (0xFF)
-#define SIE_CMD_READ_ERROR_STATUS (0xFB)
-
-#define SIE_CMD_SELECT_ENDPOINT(endpoint) (0x00+endpoint)
-#define SIE_CMD_SELECT_ENDPOINT_CLEAR_INTERRUPT(endpoint) (0x40+endpoint)
-#define SIE_CMD_SET_ENDPOINT_STATUS(endpoint) (0x40+endpoint)
-
-#define SIE_CMD_CLEAR_BUFFER (0xF2)
-#define SIE_CMD_VALIDATE_BUFFER (0xFA)
-
-// SIE Device Status register
-#define SIE_DS_CON (1<<0)
-#define SIE_DS_CON_CH (1<<1)
-#define SIE_DS_SUS (1<<2)
-#define SIE_DS_SUS_CH (1<<3)
-#define SIE_DS_RST (1<<4)
-
-// SIE Device Set Address register
-#define SIE_DSA_DEV_EN (1<<7)
-
-// SIE Configue Device register
-#define SIE_CONF_DEVICE (1<<0)
-
-// Select Endpoint register
-#define SIE_SE_FE (1<<0)
-#define SIE_SE_ST (1<<1)
-#define SIE_SE_STP (1<<2)
-#define SIE_SE_PO (1<<3)
-#define SIE_SE_EPN (1<<4)
-#define SIE_SE_B_1_FULL (1<<5)
-#define SIE_SE_B_2_FULL (1<<6)
-
-// Set Endpoint Status command
-#define SIE_SES_ST (1<<0)
-#define SIE_SES_DA (1<<5)
-#define SIE_SES_RF_MO (1<<6)
-#define SIE_SES_CND_ST (1<<7)
-
-
-USBHAL * USBHAL::instance;
-
-static volatile int epComplete;
-static uint32_t endpointStallState;
-
-static void SIECommand(uint32_t command) {
- // The command phase of a SIE transaction
- LPC_USB->DevIntClr = CCEMPTY;
- LPC_USB->CmdCode = SIE_CMD_CODE(SIE_COMMAND, command);
- while (!(LPC_USB->DevIntSt & CCEMPTY));
-}
-
-static void SIEWriteData(uint8_t data) {
- // The data write phase of a SIE transaction
- LPC_USB->DevIntClr = CCEMPTY;
- LPC_USB->CmdCode = SIE_CMD_CODE(SIE_WRITE, data);
- while (!(LPC_USB->DevIntSt & CCEMPTY));
-}
-
-static uint8_t SIEReadData(uint32_t command) {
- // The data read phase of a SIE transaction
- LPC_USB->DevIntClr = CDFULL;
- LPC_USB->CmdCode = SIE_CMD_CODE(SIE_READ, command);
- while (!(LPC_USB->DevIntSt & CDFULL));
- return (uint8_t)LPC_USB->CmdData;
-}
-
-static void SIEsetDeviceStatus(uint8_t status) {
- // Write SIE device status register
- SIECommand(SIE_CMD_SET_DEVICE_STATUS);
- SIEWriteData(status);
-}
-
-static uint8_t SIEgetDeviceStatus(void) {
- // Read SIE device status register
- SIECommand(SIE_CMD_GET_DEVICE_STATUS);
- return SIEReadData(SIE_CMD_GET_DEVICE_STATUS);
-}
-
-void SIEsetAddress(uint8_t address) {
- // Write SIE device address register
- SIECommand(SIE_CMD_SET_ADDRESS);
- SIEWriteData((address & 0x7f) | SIE_DSA_DEV_EN);
-}
-
-static uint8_t SIEselectEndpoint(uint8_t endpoint) {
- // SIE select endpoint command
- SIECommand(SIE_CMD_SELECT_ENDPOINT(endpoint));
- return SIEReadData(SIE_CMD_SELECT_ENDPOINT(endpoint));
-}
-
-static uint8_t SIEclearBuffer(void) {
- // SIE clear buffer command
- SIECommand(SIE_CMD_CLEAR_BUFFER);
- return SIEReadData(SIE_CMD_CLEAR_BUFFER);
-}
-
-static void SIEvalidateBuffer(void) {
- // SIE validate buffer command
- SIECommand(SIE_CMD_VALIDATE_BUFFER);
-}
-
-static void SIEsetEndpointStatus(uint8_t endpoint, uint8_t status) {
- // SIE set endpoint status command
- SIECommand(SIE_CMD_SET_ENDPOINT_STATUS(endpoint));
- SIEWriteData(status);
-}
-
-static uint16_t SIEgetFrameNumber(void) __attribute__ ((unused));
-static uint16_t SIEgetFrameNumber(void) {
- // Read current frame number
- uint16_t lowByte;
- uint16_t highByte;
-
- SIECommand(SIE_CMD_READ_FRAME_NUMBER);
- lowByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
- highByte = SIEReadData(SIE_CMD_READ_FRAME_NUMBER);
-
- return (highByte << 8) | lowByte;
-}
-
-static void SIEconfigureDevice(void) {
- // SIE Configure device command
- SIECommand(SIE_CMD_CONFIGURE_DEVICE);
- SIEWriteData(SIE_CONF_DEVICE);
-}
-
-static void SIEunconfigureDevice(void) {
- // SIE Configure device command
- SIECommand(SIE_CMD_CONFIGURE_DEVICE);
- SIEWriteData(0);
-}
-
-static void SIEconnect(void) {
- // Connect USB device
- uint8_t status = SIEgetDeviceStatus();
- SIEsetDeviceStatus(status | SIE_DS_CON);
-}
-
-
-static void SIEdisconnect(void) {
- // Disconnect USB device
- uint8_t status = SIEgetDeviceStatus();
- SIEsetDeviceStatus(status & ~SIE_DS_CON);
-}
-
-
-static uint8_t selectEndpointClearInterrupt(uint8_t endpoint) {
- // Implemented using using EP_INT_CLR.
- LPC_USB->EpIntClr = EP(endpoint);
- while (!(LPC_USB->DevIntSt & CDFULL));
- return (uint8_t)LPC_USB->CmdData;
-}
-
-
-static void enableEndpointEvent(uint8_t endpoint) {
- // Enable an endpoint interrupt
- LPC_USB->EpIntEn |= EP(endpoint);
-}
-
-static void disableEndpointEvent(uint8_t endpoint) __attribute__ ((unused));
-static void disableEndpointEvent(uint8_t endpoint) {
- // Disable an endpoint interrupt
- LPC_USB->EpIntEn &= ~EP(endpoint);
-}
-
-static volatile uint32_t __attribute__((used)) dummyRead;
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
- // Read from an OUT endpoint
- uint32_t size;
- uint32_t i;
- uint32_t data = 0;
- uint8_t offset;
-
- LPC_USB->Ctrl = LOG_ENDPOINT(endpoint) | RD_EN;
- while (!(LPC_USB->RxPLen & PKT_RDY));
-
- size = LPC_USB->RxPLen & PKT_LNGTH_MASK;
-
- offset = 0;
-
- if (size > 0) {
- for (i=0; i<size; i++) {
- if (offset==0) {
- // Fetch up to four bytes of data as a word
- data = LPC_USB->RxData;
- }
-
- // extract a byte
- *buffer = (data>>offset) & 0xff;
- buffer++;
-
- // move on to the next byte
- offset = (offset + 8) % 32;
- }
- } else {
- dummyRead = LPC_USB->RxData;
- }
-
- LPC_USB->Ctrl = 0;
-
- if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
- SIEselectEndpoint(endpoint);
- SIEclearBuffer();
- }
-
- return size;
-}
-
-static void endpointWritecore(uint8_t endpoint, uint8_t *buffer, uint32_t size) {
- // Write to an IN endpoint
- uint32_t temp, data;
- uint8_t offset;
-
- LPC_USB->Ctrl = LOG_ENDPOINT(endpoint) | WR_EN;
-
- LPC_USB->TxPLen = size;
- offset = 0;
- data = 0;
-
- if (size>0) {
- do {
- // Fetch next data byte into a word-sized temporary variable
- temp = *buffer++;
-
- // Add to current data word
- temp = temp << offset;
- data = data | temp;
-
- // move on to the next byte
- offset = (offset + 8) % 32;
- size--;
-
- if ((offset==0) || (size==0)) {
- // Write the word to the endpoint
- LPC_USB->TxData = data;
- data = 0;
- }
- } while (size>0);
- } else {
- LPC_USB->TxData = 0;
- }
-
- // Clear WR_EN to cover zero length packet case
- LPC_USB->Ctrl=0;
-
- SIEselectEndpoint(endpoint);
- SIEvalidateBuffer();
-}
-
-USBHAL::USBHAL(void) {
- // Disable IRQ
- NVIC_DisableIRQ(USB_IRQn);
-
- // fill in callback array
- epCallback[0] = &USBHAL::EP1_OUT_callback;
- epCallback[1] = &USBHAL::EP1_IN_callback;
- epCallback[2] = &USBHAL::EP2_OUT_callback;
- epCallback[3] = &USBHAL::EP2_IN_callback;
- epCallback[4] = &USBHAL::EP3_OUT_callback;
- epCallback[5] = &USBHAL::EP3_IN_callback;
- epCallback[6] = &USBHAL::EP4_OUT_callback;
- epCallback[7] = &USBHAL::EP4_IN_callback;
- epCallback[8] = &USBHAL::EP5_OUT_callback;
- epCallback[9] = &USBHAL::EP5_IN_callback;
- epCallback[10] = &USBHAL::EP6_OUT_callback;
- epCallback[11] = &USBHAL::EP6_IN_callback;
- epCallback[12] = &USBHAL::EP7_OUT_callback;
- epCallback[13] = &USBHAL::EP7_IN_callback;
- epCallback[14] = &USBHAL::EP8_OUT_callback;
- epCallback[15] = &USBHAL::EP8_IN_callback;
- epCallback[16] = &USBHAL::EP9_OUT_callback;
- epCallback[17] = &USBHAL::EP9_IN_callback;
- epCallback[18] = &USBHAL::EP10_OUT_callback;
- epCallback[19] = &USBHAL::EP10_IN_callback;
- epCallback[20] = &USBHAL::EP11_OUT_callback;
- epCallback[21] = &USBHAL::EP11_IN_callback;
- epCallback[22] = &USBHAL::EP12_OUT_callback;
- epCallback[23] = &USBHAL::EP12_IN_callback;
- epCallback[24] = &USBHAL::EP13_OUT_callback;
- epCallback[25] = &USBHAL::EP13_IN_callback;
- epCallback[26] = &USBHAL::EP14_OUT_callback;
- epCallback[27] = &USBHAL::EP14_IN_callback;
- epCallback[28] = &USBHAL::EP15_OUT_callback;
- epCallback[29] = &USBHAL::EP15_IN_callback;
-
- // Enable power to USB device controller
- LPC_SC->PCONP |= PCUSB;
-
- // Enable USB clocks
- LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN | PORT_CLK_EN;
- while ((LPC_USB->USBClkSt & (DEV_CLK_EN | AHB_CLK_EN | PORT_CLK_EN)) != (DEV_CLK_ON | AHB_CLK_ON | PORT_CLK_EN));
-
- // Select port USB2
- LPC_USB->StCtrl |= 3;
-
-
- // Configure pin P0.31 to be USB2
- LPC_IOCON->P0_31 &= ~0x07;
- LPC_IOCON->P0_31 |= 0x01;
-
- // Disconnect USB device
- SIEdisconnect();
-
- // Configure pin P0.14 to be Connect
- LPC_IOCON->P0_14 &= ~0x07;
- LPC_IOCON->P0_14 |= 0x03;
-
- // Connect must be low for at least 2.5uS
- wait(0.3);
-
- // Set the maximum packet size for the control endpoints
- realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
- realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
-
- // Attach IRQ
- instance = this;
- NVIC_SetVector(USB_IRQn, (uint32_t)&_usbisr);
-
- // Enable interrupts for device events and EP0
- LPC_USB->DevIntEn = EP_SLOW | DEV_STAT | FRAME;
- enableEndpointEvent(EP0IN);
- enableEndpointEvent(EP0OUT);
-}
-
-USBHAL::~USBHAL(void) {
- // Ensure device disconnected
- SIEdisconnect();
- // Disable USB interrupts
- NVIC_DisableIRQ(USB_IRQn);
-}
-
-void USBHAL::connect(void) {
- NVIC_EnableIRQ(USB_IRQn);
- // Connect USB device
- SIEconnect();
-}
-
-void USBHAL::disconnect(void) {
- NVIC_DisableIRQ(USB_IRQn);
- // Disconnect USB device
- SIEdisconnect();
-}
-
-void USBHAL::configureDevice(void) {
- SIEconfigureDevice();
-}
-
-void USBHAL::unconfigureDevice(void) {
- SIEunconfigureDevice();
-}
-
-void USBHAL::setAddress(uint8_t address) {
- SIEsetAddress(address);
-}
-
-void USBHAL::EP0setup(uint8_t *buffer) {
- endpointReadcore(EP0OUT, buffer);
-}
-
-void USBHAL::EP0read(void) {
- // Not required
-}
-
-void USBHAL::EP0readStage(void) {
- // Not required
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
- return endpointReadcore(EP0OUT, buffer);
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
- endpointWritecore(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
- // Not required
-}
-
-void USBHAL::EP0stall(void) {
- // This will stall both control endpoints
- stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
-
- //for isochronous endpoint, we don't wait an interrupt
- if ((endpoint >> 1) % 3 || (endpoint >> 1) == 0) {
- if (!(epComplete & EP(endpoint)))
- return EP_PENDING;
- }
-
- *bytesRead = endpointReadcore(endpoint, buffer);
- epComplete &= ~EP(endpoint);
- return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
- if (getEndpointStallState(endpoint)) {
- return EP_STALLED;
- }
-
- epComplete &= ~EP(endpoint);
-
- endpointWritecore(endpoint, data, size);
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
- if (epComplete & EP(endpoint)) {
- epComplete &= ~EP(endpoint);
- return EP_COMPLETED;
- }
-
- return EP_PENDING;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
- // Realise an endpoint
- LPC_USB->DevIntClr = EP_RLZED;
- LPC_USB->ReEp |= EP(endpoint);
- LPC_USB->EpInd = endpoint;
- LPC_USB->MaxPSize = maxPacket;
-
- while (!(LPC_USB->DevIntSt & EP_RLZED));
- LPC_USB->DevIntClr = EP_RLZED;
-
- // Clear stall state
- endpointStallState &= ~EP(endpoint);
-
- enableEndpointEvent(endpoint);
- return true;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
- // Stall an endpoint
- if ( (endpoint==EP0IN) || (endpoint==EP0OUT) ) {
- // Conditionally stall both control endpoints
- SIEsetEndpointStatus(EP0OUT, SIE_SES_CND_ST);
- } else {
- SIEsetEndpointStatus(endpoint, SIE_SES_ST);
-
- // Update stall state
- endpointStallState |= EP(endpoint);
- }
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
- // Unstall an endpoint. The endpoint will also be reinitialised
- SIEsetEndpointStatus(endpoint, 0);
-
- // Update stall state
- endpointStallState &= ~EP(endpoint);
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
- // Returns true if endpoint stalled
- return endpointStallState & EP(endpoint);
-}
-
-void USBHAL::remoteWakeup(void) {
- // Remote wakeup
- uint8_t status;
-
- // Enable USB clocks
- LPC_USB->USBClkCtrl |= DEV_CLK_EN | AHB_CLK_EN;
- while (LPC_USB->USBClkSt != (DEV_CLK_ON | AHB_CLK_ON));
-
- status = SIEgetDeviceStatus();
- SIEsetDeviceStatus(status & ~SIE_DS_SUS);
-}
-
-void USBHAL::_usbisr(void) {
- instance->usbisr();
-}
-
-
-void USBHAL::usbisr(void) {
- uint8_t devStat;
-
- if (LPC_USB->DevIntSt & FRAME) {
- // Start of frame event
- SOF(SIEgetFrameNumber());
- // Clear interrupt status flag
- LPC_USB->DevIntClr = FRAME;
- }
-
- if (LPC_USB->DevIntSt & DEV_STAT) {
- // Device Status interrupt
- // Must clear the interrupt status flag before reading the device status from the SIE
- LPC_USB->DevIntClr = DEV_STAT;
-
- // Read device status from SIE
- devStat = SIEgetDeviceStatus();
- //printf("devStat: %d\r\n", devStat);
-
- if (devStat & SIE_DS_SUS_CH) {
- // Suspend status changed
- if((devStat & SIE_DS_SUS) != 0) {
- suspendStateChanged(0);
- }
- }
-
- if (devStat & SIE_DS_RST) {
- // Bus reset
- if((devStat & SIE_DS_SUS) == 0) {
- suspendStateChanged(1);
- }
- busReset();
- }
- }
-
- if (LPC_USB->DevIntSt & EP_SLOW) {
- // (Slow) Endpoint Interrupt
-
- // Process each endpoint interrupt
- if (LPC_USB->EpIntSt & EP(EP0OUT)) {
- if (selectEndpointClearInterrupt(EP0OUT) & SIE_SE_STP) {
- // this is a setup packet
- EP0setupCallback();
- } else {
- EP0out();
- }
- LPC_USB->DevIntClr = EP_SLOW;
- }
-
- if (LPC_USB->EpIntSt & EP(EP0IN)) {
- selectEndpointClearInterrupt(EP0IN);
- LPC_USB->DevIntClr = EP_SLOW;
- EP0in();
- }
-
- for (uint8_t num = 2; num < 16*2; num++) {
- if (LPC_USB->EpIntSt & EP(num)) {
- selectEndpointClearInterrupt(num);
- epComplete |= EP(num);
- LPC_USB->DevIntClr = EP_SLOW;
- if ((instance->*(epCallback[num - 2]))()) {
- epComplete &= ~EP(num);
- }
- }
- }
- }
-}
-
-#endif
--- a/USBDevice/USBHAL_Maxim.cpp Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,473 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
- * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of Maxim Integrated
- * Products, Inc. shall not be used except as stated in the Maxim Integrated
- * Products, Inc. Branding Policy.
- *
- * The mere transfer of this software does not imply any licenses
- * of trade secrets, proprietary technology, copyrights, patents,
- * trademarks, maskwork rights, or any other form of intellectual
- * property whatsoever. Maxim Integrated Products, Inc. retains all
- * ownership rights.
- *******************************************************************************
- */
-
-#if defined(TARGET_Maxim)
-
-#include "USBHAL.h"
-#include "usb_regs.h"
-#include "clkman_regs.h"
-
-#define CONNECT_INTS (MXC_F_USB_DEV_INTEN_BRST | MXC_F_USB_DEV_INTEN_SETUP | MXC_F_USB_DEV_INTEN_EP_IN | MXC_F_USB_DEV_INTEN_EP_OUT | MXC_F_USB_DEV_INTEN_DMA_ERR)
-
-USBHAL *USBHAL::instance;
-
-typedef struct {
- volatile uint32_t buf0_desc;
- volatile uint32_t buf0_address;
- volatile uint32_t buf1_desc;
- volatile uint32_t buf1_address;
-} ep_buffer_t;
-
-typedef struct {
- ep_buffer_t out_buffer;
- ep_buffer_t in_buffer;
-} ep0_buffer_t;
-
-typedef struct {
- ep0_buffer_t ep0;
- ep_buffer_t ep[MXC_USB_NUM_EP - 1];
-} ep_buffer_descriptor_t;
-
-// Static storage for endpoint buffer descriptor table. Must be 512 byte alligned for DMA.
-#ifdef __IAR_SYSTEMS_ICC__
-#pragma data_alignment = 512
-#else
-__attribute__ ((aligned (512)))
-#endif
-ep_buffer_descriptor_t ep_buffer_descriptor;
-
-// static storage for temporary data buffers. Must be 32 byte alligned.
-#ifdef __IAR_SYSTEMS_ICC__
-#pragma data_alignment = 4
-#else
-__attribute__ ((aligned (4)))
-#endif
-static uint8_t aligned_buffer[NUMBER_OF_LOGICAL_ENDPOINTS][MXC_USB_MAX_PACKET];
-
-// contorl packet state
-static enum {
- CTRL_NONE = 0,
- CTRL_SETUP,
- CTRL_OUT,
- CTRL_IN,
-} control_state;
-
-USBHAL::USBHAL(void)
-{
- NVIC_DisableIRQ(USB_IRQn);
-
- // The PLL must be enabled for USB
- MBED_ASSERT(MXC_CLKMAN->clk_config & MXC_F_CLKMAN_CLK_CONFIG_PLL_ENABLE);
-
- // Enable the USB clock
- MXC_CLKMAN->clk_ctrl |= MXC_F_CLKMAN_CLK_CTRL_USB_GATE_N;
-
- // reset the device
- MXC_USB->cn = 0;
- MXC_USB->cn = 1;
- MXC_USB->dev_inten = 0;
- MXC_USB->dev_cn = 0;
- MXC_USB->dev_cn = MXC_F_USB_DEV_CN_URST;
- MXC_USB->dev_cn = 0;
-
- // fill in callback arrays
- epCallback[EP0OUT] = NULL;
- epCallback[EP0IN] = NULL;
- epCallback[EP1OUT] = &USBHAL::EP1_OUT_callback;
- epCallback[EP1IN ] = &USBHAL::EP1_IN_callback;
- epCallback[EP2OUT] = &USBHAL::EP2_OUT_callback;
- epCallback[EP2IN ] = &USBHAL::EP2_IN_callback;
- epCallback[EP3OUT] = &USBHAL::EP3_OUT_callback;
- epCallback[EP3IN ] = &USBHAL::EP3_IN_callback;
- epCallback[EP4OUT] = &USBHAL::EP4_OUT_callback;
- epCallback[EP4IN ] = &USBHAL::EP4_IN_callback;
- epCallback[EP5OUT] = &USBHAL::EP5_OUT_callback;
- epCallback[EP5IN ] = &USBHAL::EP5_IN_callback;
- epCallback[EP6OUT] = &USBHAL::EP6_OUT_callback;
- epCallback[EP6IN ] = &USBHAL::EP6_IN_callback;
- epCallback[EP7OUT] = &USBHAL::EP7_OUT_callback;
- epCallback[EP7IN ] = &USBHAL::EP7_IN_callback;
-
- // clear driver state
- control_state = CTRL_NONE;
-
- // set the descriptor location
- MXC_USB->ep_base = (uint32_t)&ep_buffer_descriptor;
-
- // attach IRQ handler and enable interrupts
- instance = this;
- NVIC_SetVector(USB_IRQn, (uint32_t)&_usbisr);
- NVIC_EnableIRQ(USB_IRQn);
-}
-
-USBHAL::~USBHAL(void)
-{
- MXC_USB->dev_cn = MXC_F_USB_DEV_CN_URST;
- MXC_USB->dev_cn = 0;
- MXC_USB->cn = 0;
-}
-
-void USBHAL::connect(void)
-{
- // enable interrupts
- MXC_USB->dev_inten |= CONNECT_INTS;
-
- // allow interrupts on ep0
- MXC_USB->ep[0] |= MXC_F_USB_EP_INT_EN;
-
- // pullup enable
- MXC_USB->dev_cn |= (MXC_F_USB_DEV_CN_CONNECT | MXC_F_USB_DEV_CN_FIFO_MODE);
-}
-
-void USBHAL::disconnect(void)
-{
- // disable interrupts
- MXC_USB->dev_inten &= ~CONNECT_INTS;
-
- // disable pullup
- MXC_USB->dev_cn &= ~MXC_F_USB_DEV_CN_CONNECT;
-}
-
-void USBHAL::configureDevice(void)
-{
- // do nothing
-}
-
-void USBHAL::unconfigureDevice(void)
-{
- // reset endpoints
- for (int i = 0; i < MXC_USB_NUM_EP; i++) {
- // Disable endpoint and clear the data toggle
- MXC_USB->ep[i] &= ~MXC_F_USB_EP_DIR;
- MXC_USB->ep[i] |= MXC_F_USB_EP_DT;
- }
-}
-
-void USBHAL::setAddress(uint8_t address)
-{
- // do nothing
-}
-
-void USBHAL::remoteWakeup(void)
-{
- // do nothing
-}
-
-static ep_buffer_t *get_desc(uint8_t endpoint)
-{
- uint8_t epnum = EP_NUM(endpoint);
- ep_buffer_t *desc;
-
- if (epnum == 0) {
- if (IN_EP(endpoint)) {
- desc = &ep_buffer_descriptor.ep0.in_buffer;
- } else {
- desc = &ep_buffer_descriptor.ep0.out_buffer;
- }
- } else {
- desc = &ep_buffer_descriptor.ep[epnum - 1];
- }
-
- return desc;
-}
-
-void USBHAL::EP0setup(uint8_t *buffer)
-{
- memcpy(buffer, (void*)&MXC_USB->setup0, 8); // setup packet is fixed at 8 bytes
-}
-
-void USBHAL::EP0read(void)
-{
- if (control_state == CTRL_IN) {
- // This is the status stage. ACK.
- MXC_USB->ep[0] |= MXC_F_USB_EP_ST_ACK;
- control_state = CTRL_NONE;
- return;
- }
-
- control_state = CTRL_OUT;
-
- endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
-}
-
-void USBHAL::EP0readStage(void)
-{
- // do nothing
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
-{
- uint32_t size;
-
- if (MXC_USB->out_owner & 1) {
- return 0;
- }
-
- // get the packet length and contents
- ep_buffer_t *desc = get_desc(EP0OUT);
- size = desc->buf0_desc;
- memcpy(buffer, aligned_buffer[0], size);
-
- return size;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
-{
- if ((size == 0) && (control_state != CTRL_IN)) {
- // This is a status stage ACK. Handle in hardware.
- MXC_USB->ep[0] |= MXC_F_USB_EP_ST_ACK;
- control_state = CTRL_NONE;
- return;
- }
-
- control_state = CTRL_IN;
-
- endpointWrite(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0stall(void)
-{
- stallEndpoint(0);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize)
-{
- uint8_t epnum = EP_NUM(endpoint);
-
- if ((endpoint >= NUMBER_OF_PHYSICAL_ENDPOINTS) || IN_EP(endpoint)) {
- return EP_INVALID;
- }
-
- if (maximumSize > MXC_USB_MAX_PACKET) {
- return EP_INVALID;
- }
-
- uint32_t mask = (1 << epnum);
- if (MXC_USB->out_owner & mask) {
- return EP_INVALID;
- }
-
- ep_buffer_t *desc = get_desc(endpoint);
- desc->buf0_desc = maximumSize;
- desc->buf0_address = (uint32_t)aligned_buffer[epnum];
-
- MXC_USB->out_owner = mask;
-
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *data, uint32_t *bytesRead)
-{
- if ((endpoint >= NUMBER_OF_PHYSICAL_ENDPOINTS) || IN_EP(endpoint)) {
- return EP_INVALID;
- }
-
- uint32_t mask = (1 << EP_NUM(endpoint));
- if (MXC_USB->out_owner & mask) {
- return EP_PENDING;
- }
-
- // get the packet length and contents
- ep_buffer_t *desc = get_desc(endpoint);
- *bytesRead = desc->buf0_desc;
- memcpy(data, aligned_buffer[EP_NUM(endpoint)], *bytesRead);
-
- return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
-{
- uint8_t epnum = EP_NUM(endpoint);
-
- if ((endpoint >= NUMBER_OF_PHYSICAL_ENDPOINTS) || OUT_EP(endpoint)) {
- return EP_INVALID;
- }
-
- if (size > MXC_USB_MAX_PACKET) {
- return EP_INVALID;
- }
-
- uint32_t mask = (1 << epnum);
- if (MXC_USB->in_owner & mask) {
- return EP_INVALID;
- }
-
- memcpy(aligned_buffer[epnum], data, size);
-
- ep_buffer_t *desc = get_desc(endpoint);
- desc->buf0_desc = size;
- desc->buf0_address = (uint32_t)aligned_buffer[epnum];
-
- // start the DMA
- MXC_USB->in_owner = mask;
-
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
-{
- uint32_t mask = (1 << EP_NUM(endpoint));
- if (MXC_USB->in_owner & mask) {
- return EP_PENDING;
- }
-
- return EP_COMPLETED;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint)
-{
- uint8_t epnum = EP_NUM(endpoint);
-
- if (epnum == 0) {
- MXC_USB->ep[epnum] |= MXC_F_USB_EP_ST_STALL;
- }
-
- MXC_USB->ep[epnum] |= MXC_F_USB_EP_STALL;
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint)
-{
- MXC_USB->ep[EP_NUM(endpoint)] &= ~MXC_F_USB_EP_STALL;
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t options)
-{
- uint8_t epnum = EP_NUM(endpoint);
- uint32_t ep_ctrl;
-
- if (epnum >= NUMBER_OF_PHYSICAL_ENDPOINTS) {
- return false;
- }
-
- if (IN_EP(endpoint)) {
- ep_ctrl = (MXC_V_USB_EP_DIR_IN << MXC_F_USB_EP_DIR_POS);
- } else {
- ep_ctrl = (MXC_S_USB_EP_DIR_OUT << MXC_F_USB_EP_DIR_POS);
- }
-
- ep_ctrl |= (MXC_F_USB_EP_DT | MXC_F_USB_EP_INT_EN);
-
- MXC_USB->ep[epnum] = ep_ctrl;
-
- return true;
-}
-
-bool USBHAL::getEndpointStallState(unsigned char endpoint)
-{
- return !!(MXC_USB->ep[endpoint] & MXC_F_USB_EP_STALL);
-}
-
-void USBHAL::_usbisr(void)
-{
- instance->usbisr();
-}
-
-void USBHAL::usbisr(void)
-{
- // get and clear irqs
- uint32_t irq_flags = MXC_USB->dev_intfl;
- MXC_USB->dev_intfl = irq_flags;
-
- // process only enabled interrupts
- irq_flags &= MXC_USB->dev_inten;
-
- // suspend
- if (irq_flags & MXC_F_USB_DEV_INTFL_SUSP) {
- suspendStateChanged(1);
- }
-
- // bus reset
- if (irq_flags & MXC_F_USB_DEV_INTFL_BRST) {
-
- // reset endpoints
- for (int i = 0; i < MXC_USB_NUM_EP; i++) {
- // Disable endpoint and clear the data toggle
- MXC_USB->ep[i] &= ~MXC_F_USB_EP_DIR;
- MXC_USB->ep[i] |= MXC_F_USB_EP_DT;
- }
-
- // clear driver state
- control_state = CTRL_NONE;
-
- busReset();
-
- // no need to process events after reset
- return;
- }
-
- // Setup packet
- if (irq_flags & MXC_F_USB_DEV_INTFL_SETUP) {
- control_state = CTRL_SETUP;
- EP0setupCallback();
- }
-
- // IN packets
- if (irq_flags & MXC_F_USB_DEV_INTFL_EP_IN) {
- // get and clear IN irqs
- uint32_t in_irqs = MXC_USB->in_int;
- MXC_USB->in_int = in_irqs;
-
- if (in_irqs & 1) {
- EP0in();
- }
-
- for (uint8_t epnum = 1; epnum < NUMBER_OF_LOGICAL_ENDPOINTS; epnum++) {
- uint32_t irq_mask = (1 << epnum);
- if (in_irqs & irq_mask) {
- uint8_t endpoint = (epnum << 1) | DIR_IN;
- (instance->*(epCallback[endpoint]))();
- }
- }
- }
-
- // OUT packets
- if (irq_flags & MXC_F_USB_DEV_INTFL_EP_OUT) {
- // get and clear OUT irqs
- uint32_t out_irqs = MXC_USB->out_int;
- MXC_USB->out_int = out_irqs;
-
- if (out_irqs & 1) {
- EP0out();
- }
-
- for (uint8_t epnum = 1; epnum < NUMBER_OF_LOGICAL_ENDPOINTS; epnum++) {
- uint32_t irq_mask = (1 << epnum);
- if (out_irqs & irq_mask) {
- uint8_t endpoint = (epnum << 1) | DIR_OUT;
- (instance->*(epCallback[endpoint]))();
- }
- }
- }
-}
-
-#endif
--- a/USBDevice/USBHAL_RZ_A1H.cpp Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1497 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person
-* obtaining a copy of this software and associated documentation
-* files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or
-* sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following
-* conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the
-* Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-* KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_RZ_A1H)
-
-/*
- This class can use the pipe1, pipe3 and pipe6 only. You should
- re-program this class if you wanted to use other pipe.
- */
-
-/*************************************************************************/
-extern "C"
-{
-#include "r_typedefs.h"
-#include "iodefine.h"
-}
-#include "USBHAL.h"
-#include "devdrv_usb_function_api.h"
-#include "usb_iobitmask.h"
-#include "rza_io_regrw.h"
-#include "USBDevice_Types.h"
-#include "usb_function_setting.h"
-
-
-/*************************************************************************/
-/* constants */
-const struct PIPECFGREC {
- uint16_t endpoint;
- uint16_t pipesel;
- uint16_t pipecfg;
- uint16_t pipebuf;
- uint16_t pipemaxp;
- uint16_t pipeperi;
-} def_pipecfg[] = {
- /*EP0OUT and EP0IN are configured by USB IP*/
- {
- EP1OUT, /*EP1: Host -> Func, INT*/
- 6 | USB_FUNCTION_D0FIFO_USE,
- USB_FUNCTION_INTERRUPT |
- USB_FUNCTION_BFREOFF |
- USB_FUNCTION_DBLBOFF |
- USB_FUNCTION_CNTMDON |
- USB_FUNCTION_SHTNAKOFF |
- USB_FUNCTION_DIR_P_OUT |
- USB_FUNCTION_EP1,
- ( ( ( 64) / 64 - 1 ) << 10 ) | 0x04u,
- MAX_PACKET_SIZE_EP1,
- DEVDRV_USBF_OFF |
- ( 3 << USB_PIPEPERI_IITV_SHIFT ),
- },
- {
- EP1IN, /*EP1: Host <- Func, INT*/
- 7 | USB_FUNCTION_D1FIFO_USE,
- USB_FUNCTION_INTERRUPT |
- USB_FUNCTION_BFREOFF |
- USB_FUNCTION_DBLBOFF |
- USB_FUNCTION_CNTMDOFF |
- USB_FUNCTION_SHTNAKOFF |
- USB_FUNCTION_DIR_P_IN |
- USB_FUNCTION_EP1,
- ( ( ( 64) / 64 - 1 ) << 10 ) | 0x05u,
- MAX_PACKET_SIZE_EP1,
- DEVDRV_USBF_OFF |
- ( 3 << USB_PIPEPERI_IITV_SHIFT ),
- },
- {
- EP2OUT, /*EP2: Host -> Func, BULK*/
- 3 | USB_FUNCTION_D0FIFO_USE,
- USB_FUNCTION_BULK |
- USB_FUNCTION_BFREOFF |
- USB_FUNCTION_DBLBON |
- USB_FUNCTION_CNTMDON |
- USB_FUNCTION_SHTNAKON |
- USB_FUNCTION_DIR_P_OUT |
- USB_FUNCTION_EP2,
- ( ( (2048) / 64 - 1 ) << 10 ) | 0x30u,
- MAX_PACKET_SIZE_EP2,
- DEVDRV_USBF_OFF |
- ( 0 << USB_PIPEPERI_IITV_SHIFT ),
- },
- {
- EP2IN, /*EP2: Host <- Func, BULK*/
- 4 | USB_FUNCTION_D1FIFO_USE,
- USB_FUNCTION_BULK |
- USB_FUNCTION_BFREOFF |
- USB_FUNCTION_DBLBOFF |
- USB_FUNCTION_CNTMDON |
- USB_FUNCTION_SHTNAKOFF |
- USB_FUNCTION_DIR_P_IN |
- USB_FUNCTION_EP2,
- ( ( (2048) / 64 - 1 ) << 10 ) | 0x50u,
- MAX_PACKET_SIZE_EP2,
- DEVDRV_USBF_OFF |
- ( 0 << USB_PIPEPERI_IITV_SHIFT ),
- },
- {
- EP3OUT, /*EP3: Host -> Func, ISO*/
- 1 | USB_FUNCTION_D0FIFO_USE,
- USB_FUNCTION_ISO |
- USB_FUNCTION_BFREOFF |
- USB_FUNCTION_DBLBON |
- USB_FUNCTION_CNTMDOFF |
- USB_FUNCTION_SHTNAKON |
- USB_FUNCTION_DIR_P_OUT |
- USB_FUNCTION_EP3,
- ( ( ( 512) / 64 - 1 ) << 10 ) | 0x10u,
- MAX_PACKET_SIZE_EP3,
- DEVDRV_USBF_OFF |
- ( 0 << USB_PIPEPERI_IITV_SHIFT ),
- },
- {
- EP3IN, /*EP3: Host <- Func, ISO*/
- 2 | USB_FUNCTION_D1FIFO_USE,
- USB_FUNCTION_ISO |
- USB_FUNCTION_BFREOFF |
- USB_FUNCTION_DBLBON |
- USB_FUNCTION_CNTMDOFF |
- USB_FUNCTION_SHTNAKOFF |
- USB_FUNCTION_DIR_P_IN |
- USB_FUNCTION_EP3,
- ( ( ( 512) / 64 - 1 ) << 10 ) | 0x20u,
- MAX_PACKET_SIZE_EP3,
- DEVDRV_USBF_OFF |
- ( 0 << USB_PIPEPERI_IITV_SHIFT ),
- },
- { /*terminator*/
- 0, 0, 0, 0, 0,
- },
-};
-
-
-/*************************************************************************/
-/* workareas */
-USBHAL * USBHAL::instance;
-
-static IRQn_Type int_id; /* interrupt ID */
-static uint16_t int_level; /* initerrupt level */
-static uint16_t clock_mode; /* input clock selector */
-static uint16_t mode; /* USB speed (HIGH/FULL) */
-
-//static DigitalOut *usbx_en;
-
-static uint16_t EP0_read_status;
-static uint16_t EPx_read_status;
-
-static uint16_t setup_buffer[MAX_PACKET_SIZE_EP0 / 2];
-
-/* 0: not used / other: a pipe number to use recv_buffer*/
-static uint8_t recv_buffer[MAX_PACKET_SIZE_EPBULK];
-volatile static uint16_t recv_error;
-
-
-/*************************************************************************/
-/* prototypes for C */
-extern "C" {
- void usbx_function_BRDYInterruptPIPE0 (uint16_t status, uint16_t intenb,
- USBHAL *object, void (USBHAL::*EP0func)(void));
-
- void usbx_function_BRDYInterrupt (uint16_t status, uint16_t intenb,
- USBHAL *object, bool (USBHAL::*epCallback[])(void));
-
- void usbx_function_NRDYInterruptPIPE0(uint16_t status, uint16_t intenb,
- USBHAL *object, void (USBHAL::*EP0func)(void));
-
- void usbx_function_NRDYInterrupt (uint16_t status, uint16_t intenb,
- USBHAL *object, bool (USBHAL::*epCallback[])(void));
-
- void usbx_function_BEMPInterruptPIPE0(uint16_t status, uint16_t intenb,
- USBHAL *object, void (USBHAL::*EP0func)(void));
-
- void usbx_function_BEMPInterrupt (uint16_t status, uint16_t intenb,
- USBHAL *object, bool (USBHAL::*epCallback[])(void));
-}
-
-
-/*************************************************************************/
-/* macros */
-
-/******************************************************************************
- * 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 usbx_function_BRDYInterruptPIPE0 (
- uint16_t status,
- uint16_t intenb,
- USBHAL *object,
- void (USBHAL::*EP0func)(void)
- )
- {
- volatile uint16_t dumy_sts;
- uint16_t read_status;
-
- USB20X.BRDYSTS =
- (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
- RZA_IO_RegWrite_16(
- &USB20X.CFIFOSEL, USB_FUNCTION_PIPE0,
- USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
-
- g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0] =
- g_usbx_function_data_count[USB_FUNCTION_PIPE0];
-
- read_status = usbx_function_read_buffer_c(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 */
- usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
-
- /*callback*/
- (object->*EP0func)();
- break;
-
- case USB_FUNCTION_READSHRT: /* End of data read */
- usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
- /* PID = BUF */
- usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
-
- /*callback*/
- (object->*EP0func)();
- break;
-
- case USB_FUNCTION_READOVER: /* FIFO access error */
- /* Buffer Clear */
- USB20X.CFIFOCTR = USB_FUNCTION_BITBCLR;
- usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
- /* Req Error */
- usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
-
- /*callback*/
- (object->*EP0func)();
- break;
-
- case DEVDRV_USBF_FIFOERROR: /* FIFO access error */
- default:
- usbx_function_disable_brdy_int(USB_FUNCTION_PIPE0);
- /* Req Error */
- usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
- break;
- }
- /* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB20X.BRDYSTS;
- }
-}
-
-
-/******************************************************************************
- * 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 usbx_function_BRDYInterrupt(
- uint16_t status,
- uint16_t intenb,
- USBHAL *object,
- bool (USBHAL::*epCallback[])(void)
- )
- {
- volatile uint16_t dumy_sts;
-
- /**************************************************************
- * 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.
- * : 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
- *************************************************************/
- /* 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_usbx_function_bit_set[pipe];
-
- if ((status & pipebit) && (intenb & pipebit)) {
- USB20X.BRDYSTS = (uint16_t)~pipebit;
- USB20X.BEMPSTS = (uint16_t)~pipebit;
-
- switch (g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
- case USB_FUNCTION_D0FIFO_DMA:
- if (g_usbx_function_DmaStatus[USB_FUNCTION_D0FIFO] != USB_FUNCTION_DMA_READY) {
- /*now, DMA is not supported*/
- usbx_function_dma_interrupt_d0fifo(int_sense);
- }
-
- if (RZA_IO_RegRead_16(
- &g_usbx_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
- /*now, DMA is not supported*/
- usbx_function_read_dma(pipe);
- usbx_function_disable_brdy_int(pipe);
- } else {
- USB20X.D0FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- }
- break;
-
- case USB_FUNCTION_D1FIFO_DMA:
- if (g_usbx_function_DmaStatus[USB_FUNCTION_D1FIFO] != USB_FUNCTION_DMA_READY) {
- /*now, DMA is not supported*/
- usbx_function_dma_interrupt_d1fifo(int_sense);
- }
-
- if (RZA_IO_RegRead_16(
- &g_usbx_function_pipecfg[pipe], USB_PIPECFG_BFRE_SHIFT, USB_PIPECFG_BFRE) == 0) {
- /*now, DMA is not supported*/
- usbx_function_read_dma(pipe);
- usbx_function_disable_brdy_int(pipe);
- } else {
- USB20X.D1FIFOCTR = USB_FUNCTION_BITBCLR;
- g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
- }
- break;
-
- default:
- ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
- ep <<= 1;
- if (RZA_IO_RegRead_16(
- &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])) ();
- EPx_read_status = DEVDRV_USBF_PIPE_DONE;
- } else {
- /* write */
- EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
- (object->*(epCallback[ep - 2 + 1])) ();
- EPx_read_status = DEVDRV_USBF_PIPE_DONE;
- usbx_function_write_buffer(pipe);
- }
- }
- }
- }
- /* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB20X.BRDYSTS;
- }
-}
-
-
-/******************************************************************************
- * 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 usbx_function_NRDYInterruptPIPE0(
- uint16_t status,
- uint16_t intenb,
- USBHAL *object,
- void (USBHAL::*EP0func)(void)
- )
- {
- volatile uint16_t dumy_sts;
-
- USB20X.NRDYSTS =
- (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
-
- /* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB20X.NRDYSTS;
- }
-}
-
-
-/******************************************************************************
- * 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 usbx_function_NRDYInterrupt(
- uint16_t status,
- uint16_t intenb,
- USBHAL *object,
- bool (USBHAL::*epCallback[])(void)
- )
- {
- volatile uint16_t dumy_sts;
-
- /**************************************************************
- * 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.
- * : 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
- *************************************************************/
- /* copied from usbx_function_intrn.c */
-#if 0
- uint16_t usefifo;
-#endif
- uint16_t pid;
- uint16_t pipe;
- uint16_t bitcheck;
-#if 0
- uint16_t mbw;
- uint32_t size;
-#endif
- uint16_t ep;
-
- bitcheck = (uint16_t)(status & intenb);
-
- USB20X.NRDYSTS = (uint16_t)~status;
-
-
- 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_usbx_function_bit_set[pipe]) != g_usbx_function_bit_set[pipe]) {
- continue;
- }
-
- if (g_usbx_function_pipe_status[pipe] != DEVDRV_USBF_PIPE_WAIT) {
- continue;
- }
-
-#if 0
- usbx_function_set_pid_nak(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_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE);
- switch (usefifo) {
-
- case USB_FUNCTION_D0FIFO_USE:
- usbx_function_set_curpipe(
- pipe, USB_FUNCTION_D0USE, DEVDRV_USBF_NO, mbw);
- USB20X.D0FIFOCTR = USB_FUNCTION_BITBCLR;
- break;
-
- case USB_FUNCTION_D1FIFO_USE:
- usbx_function_set_curpipe(
- pipe, USB_FUNCTION_D1USE, DEVDRV_USBF_NO, mbw);
- USB20X.D1FIFOCTR = USB_FUNCTION_BITBCLR;
- break;
-
- default:
- usbx_function_set_curpipe(
- pipe, USB_FUNCTION_CUSE, USB_FUNCTION_CFIFO_READ, mbw);
- USB20X.CFIFOCTR = USB_FUNCTION_BITBCLR;
- break;
- }
-
- usbx_function_aclrm(pipe);
-
- usbx_function_enable_nrdy_int(pipe);
- usbx_function_enable_brdy_int(pipe);
-
- usbx_function_set_pid_buf(pipe);
-#endif
-
- pid = usbx_function_get_pid(pipe);
- if ((pid == DEVDRV_USBF_PID_STALL) || (pid == DEVDRV_USBF_PID_STALL2)) {
- g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
- } else {
- usbx_function_set_pid_buf(pipe);
- }
-
- ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
- ep <<= 1;
- if (RZA_IO_RegRead_16(
- &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
- /* read */
- __NOP();
- } else {
- /* write */
- __NOP();
- }
- }
- }
-
- /* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB20X.NRDYSTS;
- }
-}
-
-/******************************************************************************
- * 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 usbx_function_BEMPInterruptPIPE0(
- uint16_t status,
- uint16_t intenb,
- USBHAL *object,
- void (USBHAL::*EP0func)(void)
- )
- {
- volatile uint16_t dumy_sts;
-
- USB20X.BEMPSTS =
- (uint16_t)~g_usbx_function_bit_set[USB_FUNCTION_PIPE0];
- RZA_IO_RegWrite_16(
- &USB20X.CFIFOSEL, USB_FUNCTION_PIPE0,
- USB_CFIFOSEL_CURPIPE_SHIFT, USB_CFIFOSEL_CURPIPE);
-
- /*usbx_function_write_buffer_c(USB_FUNCTION_PIPE0);*/
- (object->*EP0func)();
-
- /* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB20X.BEMPSTS;
- }
-}
-
-
-/******************************************************************************
- * 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 usbx_function_BEMPInterrupt(
- uint16_t status,
- uint16_t intenb,
- USBHAL *object,
- bool (USBHAL::*epCallback[])(void)
- )
- {
- volatile uint16_t dumy_sts;
-
- /**************************************************************
- * 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 usbx_function_intrn.c */
- uint16_t pid;
- uint16_t pipe;
- uint16_t bitcheck;
- uint16_t inbuf;
- uint16_t ep;
-
- bitcheck = (uint16_t)(status & intenb);
-
- USB20X.BEMPSTS = (uint16_t)~status;
-
- for (pipe = USB_FUNCTION_PIPE1; pipe <= USB_FUNCTION_MAX_PIPE_NO; pipe++) {
- if ((bitcheck&g_usbx_function_bit_set[pipe]) != g_usbx_function_bit_set[pipe]) {
- continue;
- }
-
- pid = usbx_function_get_pid(pipe);
-
- if ((pid == DEVDRV_USBF_PID_STALL) ||
- (pid == DEVDRV_USBF_PID_STALL2)) {
- g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_STALL;
-
- } else {
- inbuf = usbx_function_get_inbuf(pipe);
-
- if (inbuf == 0) {
- usbx_function_disable_bemp_int(pipe);
- usbx_function_set_pid_nak(pipe);
- g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_DONE;
-
- switch (g_usbx_function_PipeTbl[pipe] & USB_FUNCTION_FIFO_USE) {
- case USB_FUNCTION_D0FIFO_DMA:
- /*now, DMA is not supported*/
- break;
-
- case USB_FUNCTION_D1FIFO_DMA:
- /*now, DMA is not supported*/
- break;
-
- default:
- ep = (g_usbx_function_pipecfg[pipe] & USB_PIPECFG_EPNUM) >> USB_PIPECFG_EPNUM_SHIFT;
- ep <<= 1;
- if (RZA_IO_RegRead_16(
- &g_usbx_function_pipecfg[pipe], USB_PIPECFG_DIR_SHIFT, USB_PIPECFG_DIR) == 0) {
- /* read */
- __NOP();
- } else {
- /* write */
- EPx_read_status = DEVDRV_USBF_PIPE_WAIT;
- (object->*(epCallback[ep - 2 + 1])) ();
- EPx_read_status = DEVDRV_USBF_PIPE_DONE;
- }
- }
- }
- }
- }
-
- /* Three dummy reads for clearing interrupt requests */
- dumy_sts = USB20X.BEMPSTS;
- }
-}
-
-/******************************************************************************
- * Function Name: EP2PIPE
- * Description : Converts from endpoint to pipe
- * Arguments : number of endpoint
- * Return Value : number of pipe
- *****************************************************************************/
-/*EP2PIPE converter is for pipe1, pipe3 and pipe6 only.*/
-#define EP2PIPE(endpoint) ((uint32_t)usbx_function_EpToPipe(endpoint))
-
-
-/******************************************************************************
- * Function Name: usbx_function_save_request
- * Description : Retains the USB request information in variables.
- * Arguments : none
- * Return Value : none
- *****************************************************************************/
-#define usbx_function_save_request() \
- { \
- uint16_t *bufO = &setup_buffer[0]; \
- \
- USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVALID; \
- /*data[0] <= bmRequest, data[1] <= bmRequestType */ \
- *bufO++ = USB20X.USBREQ; \
- /*data[2] data[3] <= wValue*/ \
- *bufO++ = USB20X.USBVAL; \
- /*data[4] data[5] <= wIndex*/ \
- *bufO++ = USB20X.USBINDX; \
- /*data[6] data[6] <= wIndex*/ \
- *bufO++ = USB20X.USBLENG; \
- }
-
-
-/*************************************************************************/
-/*************************************************************************/
-/*************************************************************************/
-
-/*************************************************************************/
-/* constructor */
-USBHAL::USBHAL(void)
-{
- /* ---- P4_1 : P4_1 (USB0_EN for GR-PEACH) ---- */
- //usbx_en = new DigitalOut(P4_1, 1);
-
- /* some constants */
- int_id = USBIX_IRQn;
- int_level = ( 2 << 3 );
- clock_mode = USBFCLOCK_X1_48MHZ;
-#if (USB_FUNCTION_HISPEED == 0)
- mode = USB_FUNCTION_FULL_SPEED;
-#else
- mode = USB_FUNCTION_HIGH_SPEED;
-#endif
- EP0_read_status = DEVDRV_USBF_WRITEEND;
- EPx_read_status = DEVDRV_USBF_PIPE_DONE;
-
- /* Disables interrupt for usb */
- GIC_DisableIRQ(int_id);
-
- /* Setup the end point */
- epCallback[ 0] = &USBHAL::EP1_OUT_callback;
- epCallback[ 1] = &USBHAL::EP1_IN_callback;
- epCallback[ 2] = &USBHAL::EP2_OUT_callback;
- epCallback[ 3] = &USBHAL::EP2_IN_callback;
- epCallback[ 4] = &USBHAL::EP3_OUT_callback;
- epCallback[ 5] = &USBHAL::EP3_IN_callback;
- epCallback[ 6] = &USBHAL::EP4_OUT_callback;
- epCallback[ 7] = &USBHAL::EP4_IN_callback;
- epCallback[ 8] = &USBHAL::EP5_OUT_callback;
- epCallback[ 9] = &USBHAL::EP5_IN_callback;
- epCallback[10] = &USBHAL::EP6_OUT_callback;
- epCallback[11] = &USBHAL::EP6_IN_callback;
- epCallback[12] = &USBHAL::EP7_OUT_callback;
- epCallback[13] = &USBHAL::EP7_IN_callback;
- epCallback[14] = &USBHAL::EP8_OUT_callback;
- epCallback[15] = &USBHAL::EP8_IN_callback;
- epCallback[16] = &USBHAL::EP9_OUT_callback;
- epCallback[17] = &USBHAL::EP9_IN_callback;
- epCallback[18] = &USBHAL::EP10_OUT_callback;
- epCallback[19] = &USBHAL::EP10_IN_callback;
- epCallback[20] = &USBHAL::EP11_OUT_callback;
- epCallback[21] = &USBHAL::EP11_IN_callback;
- epCallback[22] = &USBHAL::EP12_OUT_callback;
- epCallback[23] = &USBHAL::EP12_IN_callback;
- epCallback[24] = &USBHAL::EP13_OUT_callback;
- epCallback[25] = &USBHAL::EP13_IN_callback;
- epCallback[26] = &USBHAL::EP14_OUT_callback;
- epCallback[27] = &USBHAL::EP14_IN_callback;
- epCallback[28] = &USBHAL::EP15_OUT_callback;
- epCallback[29] = &USBHAL::EP15_IN_callback;
-
- /* registers me */
- instance = this;
-
- /* Clear pipe table */
- usbx_function_clear_pipe_tbl();
-
-/******************************************************************************
- * 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: usbx_function_setting_interrupt
- * Description : Sets the USB module interrupt level.
- *****************************************************************************/
-#if 0 /*DMA is not supported*/
- IRQn_Type d0fifo_dmaintid;
- IRQn_Type d1fifo_dmaintid;
-#endif
-
- InterruptHandlerRegister(int_id, &_usbisr);
- GIC_SetPriority(int_id, int_level);
- GIC_EnableIRQ(int_id);
-
-#if 0 /*DMA is not supported*/
- d0fifo_dmaintid = Userdef_USB_usbx_function_d0fifo_dmaintid();
- if (d0fifo_dmaintid != 0xFFFF) {
- 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_usbx_function_d1fifo_dmaintid();
- if (d1fifo_dmaintid != 0xFFFF) {
- InterruptHandlerRegister(d1fifo_dmaintid, usbx_function_dma_interrupt_d1fifo);
- GIC_SetPriority(d1fifo_dmaintid, int_level);
- GIC_EnableIRQ(d1fifo_dmaintid);
- }
-#endif
-/*****************************************************************************/
- }
-
- /* reset USB module with setting tranciever and HSE=1 */
- usbx_function_reset_module(clock_mode);
-
- /* clear variables */
- usbx_function_init_status();
-
- /* select USB Function and Interrupt Enable */
- /* Detect USB Device to attach or detach */
- usbx_function_InitModule(mode);
-
- {
- uint16_t buf;
- buf = USB20X.INTENB0;
- buf |= USB_INTENB0_SOFE;
- USB20X.INTENB0 = buf;
- }
-}
-
-/*************************************************************************/
-USBHAL::~USBHAL(void)
-{
- /* Disables interrupt for usb */
- GIC_DisableIRQ( int_id );
- /* Unregisters interrupt function and priority */
- InterruptHandlerRegister( int_id, (uint32_t)NULL );
-
- //usbx_en = NULL;
- instance = NULL;
-}
-
-/*************************************************************************/
-void USBHAL::connect(void)
-{
- /* Activates USB0_EN */
- //(*usbx_en) = 0;
-}
-
-
-/*************************************************************************/
-void USBHAL::disconnect(void)
-{
- /* Deactivates USB0_EN */
- //(*usbx_en) = 1;
-}
-
-
-/*************************************************************************/
-void USBHAL::configureDevice(void)
-{
- /*The pipes set up in USBHAL::realiseEndpoint*/
- /*usbx_function_clear_alt();*/ /* Alternate setting clear */
- /*usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
-}
-
-
-/*************************************************************************/
-void USBHAL::unconfigureDevice(void)
-{
- /* The Interface would be managed by USBDevice */
- /*usbx_function_clear_alt();*/ /* Alternate setting clear */
- /*usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);*/
-}
-
-
-/*************************************************************************/
-void USBHAL::setAddress(uint8_t address)
-{
- if (address <= 127) {
- usbx_function_set_pid_buf(USB_FUNCTION_PIPE0); /* OK */
- } else {
- usbx_function_set_pid_stall(USB_FUNCTION_PIPE0); /* Not Spec */
- }
-}
-
-
-/*************************************************************************/
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags)
-{
- const struct PIPECFGREC *cfg;
- uint16_t pipe;
- uint16_t buf;
-
- if ( (EP0OUT == endpoint) || (EP0IN == endpoint) ) {
- return true;
- }
-
- for (cfg = &def_pipecfg[0]; cfg->pipesel != 0; cfg++) {
- if (cfg->endpoint == endpoint) {
- break;
- }
- }
- if (cfg->pipesel == 0) {
- return false;
- }
-
- pipe = ((cfg->pipesel & USB_PIPESEL_PIPESEL) >> USB_PIPESEL_PIPESEL_SHIFT);
-
- 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
- * programmed. Do maintenance the "def_pipecfg" array if
- * you want it. */
-
- /* Interrupt Disable */
- 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;
-
- usbx_function_set_pid_nak(pipe);
-
- /* CurrentPIPE Clear */
- 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(&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(&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 */
- USB20X.PIPESEL = pipe;
- USB20X.PIPECFG = cfg->pipecfg;
- USB20X.PIPEBUF = cfg->pipebuf;
- USB20X.PIPEMAXP = cfg->pipemaxp;
- USB20X.PIPEPERI = 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 */
- usbx_function_set_sqclr(pipe);
- usbx_function_aclrm(pipe);
-
- /* init Global */
- g_usbx_function_pipe_status[pipe] = DEVDRV_USBF_PIPE_IDLE;
- g_usbx_function_PipeDataSize[pipe] = 0;
-
- return true;
-}
-
-
-/*************************************************************************/
-// read setup packet
-void USBHAL::EP0setup(uint8_t *buffer)
-{
- memcpy(buffer, setup_buffer, MAX_PACKET_SIZE_EP0);
-}
-
-
-/*************************************************************************/
-void USBHAL::EP0readStage(void)
-{
- // No implements
-}
-
-
-/*************************************************************************/
-void USBHAL::EP0read(void)
-{
- uint8_t *buffer;
- uint32_t size;
-
- /* remain of last writing */
- while (EP0_read_status != DEVDRV_USBF_WRITEEND) {
- static uint8_t bbb[2] = { 255, 255 };
- EP0write(&bbb[0], 0);
- }
-
- buffer = (uint8_t*)(&setup_buffer[4]);
- size = (MAX_PACKET_SIZE_EP0 / 2) - 8;
- usbx_api_function_CtrlWriteStart(size, buffer);
-}
-
-
-/*************************************************************************/
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer)
-{
- memcpy(buffer, (uint8_t*)(&setup_buffer[4]), g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0]);
-
- return g_usbx_function_PipeDataSize[USB_FUNCTION_PIPE0];
-}
-
-
-/*************************************************************************/
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size)
-{
- /* zero byte writing */
- if ( (size == 0) && (EP0_read_status == DEVDRV_USBF_WRITEEND) ) {
- return;
- }
-
- if (EP0_read_status == DEVDRV_USBF_WRITEEND) {
- /*1st block*/
- EP0_read_status = usbx_api_function_CtrlReadStart(size, buffer);
- } else {
- /* waits the last transmission */
- /*other blocks*/
- 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) {
- EP0_read_status = DEVDRV_USBF_WRITING;
- }
-}
-
-
-/*************************************************************************/
-#if 0 // No implements
-void USBHAL::EP0getWriteResult(void)
-{
-}
-#endif
-
-/*************************************************************************/
-void USBHAL::EP0stall(void)
-{
- stallEndpoint( 0 );
-}
-
-
-/*************************************************************************/
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t max_size)
-{
- uint32_t pipe = EP2PIPE(endpoint);
- uint32_t pipe_size;
- uint16_t pipe_status;
- EP_STATUS status = EP_COMPLETED;
-
- pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
-
- switch (pipe_status) {
- case DEVDRV_USBF_PIPE_IDLE:
- case DEVDRV_USBF_PIPE_WAIT:
- usbx_api_function_set_pid_nak(pipe);
- usbx_api_function_clear_pipe_status(pipe);
-
- usbx_api_function_start_receive_transfer(pipe, max_size, recv_buffer);
- break;
-
- default:
- status = EP_PENDING;
- break;
- }
-
- return status;
-}
-
-
-/*************************************************************************/
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t *buffer, uint32_t *bytes_read )
-{
- uint32_t pipe = EP2PIPE(endpoint);
- uint16_t pipe_status;
- uint16_t err;
- EP_STATUS status = EP_PENDING;
-
-
- if (EPx_read_status != DEVDRV_USBF_PIPE_WAIT) {
- return status;
- }
-
- pipe_status = usbx_api_function_check_pipe_status(pipe, bytes_read);
- switch (pipe_status) {
- case DEVDRV_USBF_PIPE_IDLE:
- return EP_COMPLETED;
-
- case DEVDRV_USBF_PIPE_DONE:
- return EP_COMPLETED;
-
- case DEVDRV_USBF_PIPE_WAIT:
- break;
-
- default:
- return status;
- }
-
- /* sets the output buffer and size */
- g_usbx_function_data_pointer[pipe] = buffer;
-
- /* receives data from 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_usbx_function_PipeDataSize[pipe];
- break;
-
- case USB_FUNCTION_READING:
- case DEVDRV_USBF_FIFOERROR:
- break;
- }
-
- pipe_status = usbx_api_function_check_pipe_status(pipe, bytes_read);
- switch (pipe_status) {
- case DEVDRV_USBF_PIPE_DONE:
- status = EP_COMPLETED;
- break;
-
- case DEVDRV_USBF_PIPE_IDLE:
- case DEVDRV_USBF_PIPE_NORES:
- case DEVDRV_USBF_PIPE_STALL:
- case DEVDRV_USBF_FIFOERROR:
- default:
- break;
- }
-
- return status;
-}
-
-
-/*************************************************************************/
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size)
-{
- uint32_t pipe = EP2PIPE(endpoint);
- uint32_t pipe_size;
- uint16_t pipe_status;
- uint16_t err;
- uint16_t count;
- EP_STATUS status = EP_PENDING;
-
- 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 = usbx_api_function_check_pipe_status(pipe, &pipe_size);
- if( --count == 0 ) {
- pipe_status = DEVDRV_USBF_PIPE_STALL;
- break;
- }
- }
-
- switch (pipe_status) {
- case DEVDRV_USBF_PIPE_IDLE:
- err = usbx_api_function_start_send_transfer(pipe, size, data);
-
- switch (err) {
- /* finish to write */
- case DEVDRV_USBF_WRITEEND:
- /* finish to write, but data is short */
- case DEVDRV_USBF_WRITESHRT:
- /* continue to write */
- case DEVDRV_USBF_WRITING:
- /* use DMA */
- case DEVDRV_USBF_WRITEDMA:
- /* error */
- case DEVDRV_USBF_FIFOERROR:
- status = EP_PENDING;
- break;
- }
- break;
-
- case DEVDRV_USBF_PIPE_WAIT:
- case DEVDRV_USBF_PIPE_DONE:
- status = EP_PENDING;
- break;
-
- case DEVDRV_USBF_PIPE_NORES:
- case DEVDRV_USBF_PIPE_STALL:
- default:
- status = EP_STALLED;
- break;
- }
-
- return status;
-}
-
-
-/*************************************************************************/
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint)
-{
- uint32_t pipe = EP2PIPE(endpoint);
- uint32_t pipe_size;
- uint16_t pipe_status;
- EP_STATUS status = EP_PENDING;
-
- pipe_status = usbx_api_function_check_pipe_status(pipe, &pipe_size);
-
- switch (pipe_status) {
- case DEVDRV_USBF_PIPE_IDLE:
- status = EP_COMPLETED;
- break;
-
- case DEVDRV_USBF_PIPE_WAIT:
- status = EP_PENDING;
- break;
-
- case DEVDRV_USBF_PIPE_DONE:
- usbx_function_stop_transfer(pipe);
- status = EP_COMPLETED;
- break;
-
- case DEVDRV_USBF_PIPE_NORES:
- status = EP_STALLED;
- break;
-
- case DEVDRV_USBF_PIPE_STALL:
- status = EP_STALLED;
- break;
-
- default:
- status = EP_PENDING;
- }
-
- return status;
-}
-
-
-/*************************************************************************/
-void USBHAL::stallEndpoint(uint8_t endpoint)
-{
- uint32_t pipe = EP2PIPE(endpoint);
-
- usbx_function_clear_pid_stall(pipe);
-}
-
-
-/*************************************************************************/
-void USBHAL::unstallEndpoint(uint8_t endpoint)
-{
- uint32_t pipe = EP2PIPE(endpoint);
-
- usbx_function_set_pid_stall( pipe );
-}
-
-
-/*************************************************************************/
-bool USBHAL::getEndpointStallState(uint8_t endpoint)
-{
- // No implemens
- return false;
-}
-
-
-/*************************************************************************/
-#if 0 // No implements
-void USBHAL::remoteWakeup(void)
-{
-}
-#endif
-
-/*************************************************************************/
-void USBHAL::_usbisr(void)
-{
- instance->usbisr();
-}
-
-
-/*************************************************************************/
-void USBHAL::usbisr(void)
-{
- uint16_t int_sts0;
- uint16_t int_sts1;
- uint16_t int_sts2;
- uint16_t int_sts3;
- uint16_t int_enb0;
- uint16_t int_enb2;
- uint16_t int_enb3;
- uint16_t int_enb4;
- volatile uint16_t dumy_sts;
-
-
- int_sts0 = USB20X.INTSTS0;
-
- if (!(int_sts0 & (
- USB_FUNCTION_BITVBINT |
- USB_FUNCTION_BITRESM |
- USB_FUNCTION_BITSOFR |
- USB_FUNCTION_BITDVST |
- USB_FUNCTION_BITCTRT |
- USB_FUNCTION_BITBEMP |
- USB_FUNCTION_BITNRDY |
- USB_FUNCTION_BITBRDY ))) {
- return;
- }
-
- 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)) {
- 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)) {
- USB20X.INTSTS0 = (uint16_t)~USB_FUNCTION_BITVBINT;
-
- if (usbx_function_CheckVBUStaus() == DEVDRV_USBF_ON) {
- usbx_function_USB_FUNCTION_Attach();
- } else {
- usbx_function_USB_FUNCTION_Detach();
- }
- } else if (
- (int_sts0 & USB_FUNCTION_BITSOFR) &&
- (int_enb0 & USB_FUNCTION_BITSOFE)) {
- 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)) {
- 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: 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
- *****************************************************************************/
- 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 (usbx_function_is_hispeed() == USB_FUNCTION_HIGH_SPEED) {
- /* Device Descriptor reset */
- usbx_function_ResetDescriptor(USB_FUNCTION_HIGH_SPEED);
- } else {
- /* Device Descriptor reset */
- usbx_function_ResetDescriptor(USB_FUNCTION_FULL_SPEED);
- }
-#endif
- /* Default Control PIPE reset */
- /*****************************************************************************
- * Function Name: usbx_function_ResetDCP
- * Description : Initializes the default control pipe(DCP).
- * Outline : Reset default control pipe
- * Arguments : none
- * Return Value : none
- *****************************************************************************/
- USB20X.DCPCFG = 0;
- USB20X.DCPMAXP = 64; /*TODO: This value is copied from sample*/
-
- 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;
-
- case USB_FUNCTION_DS_ADDS:
- break;
-
- case USB_FUNCTION_DS_CNFG:
- break;
-
- case USB_FUNCTION_DS_SPD_POWR:
- case USB_FUNCTION_DS_SPD_DFLT:
- case USB_FUNCTION_DS_SPD_ADDR:
- case USB_FUNCTION_DS_SPD_CNFG:
- suspendStateChanged(0);
- /*usbx_function_USB_FUNCTION_Suspend();*/
- break;
-
- default:
- break;
- }
- } else if (
- (int_sts0 & USB_FUNCTION_BITBEMP) &&
- (int_enb0 & USB_FUNCTION_BITBEMP) &&
- ((int_sts3 & int_enb4) & g_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
- /* ==== BEMP PIPE0 ==== */
- 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_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
- /* ==== BRDY PIPE0 ==== */
- 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_usbx_function_bit_set[USB_FUNCTION_PIPE0])) {
- /* ==== NRDY PIPE0 ==== */
- usbx_function_NRDYInterruptPIPE0(int_sts2, int_enb3, this, NULL);
- } else if (
- (int_sts0 & USB_FUNCTION_BITCTRT) && (int_enb0 & USB_FUNCTION_BITCTRE)) {
- 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 */
- 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 = USB20X.INTSTS0;
- dumy_sts = USB20X.INTSTS0;
- dumy_sts = USB20X.INTSTS0;
- return;
- }
- }
-
- switch (int_sts0 & USB_FUNCTION_BITCTSQ) {
- case USB_FUNCTION_CS_IDST:
- if (g_usbx_function_TestModeFlag == DEVDRV_USBF_YES) {
- /* ==== Test Mode ==== */
- usbx_function_USB_FUNCTION_TestMode();
- }
- /* Needs not procedure in this state */
- break;
-
- case USB_FUNCTION_CS_RDDS:
- /* Reads a setup packet */
- EP0setupCallback();
- break;
-
- case USB_FUNCTION_CS_WRDS:
- /* Original code was the SetDescriptor was called */
- EP0setupCallback();
- break;
-
- case USB_FUNCTION_CS_WRND:
- EP0setupCallback();
-
- /*The EP0setupCallback should finish in successful */
- usbx_function_set_pid_buf(USB_FUNCTION_PIPE0);
-
- RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
- break;
-
- case USB_FUNCTION_CS_RDSS:
- RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
- break;
-
- case USB_FUNCTION_CS_WRSS:
- RZA_IO_RegWrite_16(&USB20X.DCPCTR, 1, USB_DCPCTR_CCPL_SHIFT, USB_DCPCTR_CCPL);
- break;
-
- case USB_FUNCTION_CS_SQER:
- usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
- break;
-
- default:
- usbx_function_set_pid_stall(USB_FUNCTION_PIPE0);
- break;
- }
- } else if (
- (int_sts0 & USB_FUNCTION_BITBEMP) &&
- (int_enb0 & USB_FUNCTION_BITBEMP) &&
- (int_sts3 & int_enb4) ) {
- /* ==== BEMP PIPEx ==== */
- 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 ==== */
- 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 ==== */
- usbx_function_NRDYInterrupt(int_sts2, int_enb3, this, epCallback);
- } else {
- /* Do Nothing */
- }
-
- /* Three dummy reads for cleearing interrupt requests */
- dumy_sts = USB20X.INTSTS0;
- dumy_sts = USB20X.INTSTS1;
-}
-
-/*************************************************************************/
-#endif
-/*************************************************************************/
-/*EOF*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice/USBHAL_STM32F1.cpp Fri Jul 08 21:16:25 2016 +0000
@@ -0,0 +1,381 @@
+/* Copyright (c) 2010-2015 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "USBDevice.h"
+
+#define USB_LP_IRQn USB_LP_CAN1_RX0_IRQn
+const uint8_t PCD_EP_TYPE_CTRL = EP_TYPE_CTRL;
+const uint8_t PCD_EP_TYPE_INTR = EP_TYPE_INTR;
+const uint8_t PCD_EP_TYPE_BULK = EP_TYPE_BULK;
+const uint8_t PCD_EP_TYPE_ISOC = EP_TYPE_ISOC;
+
+static PCD_HandleTypeDef hpcd_USB_FS;
+static volatile int epComplete = 0;
+
+USBHAL * USBHAL::instance;
+uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {return 0;}
+
+USBHAL::USBHAL(void) {
+ hpcd_USB_FS.pData = this;
+ hpcd_USB_FS.Instance = USB;
+ hpcd_USB_FS.Init.dev_endpoints = 8;
+ hpcd_USB_FS.Init.speed = PCD_SPEED_FULL;
+ hpcd_USB_FS.Init.ep0_mps = DEP0CTL_MPS_8;
+ hpcd_USB_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
+ hpcd_USB_FS.Init.Sof_enable = DISABLE;
+ hpcd_USB_FS.Init.low_power_enable = DISABLE;
+ hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
+ NVIC_SetVector(USB_LP_IRQn, (uint32_t)&_usbisr);
+ HAL_PCD_Init(&hpcd_USB_FS);
+ HAL_PCD_Start(&hpcd_USB_FS);
+}
+
+void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd) {
+ __USB_CLK_ENABLE();
+ HAL_NVIC_SetPriority(USB_LP_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(USB_LP_IRQn);
+}
+
+void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd) {
+ __USB_CLK_DISABLE(); // Peripheral clock disable
+ HAL_NVIC_DisableIRQ(USB_LP_IRQn); // Peripheral interrupt Deinit
+}
+
+USBHAL::~USBHAL(void) {
+ HAL_PCD_DeInit(&hpcd_USB_FS);
+}
+
+void USBHAL::connect(void) {
+ HAL_PCD_DevConnect(&hpcd_USB_FS);
+}
+
+void USBHAL::disconnect(void) {
+ HAL_PCD_DevDisconnect(&hpcd_USB_FS);
+}
+
+void USBHAL::configureDevice(void) {
+ // Not needed
+}
+void USBHAL::unconfigureDevice(void) {
+ // Not needed
+}
+
+void USBHAL::setAddress(uint8_t address) {
+ HAL_PCD_SetAddress(&hpcd_USB_FS, address);
+}
+
+class PacketBufferAreaManager {
+public:
+ PacketBufferAreaManager(int bufsize_):bufsize(bufsize_) {
+ reset();
+ }
+ void reset() {
+ head = 0;
+ tail = bufsize;
+ }
+ int allocBuf(int maxPacketSize) {
+ head += 4;
+ tail -= maxPacketSize;
+ if (tail < head) {
+ return 0;
+ }
+ return tail;
+ }
+private:
+ int head,tail;
+ int bufsize;
+} PktBufArea(512);
+
+bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
+ int pmaadress = PktBufArea.allocBuf(maxPacket);
+ MBED_ASSERT(pmaadress != 0);
+ if (pmaadress == 0) {
+ return false;
+ }
+ PCD_HandleTypeDef *hpcd = &hpcd_USB_FS;
+ uint8_t ep_type;
+ switch(endpoint) {
+ case EP0OUT:
+ HAL_PCDEx_PMAConfig(hpcd, 0x00, PCD_SNG_BUF, pmaadress);
+ HAL_PCD_EP_Open(hpcd, 0x00, maxPacket, PCD_EP_TYPE_CTRL);
+ break;
+ case EP0IN:
+ HAL_PCDEx_PMAConfig(hpcd, 0x80, PCD_SNG_BUF, pmaadress);
+ HAL_PCD_EP_Open(hpcd, 0x80, maxPacket, PCD_EP_TYPE_CTRL);
+ break;
+ case EPINT_OUT:
+ HAL_PCDEx_PMAConfig(hpcd, 0x01, PCD_SNG_BUF, pmaadress);
+ HAL_PCD_EP_Open(hpcd, 0x01, maxPacket, PCD_EP_TYPE_INTR);
+ break;
+ case EPINT_IN:
+ HAL_PCDEx_PMAConfig(hpcd, 0x81, PCD_SNG_BUF, pmaadress);
+ HAL_PCD_EP_Open(hpcd, 0x81, maxPacket, PCD_EP_TYPE_INTR);
+ break;
+ case EPBULK_OUT:
+ HAL_PCDEx_PMAConfig(hpcd, 0x02, PCD_SNG_BUF, pmaadress);
+ HAL_PCD_EP_Open(hpcd, 0x02, maxPacket, PCD_EP_TYPE_BULK);
+ break;
+ case EPBULK_IN:
+ HAL_PCDEx_PMAConfig(hpcd, 0x82, PCD_SNG_BUF, pmaadress);
+ HAL_PCD_EP_Open(hpcd, 0x82, maxPacket, PCD_EP_TYPE_BULK);
+ break;
+ case EP3OUT:
+ HAL_PCDEx_PMAConfig(hpcd, 0x03, PCD_SNG_BUF, pmaadress);
+ ep_type = (flags & ISOCHRONOUS) ? PCD_EP_TYPE_ISOC : PCD_EP_TYPE_BULK;
+ HAL_PCD_EP_Open(hpcd, 0x03, maxPacket, ep_type);
+ break;
+ case EP3IN:
+ HAL_PCDEx_PMAConfig(hpcd, 0x83, PCD_SNG_BUF, pmaadress);
+ ep_type = (flags & ISOCHRONOUS) ? PCD_EP_TYPE_ISOC : PCD_EP_TYPE_BULK;
+ HAL_PCD_EP_Open(hpcd, 0x83, maxPacket, ep_type);
+ break;
+ default:
+ MBED_ASSERT(0);
+ return false;
+ }
+ return true;
+}
+
+// read setup packet
+void USBHAL::EP0setup(uint8_t *buffer) {
+ memcpy(buffer, hpcd_USB_FS.Setup, 8);
+}
+
+void USBHAL::EP0readStage(void) {
+}
+
+void USBHAL::EP0read(void) {
+ endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
+}
+
+class rxTempBufferManager {
+ uint8_t buf0[MAX_PACKET_SIZE_EP0];
+ uint8_t buf1[MAX_PACKET_SIZE_EP1];
+ uint8_t buf2[MAX_PACKET_SIZE_EP2];
+ uint8_t buf3[MAX_PACKET_SIZE_EP3_ISO];
+public:
+ uint8_t* ptr(uint8_t endpoint, int maxPacketSize) {
+ switch(endpoint) {
+ case EP0OUT:
+ MBED_ASSERT(maxPacketSize <= MAX_PACKET_SIZE_EP0);
+ break;
+ case EP1OUT:
+ MBED_ASSERT(maxPacketSize <= MAX_PACKET_SIZE_EP1);
+ break;
+ case EP2OUT:
+ MBED_ASSERT(maxPacketSize <= MAX_PACKET_SIZE_EP2);
+ break;
+ case EP3OUT:
+ MBED_ASSERT(maxPacketSize <= MAX_PACKET_SIZE_EP3_ISO);
+ break;
+ }
+ return ptr(endpoint);
+ }
+ uint8_t* ptr(uint8_t endpoint) {
+ switch(endpoint) {
+ case EP0OUT: return buf0;
+ case EP1OUT: return buf1;
+ case EP2OUT: return buf2;
+ case EP3OUT: return buf3;
+ }
+ MBED_ASSERT(0);
+ return NULL;
+ }
+} rxtmp;
+
+uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
+ const uint8_t endpoint = EP0OUT;
+ uint32_t length = HAL_PCD_EP_GetRxCount(&hpcd_USB_FS, endpoint>>1);
+ memcpy(buffer, rxtmp.ptr(endpoint), length);
+ return length;
+}
+
+void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
+ endpointWrite(EP0IN, buffer, size);
+}
+
+void USBHAL::EP0getWriteResult(void) {
+}
+
+void USBHAL::EP0stall(void) {
+ // If we stall the out endpoint here then we have problems transferring
+ // and setup requests after the (stalled) get device qualifier requests.
+ // TODO: Find out if this is correct behavior, or whether we are doing
+ // something else wrong
+ stallEndpoint(EP0IN);
+// stallEndpoint(EP0OUT);
+}
+
+EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
+ HAL_PCD_EP_Receive(&hpcd_USB_FS, endpoint>>1, rxtmp.ptr(endpoint, maximumSize), maximumSize);
+ epComplete &= ~(1 << endpoint);
+ return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
+ if (!(epComplete & (1 << endpoint))) {
+ return EP_PENDING;
+ }
+ int len = HAL_PCD_EP_GetRxCount(&hpcd_USB_FS, endpoint>>1);
+ memcpy(buffer, rxtmp.ptr(endpoint), len);
+ *bytesRead = len;
+ return EP_COMPLETED;
+}
+
+EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
+ HAL_PCD_EP_Transmit(&hpcd_USB_FS, endpoint>>1, data, size);
+ epComplete &= ~(1 << endpoint);
+ return EP_PENDING;
+}
+
+EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
+ if (epComplete & (1 << endpoint)) {
+ epComplete &= ~(1 << endpoint);
+ return EP_COMPLETED;
+ }
+ return EP_PENDING;
+}
+
+void USBHAL::stallEndpoint(uint8_t endpoint) {
+ PCD_HandleTypeDef *hpcd = &hpcd_USB_FS;
+ switch(endpoint) {
+ case EP0IN:
+ HAL_PCD_EP_SetStall(hpcd, 0x80);
+ break;
+ case EP0OUT:
+ HAL_PCD_EP_SetStall(hpcd, 0x00);
+ break;
+ default:
+ break;
+ }
+}
+
+void USBHAL::unstallEndpoint(uint8_t endpoint) {
+}
+
+bool USBHAL::getEndpointStallState(uint8_t endpoint) {
+ return false;
+}
+
+void USBHAL::remoteWakeup(void) {}
+
+void USBHAL::_usbisr(void) {
+ HAL_PCD_IRQHandler(&hpcd_USB_FS);
+}
+
+void USBHAL::usbisr(void) {}
+
+void USBHAL::SetupStageCallback() {
+ EP0setupCallback();
+}
+
+void USBHAL::DataInStageCallback(uint8_t epnum) {
+ switch(epnum) {
+ case 0: // EP0IN
+ EP0in();
+ break;
+ case 1:
+ epComplete |= (1<<EP1IN);
+ if (EP1_IN_callback()) {
+ epComplete &= ~(1<<EP1IN);
+ }
+ break;
+ case 2:
+ epComplete |= (1<<EP2IN);
+ if (EP2_IN_callback()) {
+ epComplete &= ~(1<<EP2IN);
+ }
+ break;
+ case 3:
+ epComplete |= (1<<EP3IN);
+ if (EP3_IN_callback()) {
+ epComplete &= ~(1<<EP3IN);
+ }
+ break;
+ default:
+ MBED_ASSERT(0);
+ break;
+ }
+}
+
+void USBHAL::DataOutStageCallback(uint8_t epnum) {
+ switch(epnum) {
+ case 0: // EP0OUT
+ if ((hpcd_USB_FS.Setup[0]&0x80) == 0x00) { // host to device ?
+ EP0out();
+ }
+ break;
+ case 1:
+ epComplete |= (1<<EP1OUT);
+ if (EP1_OUT_callback()) {
+ epComplete &= ~(1<<EP1OUT);
+ }
+ break;
+ case 2:
+ epComplete |= (1<<EP2OUT);
+ if (EP2_OUT_callback()) {
+ epComplete &= ~(1<<EP2OUT);
+ }
+ break;
+ case 3:
+ epComplete |= (1<<EP3OUT);
+ if (EP3_OUT_callback()) {
+ epComplete &= ~(1<<EP3OUT);
+ }
+ break;
+ default:
+ MBED_ASSERT(0);
+ break;
+ }
+}
+
+void USBHAL::ResetCallback() {
+ PktBufArea.reset();
+ realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
+ realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
+}
+
+void USBHAL::SOFCallback() {
+ SOF(hpcd_USB_FS.Instance->FNR & USB_FNR_FN);
+}
+
+void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) {
+ reinterpret_cast<USBHAL*>(hpcd->pData)->SetupStageCallback();
+}
+
+void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) {
+ reinterpret_cast<USBHAL*>(hpcd->pData)->DataInStageCallback(epnum);
+}
+
+void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) {
+ reinterpret_cast<USBHAL*>(hpcd->pData)->DataOutStageCallback(epnum);
+}
+
+void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) {
+ reinterpret_cast<USBHAL*>(hpcd->pData)->ResetCallback();
+}
+
+void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
+ reinterpret_cast<USBHAL*>(hpcd->pData)->SOFCallback();
+}
+
+void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) {
+ if (hpcd->Init.low_power_enable) {
+ SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
+ }
+}
--- a/USBDevice/USBHAL_STM32F4.cpp Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,416 +0,0 @@
-/* Copyright (c) 2010-2011 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_STM32F4)
-
-#include "USBHAL.h"
-#include "USBRegs_STM32.h"
-#include "pinmap.h"
-
-USBHAL * USBHAL::instance;
-
-static volatile int epComplete = 0;
-
-static uint32_t bufferEnd = 0;
-static const uint32_t rxFifoSize = 512;
-static uint32_t rxFifoCount = 0;
-
-static uint32_t setupBuffer[MAX_PACKET_SIZE_EP0 >> 2];
-
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {
- return 0;
-}
-
-USBHAL::USBHAL(void) {
- NVIC_DisableIRQ(OTG_FS_IRQn);
- epCallback[0] = &USBHAL::EP1_OUT_callback;
- epCallback[1] = &USBHAL::EP1_IN_callback;
- epCallback[2] = &USBHAL::EP2_OUT_callback;
- epCallback[3] = &USBHAL::EP2_IN_callback;
- epCallback[4] = &USBHAL::EP3_OUT_callback;
- epCallback[5] = &USBHAL::EP3_IN_callback;
-
- // Enable power and clocking
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
-
-#if defined(TARGET_STM32F407VG) || defined(TARGET_STM32F401RE) || defined(TARGET_STM32F411RE) || defined(TARGET_STM32F429ZI)
- pin_function(PA_8, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
- pin_function(PA_9, STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLDOWN, GPIO_AF10_OTG_FS));
- pin_function(PA_10, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS));
- pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
- pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
-#else
- pin_function(PA_8, STM_PIN_DATA(2, 10));
- pin_function(PA_9, STM_PIN_DATA(0, 0));
- pin_function(PA_10, STM_PIN_DATA(2, 10));
- pin_function(PA_11, STM_PIN_DATA(2, 10));
- pin_function(PA_12, STM_PIN_DATA(2, 10));
-
- // Set ID pin to open drain with pull-up resistor
- pin_mode(PA_10, OpenDrain);
- GPIOA->PUPDR &= ~(0x3 << 20);
- GPIOA->PUPDR |= 1 << 20;
-
- // Set VBUS pin to open drain
- pin_mode(PA_9, OpenDrain);
-#endif
-
- RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
-
- // Enable interrupts
- OTG_FS->GREGS.GAHBCFG |= (1 << 0);
-
- // Turnaround time to maximum value - too small causes packet loss
- OTG_FS->GREGS.GUSBCFG |= (0xF << 10);
-
- // Unmask global interrupts
- OTG_FS->GREGS.GINTMSK |= (1 << 3) | // SOF
- (1 << 4) | // RX FIFO not empty
- (1 << 12); // USB reset
-
- OTG_FS->DREGS.DCFG |= (0x3 << 0) | // Full speed
- (1 << 2); // Non-zero-length status OUT handshake
-
- OTG_FS->GREGS.GCCFG |= (1 << 19) | // Enable VBUS sensing
- (1 << 16); // Power Up
-
- instance = this;
- NVIC_SetVector(OTG_FS_IRQn, (uint32_t)&_usbisr);
- NVIC_SetPriority(OTG_FS_IRQn, 1);
-}
-
-USBHAL::~USBHAL(void) {
-}
-
-void USBHAL::connect(void) {
- NVIC_EnableIRQ(OTG_FS_IRQn);
-}
-
-void USBHAL::disconnect(void) {
- NVIC_DisableIRQ(OTG_FS_IRQn);
-}
-
-void USBHAL::configureDevice(void) {
- // Not needed
-}
-
-void USBHAL::unconfigureDevice(void) {
- // Not needed
-}
-
-void USBHAL::setAddress(uint8_t address) {
- OTG_FS->DREGS.DCFG |= (address << 4);
- EP0write(0, 0);
-}
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket,
- uint32_t flags) {
- uint32_t epIndex = endpoint >> 1;
-
- uint32_t type;
- switch (endpoint) {
- case EP0IN:
- case EP0OUT:
- type = 0;
- break;
- case EPISO_IN:
- case EPISO_OUT:
- type = 1;
- case EPBULK_IN:
- case EPBULK_OUT:
- type = 2;
- break;
- case EPINT_IN:
- case EPINT_OUT:
- type = 3;
- break;
- }
-
- // Generic in or out EP controls
- uint32_t control = (maxPacket << 0) | // Packet size
- (1 << 15) | // Active endpoint
- (type << 18); // Endpoint type
-
- if (endpoint & 0x1) { // In Endpoint
- // Set up the Tx FIFO
- if (endpoint == EP0IN) {
- OTG_FS->GREGS.DIEPTXF0_HNPTXFSIZ = ((maxPacket >> 2) << 16) |
- (bufferEnd << 0);
- }
- else {
- OTG_FS->GREGS.DIEPTXF[epIndex - 1] = ((maxPacket >> 2) << 16) |
- (bufferEnd << 0);
- }
- bufferEnd += maxPacket >> 2;
-
- // Set the In EP specific control settings
- if (endpoint != EP0IN) {
- control |= (1 << 28); // SD0PID
- }
-
- control |= (epIndex << 22) | // TxFIFO index
- (1 << 27); // SNAK
- OTG_FS->INEP_REGS[epIndex].DIEPCTL = control;
-
- // Unmask the interrupt
- OTG_FS->DREGS.DAINTMSK |= (1 << epIndex);
- }
- else { // Out endpoint
- // Set the out EP specific control settings
- control |= (1 << 26); // CNAK
- OTG_FS->OUTEP_REGS[epIndex].DOEPCTL = control;
-
- // Unmask the interrupt
- OTG_FS->DREGS.DAINTMSK |= (1 << (epIndex + 16));
- }
- return true;
-}
-
-// read setup packet
-void USBHAL::EP0setup(uint8_t *buffer) {
- memcpy(buffer, setupBuffer, MAX_PACKET_SIZE_EP0);
-}
-
-void USBHAL::EP0readStage(void) {
-}
-
-void USBHAL::EP0read(void) {
-}
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
- uint32_t* buffer32 = (uint32_t *) buffer;
- uint32_t length = rxFifoCount;
- for (uint32_t i = 0; i < length; i += 4) {
- buffer32[i >> 2] = OTG_FS->FIFO[0][0];
- }
-
- rxFifoCount = 0;
- return length;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
- endpointWrite(0, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
-}
-
-void USBHAL::EP0stall(void) {
- // If we stall the out endpoint here then we have problems transferring
- // and setup requests after the (stalled) get device qualifier requests.
- // TODO: Find out if this is correct behavior, or whether we are doing
- // something else wrong
- stallEndpoint(EP0IN);
-// stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
- uint32_t epIndex = endpoint >> 1;
- uint32_t size = (1 << 19) | // 1 packet
- (maximumSize << 0); // Packet size
-// if (endpoint == EP0OUT) {
- size |= (1 << 29); // 1 setup packet
-// }
- OTG_FS->OUTEP_REGS[epIndex].DOEPTSIZ = size;
- OTG_FS->OUTEP_REGS[epIndex].DOEPCTL |= (1 << 31) | // Enable endpoint
- (1 << 26); // Clear NAK
-
- epComplete &= ~(1 << endpoint);
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
- if (!(epComplete & (1 << endpoint))) {
- return EP_PENDING;
- }
-
- uint32_t* buffer32 = (uint32_t *) buffer;
- uint32_t length = rxFifoCount;
- for (uint32_t i = 0; i < length; i += 4) {
- buffer32[i >> 2] = OTG_FS->FIFO[endpoint >> 1][0];
- }
- rxFifoCount = 0;
- *bytesRead = length;
- return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
- uint32_t epIndex = endpoint >> 1;
- OTG_FS->INEP_REGS[epIndex].DIEPTSIZ = (1 << 19) | // 1 packet
- (size << 0); // Size of packet
- OTG_FS->INEP_REGS[epIndex].DIEPCTL |= (1 << 31) | // Enable endpoint
- (1 << 26); // CNAK
- OTG_FS->DREGS.DIEPEMPMSK = (1 << epIndex);
-
- while ((OTG_FS->INEP_REGS[epIndex].DTXFSTS & 0XFFFF) < ((size + 3) >> 2));
-
- for (uint32_t i=0; i<(size + 3) >> 2; i++, data+=4) {
- OTG_FS->FIFO[epIndex][0] = *(uint32_t *)data;
- }
-
- epComplete &= ~(1 << endpoint);
-
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
- if (epComplete & (1 << endpoint)) {
- epComplete &= ~(1 << endpoint);
- return EP_COMPLETED;
- }
-
- return EP_PENDING;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
- if (endpoint & 0x1) { // In EP
- OTG_FS->INEP_REGS[endpoint >> 1].DIEPCTL |= (1 << 30) | // Disable
- (1 << 21); // Stall
- }
- else { // Out EP
- OTG_FS->DREGS.DCTL |= (1 << 9); // Set global out NAK
- OTG_FS->OUTEP_REGS[endpoint >> 1].DOEPCTL |= (1 << 30) | // Disable
- (1 << 21); // Stall
- }
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
-
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
- return false;
-}
-
-void USBHAL::remoteWakeup(void) {
-}
-
-
-void USBHAL::_usbisr(void) {
- instance->usbisr();
-}
-
-
-void USBHAL::usbisr(void) {
- if (OTG_FS->GREGS.GINTSTS & (1 << 11)) { // USB Suspend
- suspendStateChanged(1);
- };
-
- if (OTG_FS->GREGS.GINTSTS & (1 << 12)) { // USB Reset
- suspendStateChanged(0);
-
- // Set SNAK bits
- OTG_FS->OUTEP_REGS[0].DOEPCTL |= (1 << 27);
- OTG_FS->OUTEP_REGS[1].DOEPCTL |= (1 << 27);
- OTG_FS->OUTEP_REGS[2].DOEPCTL |= (1 << 27);
- OTG_FS->OUTEP_REGS[3].DOEPCTL |= (1 << 27);
-
- OTG_FS->DREGS.DIEPMSK = (1 << 0);
-
- bufferEnd = 0;
-
- // Set the receive FIFO size
- OTG_FS->GREGS.GRXFSIZ = rxFifoSize >> 2;
- bufferEnd += rxFifoSize >> 2;
-
- // Create the endpoints, and wait for setup packets on out EP0
- realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
- realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
- endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
-
- OTG_FS->GREGS.GINTSTS = (1 << 12);
- }
-
- if (OTG_FS->GREGS.GINTSTS & (1 << 4)) { // RX FIFO not empty
- uint32_t status = OTG_FS->GREGS.GRXSTSP;
-
- uint32_t endpoint = (status & 0xF) << 1;
- uint32_t length = (status >> 4) & 0x7FF;
- uint32_t type = (status >> 17) & 0xF;
-
- rxFifoCount = length;
-
- if (type == 0x6) {
- // Setup packet
- for (uint32_t i=0; i<length; i+=4) {
- setupBuffer[i >> 2] = OTG_FS->FIFO[0][i >> 2];
- }
- rxFifoCount = 0;
- }
-
- if (type == 0x4) {
- // Setup complete
- EP0setupCallback();
- endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
- }
-
- if (type == 0x2) {
- // Out packet
- if (endpoint == EP0OUT) {
- EP0out();
- }
- else {
- epComplete |= (1 << endpoint);
- if ((instance->*(epCallback[endpoint - 2]))()) {
- epComplete &= (1 << endpoint);
- }
- }
- }
-
- for (uint32_t i=0; i<rxFifoCount; i+=4) {
- (void) OTG_FS->FIFO[0][0];
- }
- OTG_FS->GREGS.GINTSTS = (1 << 4);
- }
-
- if (OTG_FS->GREGS.GINTSTS & (1 << 18)) { // In endpoint interrupt
- // Loop through the in endpoints
- for (uint32_t i=0; i<4; i++) {
- if (OTG_FS->DREGS.DAINT & (1 << i)) { // Interrupt is on endpoint
-
- if (OTG_FS->INEP_REGS[i].DIEPINT & (1 << 7)) {// Tx FIFO empty
- // If the Tx FIFO is empty on EP0 we need to send a further
- // packet, so call EP0in()
- if (i == 0) {
- EP0in();
- }
- // Clear the interrupt
- OTG_FS->INEP_REGS[i].DIEPINT = (1 << 7);
- // Stop firing Tx empty interrupts
- // Will get turned on again if another write is called
- OTG_FS->DREGS.DIEPEMPMSK &= ~(1 << i);
- }
-
- // If the transfer is complete
- if (OTG_FS->INEP_REGS[i].DIEPINT & (1 << 0)) { // Tx Complete
- epComplete |= (1 << (1 + (i << 1)));
- OTG_FS->INEP_REGS[i].DIEPINT = (1 << 0);
- }
- }
- }
- OTG_FS->GREGS.GINTSTS = (1 << 18);
- }
-
- if (OTG_FS->GREGS.GINTSTS & (1 << 3)) { // Start of frame
- SOF((OTG_FS->GREGS.GRXSTSR >> 17) & 0xF);
- OTG_FS->GREGS.GINTSTS = (1 << 3);
- }
-}
-
-
-#endif
--- a/USBDevice/USBHAL_STM32L1.cpp Thu Jun 25 09:33:51 2015 +0900
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,409 +0,0 @@
-/* Copyright (c) 2010-2015 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#if defined(TARGET_STM32L1)||defined(TARGET_STM32F1)
-#include "USBDevice.h"
-
-#if defined(TARGET_STM32F1)
-#define USB_LP_IRQn USB_LP_CAN1_RX0_IRQn
-const uint8_t PCD_EP_TYPE_CTRL = EP_TYPE_CTRL;
-const uint8_t PCD_EP_TYPE_INTR = EP_TYPE_INTR;
-const uint8_t PCD_EP_TYPE_BULK = EP_TYPE_BULK;
-const uint8_t PCD_EP_TYPE_ISOC = EP_TYPE_ISOC;
-
-#elif defined(TARGET_STM32L1)
-void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state) {
- __SYSCFG_CLK_ENABLE(); // for SYSCFG_PMC_USB_PU
- if (state == 1) {
- __HAL_SYSCFG_USBPULLUP_ENABLE();
- } else {
- __HAL_SYSCFG_USBPULLUP_DISABLE();
- }
-}
-
-#elif defined(TARGET_STM32L0)||defined(TARGET_STM32F0)
-#define USB_LP_IRQn USB_IRQn
-void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state) {
- if (state == 1) {
- SET_BIT(USB->BCDR, USB_BCDR_DPPU); // DP Pull-up
- } else {
- CLEAR_BIT(USB->BCDR, USB_BCDR_DPPU);
- }
-}
-
-#elif defined(TARGET_STM32F3)
-#define USB_LP_IRQn USB_LP_CAN1_RX0_IRQn
-#endif
-
-static PCD_HandleTypeDef hpcd_USB_FS;
-static volatile int epComplete = 0;
-
-USBHAL * USBHAL::instance;
-uint32_t USBHAL::endpointReadcore(uint8_t endpoint, uint8_t *buffer) {return 0;}
-
-USBHAL::USBHAL(void) {
- hpcd_USB_FS.pData = this;
- hpcd_USB_FS.Instance = USB;
- hpcd_USB_FS.Init.dev_endpoints = 8;
- hpcd_USB_FS.Init.speed = PCD_SPEED_FULL;
- hpcd_USB_FS.Init.ep0_mps = DEP0CTL_MPS_8;
- hpcd_USB_FS.Init.phy_itface = PCD_PHY_EMBEDDED;
- hpcd_USB_FS.Init.Sof_enable = DISABLE;
- hpcd_USB_FS.Init.low_power_enable = DISABLE;
- hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
- NVIC_SetVector(USB_LP_IRQn, (uint32_t)&_usbisr);
- HAL_PCD_Init(&hpcd_USB_FS);
- HAL_PCD_Start(&hpcd_USB_FS);
-}
-
-void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd) {
- __USB_CLK_ENABLE();
- HAL_NVIC_SetPriority(USB_LP_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(USB_LP_IRQn);
-}
-
-void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd) {
- __USB_CLK_DISABLE(); // Peripheral clock disable
- HAL_NVIC_DisableIRQ(USB_LP_IRQn); // Peripheral interrupt Deinit
-}
-
-USBHAL::~USBHAL(void) {
- HAL_PCD_DeInit(&hpcd_USB_FS);
-}
-
-void USBHAL::connect(void) {
- HAL_PCD_DevConnect(&hpcd_USB_FS);
-}
-
-void USBHAL::disconnect(void) {
- HAL_PCD_DevDisconnect(&hpcd_USB_FS);
-}
-
-void USBHAL::configureDevice(void) {
- // Not needed
-}
-void USBHAL::unconfigureDevice(void) {
- // Not needed
-}
-
-void USBHAL::setAddress(uint8_t address) {
- HAL_PCD_SetAddress(&hpcd_USB_FS, address);
-}
-
-class PacketBufferAreaManager {
-public:
- PacketBufferAreaManager(int bufsize_):bufsize(bufsize_) {
- reset();
- }
- void reset() {
- head = 0;
- tail = bufsize;
- }
- int allocBuf(int maxPacketSize) {
- head += 4;
- tail -= maxPacketSize;
- if (tail < head) {
- return 0;
- }
- return tail;
- }
-private:
- int head,tail;
- int bufsize;
-} PktBufArea(512);
-
-bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) {
- int pmaadress = PktBufArea.allocBuf(maxPacket);
- MBED_ASSERT(pmaadress != 0);
- if (pmaadress == 0) {
- return false;
- }
- PCD_HandleTypeDef *hpcd = &hpcd_USB_FS;
- uint8_t ep_type;
- switch(endpoint) {
- case EP0OUT:
- HAL_PCDEx_PMAConfig(hpcd, 0x00, PCD_SNG_BUF, pmaadress);
- HAL_PCD_EP_Open(hpcd, 0x00, maxPacket, PCD_EP_TYPE_CTRL);
- break;
- case EP0IN:
- HAL_PCDEx_PMAConfig(hpcd, 0x80, PCD_SNG_BUF, pmaadress);
- HAL_PCD_EP_Open(hpcd, 0x80, maxPacket, PCD_EP_TYPE_CTRL);
- break;
- case EPINT_OUT:
- HAL_PCDEx_PMAConfig(hpcd, 0x01, PCD_SNG_BUF, pmaadress);
- HAL_PCD_EP_Open(hpcd, 0x01, maxPacket, PCD_EP_TYPE_INTR);
- break;
- case EPINT_IN:
- HAL_PCDEx_PMAConfig(hpcd, 0x81, PCD_SNG_BUF, pmaadress);
- HAL_PCD_EP_Open(hpcd, 0x81, maxPacket, PCD_EP_TYPE_INTR);
- break;
- case EPBULK_OUT:
- HAL_PCDEx_PMAConfig(hpcd, 0x02, PCD_SNG_BUF, pmaadress);
- HAL_PCD_EP_Open(hpcd, 0x02, maxPacket, PCD_EP_TYPE_BULK);
- break;
- case EPBULK_IN:
- HAL_PCDEx_PMAConfig(hpcd, 0x82, PCD_SNG_BUF, pmaadress);
- HAL_PCD_EP_Open(hpcd, 0x82, maxPacket, PCD_EP_TYPE_BULK);
- break;
- case EP3OUT:
- HAL_PCDEx_PMAConfig(hpcd, 0x03, PCD_SNG_BUF, pmaadress);
- ep_type = (flags & ISOCHRONOUS) ? PCD_EP_TYPE_ISOC : PCD_EP_TYPE_BULK;
- HAL_PCD_EP_Open(hpcd, 0x03, maxPacket, ep_type);
- break;
- case EP3IN:
- HAL_PCDEx_PMAConfig(hpcd, 0x83, PCD_SNG_BUF, pmaadress);
- ep_type = (flags & ISOCHRONOUS) ? PCD_EP_TYPE_ISOC : PCD_EP_TYPE_BULK;
- HAL_PCD_EP_Open(hpcd, 0x83, maxPacket, ep_type);
- break;
- default:
- MBED_ASSERT(0);
- return false;
- }
- return true;
-}
-
-// read setup packet
-void USBHAL::EP0setup(uint8_t *buffer) {
- memcpy(buffer, hpcd_USB_FS.Setup, 8);
-}
-
-void USBHAL::EP0readStage(void) {
-}
-
-void USBHAL::EP0read(void) {
- endpointRead(EP0OUT, MAX_PACKET_SIZE_EP0);
-}
-
-class rxTempBufferManager {
- uint8_t buf0[MAX_PACKET_SIZE_EP0];
- uint8_t buf1[MAX_PACKET_SIZE_EP1];
- uint8_t buf2[MAX_PACKET_SIZE_EP2];
- uint8_t buf3[MAX_PACKET_SIZE_EP3_ISO];
-public:
- uint8_t* ptr(uint8_t endpoint, int maxPacketSize) {
- switch(endpoint) {
- case EP0OUT:
- MBED_ASSERT(maxPacketSize <= MAX_PACKET_SIZE_EP0);
- break;
- case EP1OUT:
- MBED_ASSERT(maxPacketSize <= MAX_PACKET_SIZE_EP1);
- break;
- case EP2OUT:
- MBED_ASSERT(maxPacketSize <= MAX_PACKET_SIZE_EP2);
- break;
- case EP3OUT:
- MBED_ASSERT(maxPacketSize <= MAX_PACKET_SIZE_EP3_ISO);
- break;
- }
- return ptr(endpoint);
- }
- uint8_t* ptr(uint8_t endpoint) {
- switch(endpoint) {
- case EP0OUT: return buf0;
- case EP1OUT: return buf1;
- case EP2OUT: return buf2;
- case EP3OUT: return buf3;
- }
- MBED_ASSERT(0);
- return NULL;
- }
-} rxtmp;
-
-uint32_t USBHAL::EP0getReadResult(uint8_t *buffer) {
- const uint8_t endpoint = EP0OUT;
- uint32_t length = HAL_PCD_EP_GetRxCount(&hpcd_USB_FS, endpoint>>1);
- memcpy(buffer, rxtmp.ptr(endpoint), length);
- return length;
-}
-
-void USBHAL::EP0write(uint8_t *buffer, uint32_t size) {
- endpointWrite(EP0IN, buffer, size);
-}
-
-void USBHAL::EP0getWriteResult(void) {
-}
-
-void USBHAL::EP0stall(void) {
- // If we stall the out endpoint here then we have problems transferring
- // and setup requests after the (stalled) get device qualifier requests.
- // TODO: Find out if this is correct behavior, or whether we are doing
- // something else wrong
- stallEndpoint(EP0IN);
-// stallEndpoint(EP0OUT);
-}
-
-EP_STATUS USBHAL::endpointRead(uint8_t endpoint, uint32_t maximumSize) {
- HAL_PCD_EP_Receive(&hpcd_USB_FS, endpoint>>1, rxtmp.ptr(endpoint, maximumSize), maximumSize);
- epComplete &= ~(1 << endpoint);
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointReadResult(uint8_t endpoint, uint8_t * buffer, uint32_t *bytesRead) {
- if (!(epComplete & (1 << endpoint))) {
- return EP_PENDING;
- }
- int len = HAL_PCD_EP_GetRxCount(&hpcd_USB_FS, endpoint>>1);
- memcpy(buffer, rxtmp.ptr(endpoint), len);
- *bytesRead = len;
- return EP_COMPLETED;
-}
-
-EP_STATUS USBHAL::endpointWrite(uint8_t endpoint, uint8_t *data, uint32_t size) {
- HAL_PCD_EP_Transmit(&hpcd_USB_FS, endpoint>>1, data, size);
- epComplete &= ~(1 << endpoint);
- return EP_PENDING;
-}
-
-EP_STATUS USBHAL::endpointWriteResult(uint8_t endpoint) {
- if (epComplete & (1 << endpoint)) {
- epComplete &= ~(1 << endpoint);
- return EP_COMPLETED;
- }
- return EP_PENDING;
-}
-
-void USBHAL::stallEndpoint(uint8_t endpoint) {
- PCD_HandleTypeDef *hpcd = &hpcd_USB_FS;
- switch(endpoint) {
- case EP0IN:
- HAL_PCD_EP_SetStall(hpcd, 0x80);
- break;
- case EP0OUT:
- HAL_PCD_EP_SetStall(hpcd, 0x00);
- break;
- default:
- break;
- }
-}
-
-void USBHAL::unstallEndpoint(uint8_t endpoint) {
-}
-
-bool USBHAL::getEndpointStallState(uint8_t endpoint) {
- return false;
-}
-
-void USBHAL::remoteWakeup(void) {}
-
-void USBHAL::_usbisr(void) {
- HAL_PCD_IRQHandler(&hpcd_USB_FS);
-}
-
-void USBHAL::usbisr(void) {}
-
-void USBHAL::SetupStageCallback() {
- EP0setupCallback();
-}
-
-void USBHAL::DataInStageCallback(uint8_t epnum) {
- switch(epnum) {
- case 0: // EP0IN
- EP0in();
- break;
- case 1:
- epComplete |= (1<<EP1IN);
- if (EP1_IN_callback()) {
- epComplete &= ~(1<<EP1IN);
- }
- break;
- case 2:
- epComplete |= (1<<EP2IN);
- if (EP2_IN_callback()) {
- epComplete &= ~(1<<EP2IN);
- }
- break;
- case 3:
- epComplete |= (1<<EP3IN);
- if (EP3_IN_callback()) {
- epComplete &= ~(1<<EP3IN);
- }
- break;
- default:
- MBED_ASSERT(0);
- break;
- }
-}
-
-void USBHAL::DataOutStageCallback(uint8_t epnum) {
- switch(epnum) {
- case 0: // EP0OUT
- if ((hpcd_USB_FS.Setup[0]&0x80) == 0x00) { // host to device ?
- EP0out();
- }
- break;
- case 1:
- epComplete |= (1<<EP1OUT);
- if (EP1_OUT_callback()) {
- epComplete &= ~(1<<EP1OUT);
- }
- break;
- case 2:
- epComplete |= (1<<EP2OUT);
- if (EP2_OUT_callback()) {
- epComplete &= ~(1<<EP2OUT);
- }
- break;
- case 3:
- epComplete |= (1<<EP3OUT);
- if (EP3_OUT_callback()) {
- epComplete &= ~(1<<EP3OUT);
- }
- break;
- default:
- MBED_ASSERT(0);
- break;
- }
-}
-
-void USBHAL::ResetCallback() {
- PktBufArea.reset();
- realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
- realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
-}
-
-void USBHAL::SOFCallback() {
- SOF(hpcd_USB_FS.Instance->FNR & USB_FNR_FN);
-}
-
-void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd) {
- reinterpret_cast<USBHAL*>(hpcd->pData)->SetupStageCallback();
-}
-
-void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) {
- reinterpret_cast<USBHAL*>(hpcd->pData)->DataInStageCallback(epnum);
-}
-
-void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) {
- reinterpret_cast<USBHAL*>(hpcd->pData)->DataOutStageCallback(epnum);
-}
-
-void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) {
- reinterpret_cast<USBHAL*>(hpcd->pData)->ResetCallback();
-}
-
-void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
- reinterpret_cast<USBHAL*>(hpcd->pData)->SOFCallback();
-}
-
-void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) {
- if (hpcd->Init.low_power_enable) {
- SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
- }
-}
-
-#endif
--- a/USBSerial/CircBuffer.h Thu Jun 25 09:33:51 2015 +0900
+++ b/USBSerial/CircBuffer.h Fri Jul 08 21:16:25 2016 +0000
@@ -19,10 +19,16 @@
#ifndef CIRCBUFFER_H
#define CIRCBUFFER_H
-template <class T, int Size>
+template <class T>
class CircBuffer {
public:
- CircBuffer():write(0), read(0){}
+ CircBuffer(int length) {
+ write = 0;
+ read = 0;
+ size = length + 1;
+ buf = (T *)malloc(size * sizeof(T));
+ };
+
bool isFull() {
return ((write + 1) % size == read);
};
@@ -56,8 +62,8 @@
private:
volatile uint16_t write;
volatile uint16_t read;
- static const int size = Size+1; //a modern optimizer should be able to remove this so it uses no ram.
- T buf[Size+1];
+ uint16_t size;
+ T * buf;
};
#endif
--- a/USBSerial/USBCDC.cpp Thu Jun 25 09:33:51 2015 +0900
+++ b/USBSerial/USBCDC.cpp Fri Jul 08 21:16:25 2016 +0000
@@ -27,15 +27,11 @@
#define CDC_GET_LINE_CODING 0x21
#define CDC_SET_CONTROL_LINE_STATE 0x22
-// Control Line State bits
-#define CLS_DTR (1 << 0)
-#define CLS_RTS (1 << 1)
-
#define MAX_CDC_REPORT_SIZE MAX_PACKET_SIZE_EPBULK
-USBCDC::USBCDC(uint16_t vendor_id, uint16_t product_id, uint16_t product_release, bool connect_blocking): USBDevice(vendor_id, product_id, product_release) {
+USBCDC::USBCDC(uint16_t vendor_id, uint16_t product_id, uint16_t product_release): USBDevice(vendor_id, product_id, product_release) {
terminal_connected = false;
- USBDevice::connect(connect_blocking);
+ USBDevice::connect();
}
bool USBCDC::USBCallback_request(void) {
@@ -56,15 +52,11 @@
break;
case CDC_SET_LINE_CODING:
transfer->remaining = 7;
- transfer->notify = true;
success = true;
+ terminal_connected = true;
break;
case CDC_SET_CONTROL_LINE_STATE:
- if (transfer->setup.wValue & CLS_DTR) {
- terminal_connected = true;
- } else {
- terminal_connected = false;
- }
+ terminal_connected = false;
success = true;
break;
default:
@@ -75,31 +67,6 @@
return success;
}
-void USBCDC::USBCallback_requestCompleted(uint8_t *buf, uint32_t length) {
- // Request of setting line coding has 7 bytes
- if (length != 7) {
- return;
- }
-
- CONTROL_TRANSFER * transfer = getTransferPtr();
-
- /* Process class-specific requests */
- if (transfer->setup.bmRequestType.Type == CLASS_TYPE) {
- if (transfer->setup.bRequest == CDC_SET_LINE_CODING) {
- if (memcmp(cdc_line_coding, buf, 7)) {
- memcpy(cdc_line_coding, buf, 7);
-
- int baud = buf[0] + (buf[1] << 8)
- + (buf[2] << 16) + (buf[3] << 24);
- int stop = buf[4];
- int bits = buf[6];
- int parity = buf[5];
-
- lineCodingChanged(baud, bits, parity, stop);
- }
- }
- }
-}
// Called in ISR context
// Set configuration. Return false if the
@@ -149,8 +116,8 @@
0, // bDeviceSubClass
0, // bDeviceProtocol
MAX_PACKET_SIZE_EP0, // bMaxPacketSize0
- (uint8_t)(LSB(VENDOR_ID)), (uint8_t)(MSB(VENDOR_ID)), // idVendor
- (uint8_t)(LSB(PRODUCT_ID)), (uint8_t)(MSB(PRODUCT_ID)),// idProduct
+ LSB(VENDOR_ID), MSB(VENDOR_ID), // idVendor
+ LSB(PRODUCT_ID), MSB(PRODUCT_ID),// idProduct
0x00, 0x01, // bcdDevice
1, // iManufacturer
2, // iProduct
@@ -193,7 +160,7 @@
0, // iConfiguration
0x80, // bmAttributes
50, // bMaxPower
-
+
// IAD to associate the two CDC interfaces
0x08, // bLength
0x0b, // bDescriptorType
--- a/USBSerial/USBCDC.h Thu Jun 25 09:33:51 2015 +0900
+++ b/USBSerial/USBCDC.h Fri Jul 08 21:16:25 2016 +0000
@@ -35,40 +35,39 @@
* @param vendor_id Your vendor_id
* @param product_id Your product_id
* @param product_release Your preoduct_release
- * @param connect_blocking define if the connection must be blocked if USB not plugged in
*/
- USBCDC(uint16_t vendor_id, uint16_t product_id, uint16_t product_release, bool connect_blocking);
+ USBCDC(uint16_t vendor_id, uint16_t product_id, uint16_t product_release);
protected:
-
+
/*
* Get device descriptor. Warning: this method has to store the length of the report descriptor in reportLength.
*
* @returns pointer to the device descriptor
*/
virtual uint8_t * deviceDesc();
-
+
/*
* Get string product descriptor
*
* @returns pointer to the string product descriptor
*/
virtual uint8_t * stringIproductDesc();
-
+
/*
* Get string interface descriptor
*
* @returns pointer to the string interface descriptor
*/
virtual uint8_t * stringIinterfaceDesc();
-
+
/*
* Get configuration descriptor
*
* @returns pointer to the configuration descriptor
*/
virtual uint8_t * configurationDesc();
-
+
/*
* Send a buffer
*
@@ -78,7 +77,7 @@
* @returns true if successful
*/
bool send(uint8_t * buffer, uint32_t size);
-
+
/*
* Read a buffer from a certain endpoint. Warning: blocking
*
@@ -89,7 +88,7 @@
* @returns true if successful
*/
bool readEP(uint8_t * buffer, uint32_t * size);
-
+
/*
* Read a buffer from a certain endpoint. Warning: non blocking
*
@@ -100,21 +99,9 @@
* @returns true if successful
*/
bool readEP_NB(uint8_t * buffer, uint32_t * size);
-
- /*
- * Called by USBCallback_requestCompleted when CDC line coding is changed
- * Warning: Called in ISR
- *
- * @param baud The baud rate
- * @param bits The number of bits in a word (5-8)
- * @param parity The parity
- * @param stop The number of stop bits (1 or 2)
- */
- virtual void lineCodingChanged(int baud, int bits, int parity, int stop) {};
-
+
protected:
virtual bool USBCallback_request();
- virtual void USBCallback_requestCompleted(uint8_t *buf, uint32_t length);
virtual bool USBCallback_setConfiguration(uint8_t configuration);
volatile bool terminal_connected;
--- a/USBSerial/USBSerial.cpp Thu Jun 25 09:33:51 2015 +0900
+++ b/USBSerial/USBSerial.cpp Fri Jul 08 21:16:25 2016 +0000
@@ -27,7 +27,7 @@
}
int USBSerial::_getc() {
- uint8_t c = 0;
+ uint8_t c;
while (buf.isEmpty());
buf.dequeue(&c);
return c;
@@ -46,19 +46,21 @@
-bool USBSerial::EPBULK_OUT_callback() {
+bool USBSerial::EP2_OUT_callback() {
uint8_t c[65];
uint32_t size = 0;
//we read the packet received and put it on the circular buffer
readEP(c, &size);
- for (uint32_t i = 0; i < size; i++) {
+ for (int i = 0; i < size; i++) {
buf.queue(c[i]);
}
//call a potential handler
rx.call();
+ // We reactivate the endpoint to receive next characters
+ readStart(EPBULK_OUT, MAX_PACKET_SIZE_EPBULK);
return true;
}
--- a/USBSerial/USBSerial.h Thu Jun 25 09:33:51 2015 +0900
+++ b/USBSerial/USBSerial.h Fri Jul 08 21:16:25 2016 +0000
@@ -53,12 +53,9 @@
* @param vendor_id Your vendor_id (default: 0x1f00)
* @param product_id Your product_id (default: 0x2012)
* @param product_release Your preoduct_release (default: 0x0001)
- * @param connect_blocking define if the connection must be blocked if USB not plugged in
*
*/
- USBSerial(uint16_t vendor_id = 0x1f00, uint16_t product_id = 0x2012, uint16_t product_release = 0x0001, bool connect_blocking = true): USBCDC(vendor_id, product_id, product_release, connect_blocking){
- settingsChangedCallback = 0;
- };
+ USBSerial(uint16_t vendor_id = 0x1f00, uint16_t product_id = 0x2012, uint16_t product_release = 0x0001): USBCDC(vendor_id, product_id, product_release), buf(128){ };
/**
@@ -68,39 +65,23 @@
* @returns true if there is no error, false otherwise
*/
virtual int _putc(int c);
-
+
/**
* Read a character: blocking
*
* @returns character read
*/
virtual int _getc();
-
+
/**
* Check the number of bytes available.
*
* @returns the number of bytes available
*/
- uint8_t available();
-
- /** Determine if there is a character available to read
- *
- * @returns
- * 1 if there is a character available to read,
- * 0 otherwise
- */
- int readable() { return available() ? 1 : 0; }
-
- /** Determine if there is space available to write a character
- *
- * @returns
- * 1 if there is space to write a character,
- * 0 otherwise
- */
- int writeable() { return 1; } // always return 1, for write operation is blocking
-
+ uint8_t available();
+
/**
- * Write a block of data.
+ * Write a block of data.
*
* For more efficiency, a block of size 64 (maximum size of a bulk endpoint) has to be written.
*
@@ -112,7 +93,7 @@
bool writeBlock(uint8_t * buf, uint16_t size);
/**
- * Attach a member function to call when a packet is received.
+ * Attach a member function to call when a packet is received.
*
* @param tptr pointer to the object to call the member function on
* @param mptr pointer to the member function to be called
@@ -129,33 +110,19 @@
*
* @param fptr function pointer
*/
- void attach(void (*fptr)(void)) {
- if(fptr != NULL) {
- rx.attach(fptr);
+ void attach(void (*fn)(void)) {
+ if(fn != NULL) {
+ rx.attach(fn);
}
}
- /**
- * Attach a callback to call when serial's settings are changed.
- *
- * @param fptr function pointer
- */
- void attach(void (*fptr)(int baud, int bits, int parity, int stop)) {
- settingsChangedCallback = fptr;
- }
protected:
- virtual bool EPBULK_OUT_callback();
- virtual void lineCodingChanged(int baud, int bits, int parity, int stop){
- if (settingsChangedCallback) {
- settingsChangedCallback(baud, bits, parity, stop);
- }
- }
+ virtual bool EP2_OUT_callback();
private:
FunctionPointer rx;
- CircBuffer<uint8_t,128> buf;
- void (*settingsChangedCallback)(int baud, int bits, int parity, int stop);
+ CircBuffer<uint8_t> buf;
};
#endif
