* arch/arm/src/samd2l2/hardware/saml_usb.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
* "Atmel SAM L21E / SAM L21G / SAM L21J Smart ARM-Based Microcontroller
* Datasheet", Atmel-42385C-SAML21_Datasheet_Preliminary-03/20/15
*/
#ifndef __ARCH_ARM_SRC_SAMD2L2_HARDWARE_SAML_USB_H
#define __ARCH_ARM_SRC_SAMD2L2_HARDWARE_SAML_USB_H
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include "chip.h"
#if defined(CONFIG_ARCH_FAMILY_SAML21) || defined(CONFIG_ARCH_FAMILY_SAMD21)
* Pre-processor Definitions
****************************************************************************/
* --- --------- --------- ---------
* 0 2 64/1023 Control/Bulk/Iso/Interrupt
* 1 2 64/1023 Control/Bulk/Iso/Interrupt
* 2 2 64/1023 Control/Bulk/Iso/Interrupt
* 3 2 64/1023 Control/Bulk/Iso/Interrupt
* 4 2 64/1023 Control/Bulk/Iso/Interrupt
* 5 2 64/1023 Control/Bulk/Iso/Interrupt
* 6 2 64/1023 Control/Bulk/Iso/Interrupt
* 7 2 64/1023 Control/Bulk/Iso/Interrupt
*/
#define SAM_USB_NENDPOINTS (8)
#define SAM_USB_MAXPACKETSIZE(ep) (64)
#define SAM_USB_NBANKS(ep) (2)
#define SAM_USB_CONTROL(ep) (true)
#define SAM_USB_BULK(ep) (true)
#define SAM_USB_ISOCHRONOUS(ep) (true)
#define SAM_USB_INTERRUPT(ep) (true)
#define SAM_USB_CTRLA_OFFSET 0x0000
#define SAM_USB_SYNCBUSY_OFFSET 0x0002
#define SAM_USB_QOSCTRL_OFFSET 0x0003
#define SAM_USB_FSMSTATUS_OFFSET 0x000d
#define SAM_USB_DESCADD_OFFSET 0x0024
#define SAM_USB_PADCAL_OFFSET 0x0028
#define SAM_USBDEV_CTRLB_OFFSET 0x0008
#define SAM_USBDEV_DADD_OFFSET 0x000a
#define SAM_USBDEV_STATUS_OFFSET 0x000c
#define SAM_USBDEV_FNUM_OFFSET 0x0010
#define SAM_USBDEV_INTENCLR_OFFSET 0x0014
#define SAM_USBDEV_INTENSET_OFFSET 0x0018
#define SAM_USBDEV_INTFLAG_OFFSET 0x001c
#define SAM_USBDEV_EPINTSMRY_OFFSET 0x0020
#define SAM_USBDEV_EP_OFFSET(n) (0x0100 + ((n) << 5))
#define SAM_USBDEV_EPCFG_OFFSET 0x0000
#define SAM_USBDEV_EPSTATUSCLR_OFFSET 0x0004
#define SAM_USBDEV_EPSTATUSSET_OFFSET 0x0005
#define SAM_USBDEV_EPSTATUS_OFFSET 0x0006
#define SAM_USBDEV_EPINTFLAG_OFFSET 0x0007
#define SAM_USBDEV_EPINTENCLR_OFFSET 0x0008
#define SAM_USBDEV_EPINTENSET_OFFSET 0x0009
#define SAM_USBDEV_EPnCFG_OFFSET(n) (SAM_USBDEV_EP_OFFSET(n)+SAM_USBDEV_EPCFG_OFFSET)
#define SAM_USBDEV_EPnSTATUSCLR_OFFSET(n) (SAM_USBDEV_EP_OFFSET(n)+SAM_USBDEV_EPSTATUSCLR_OFFSET)
#define SAM_USBDEV_EPnSTATUSSET_OFFSET(n) (SAM_USBDEV_EP_OFFSET(n)+SAM_USBDEV_EPSTATUSSET_OFFSET)
#define SAM_USBDEV_EPnSTATUS_OFFSET(n) (SAM_USBDEV_EP_OFFSET(n)+SAM_USBDEV_EPSTATUS_OFFSET)
#define SAM_USBDEV_EPnINTFLAG_OFFSET(n) (SAM_USBDEV_EP_OFFSET(n)+SAM_USBDEV_EPINTFLAG_OFFSET)
#define SAM_USBDEV_EPnINTENCLR_OFFSET(n) (SAM_USBDEV_EP_OFFSET(n)+SAM_USBDEV_EPINTENCLR_OFFSET)
#define SAM_USBDEV_EPnINTENSET_OFFSET(n) (SAM_USBDEV_EP_OFFSET(n)+SAM_USBDEV_EPINTENSET_OFFSET)
#define SAM_USBDEV_ADDR_OFFSET 0x0000
#define SAM_USBDEV_PKTSIZE_OFFSET 0x0004
#define SAM_USBDEV_EXTREG_OFFSET 0x0008
#define SAM_USBDEV_STATUSBK_OFFSET 0x000a
#define SAM_USBHOST_CTRLB_OFFSET 0x0008
#define SAM_USBHOST_HSOFC_OFFSET 0x000a
#define SAM_USBHOST_STATUS_OFFSET 0x000c
#define SAM_USBHOST_FNUM_OFFSET 0x0010
#define SAM_USBHOST_FLENHIGH_OFFSET 0x0012
#define SAM_USBHOST_INTENCLR_OFFSET 0x0014
#define SAM_USBHOST_INTENSET_OFFSET 0x0018
#define SAM_USBHOST_INTFLAG_OFFSET 0x001c
#define SAM_USBHOST_PINTSMRY_OFFSET 0x0020
#define SAM_USBHOST_PIPE_OFFSET(n) (0x0100 + ((n) << 4))
#define SAM_USBHOST_PCFG_OFFSET 0x0000
#define SAM_USBHOST_BINTERVAL_OFFSET 0x0003
#define SAM_USBHOST_PSTATUSCLR_OFFSET 0x0004
#define SAM_USBHOST_PSTATUSET_OFFSET 0x0005
#define SAM_USBHOST_PSTATUS_OFFSET 0x0006
#define SAM_USBHOST_PINTFLAG_OFFSET 0x0007
#define SAM_USBHOST_PINTENCLR_OFFSET 0x0008
#define SAM_USBHOST_PINTENSET_OFFSET 0x0009
#define SAM_USBHOST_PnCFG_OFFSET(n) (SAM_USBHOST_PIPE_OFFSET(n)+SAM_USBHOST_PCFG_OFFSET)
#define SAM_USBHOST_BINTERVALn_OFFSET(n) (SAM_USBHOST_PIPE_OFFSET(n)+SAM_USBHOST_BINTERVAL_OFFSET)
#define SAM_USBHOST_PnSTATUSCLR_OFFSET(n) (SAM_USBHOST_PIPE_OFFSET(n)+SAM_USBHOST_PSTATUSCLR_OFFSET)
#define SAM_USBHOST_PnSTATUSET_OFFSET(n) (SAM_USBHOST_PIPE_OFFSET(n)+SAM_USBHOST_PSTATUSET_OFFSET)
#define SAM_USBHOST_PnSTATUS_OFFSET(n) (SAM_USBHOST_PIPE_OFFSET(n)+SAM_USBHOST_PSTATUS_OFFSET)
#define SAM_USBHOST_PnINTFLAG_OFFSET(n) (SAM_USBHOST_PIPE_OFFSET(n)+SAM_USBHOST_PINTFLAG_OFFSET)
#define SAM_USBHOST_PnINTENCLR_OFFSET(n) (SAM_USBHOST_PIPE_OFFSET(n)+SAM_USBHOST_PINTENCLR_OFFSET)
#define SAM_USBHOST_PnINTENSET_OFFSET(n) (SAM_USBHOST_PIPE_OFFSET(n)+SAM_USBHOST_PINTENSET_OFFSET)
#define SAM_USBHOST_ADDR_OFFSET 0x0000
#define SAM_USBHOST_PKTSIZE_OFFSET 0x0004
#define SAM_USBHOST_EXTREG_OFFSET 0x0008
#define SAM_USBHOST_STATUSBK_OFFSET 0x000a
#define SAM_USBHOST_CTRLPIPE_OFFSET 0x000c
#define SAM_USBHOST_STATUSPIPE_OFFSET 0x000e
#define SAM_USB_CTRLA (SAM_USB_BASE+SAM_USB_CTRLA_OFFSET)
#define SAM_USB_SYNCBUSY (SAM_USB_BASE+SAM_USB_SYNCBUSY_OFFSET)
#define SAM_USB_QOSCTRL (SAM_USB_BASE+SAM_USB_QOSCTRL_OFFSET)
#define SAM_USB_FSMSTATUS (SAM_USB_BASE+SAM_USB_FSMSTATUS_OFFSET)
#define SAM_USB_DESCADD (SAM_USB_BASE+SAM_USB_DESCADD_OFFSET)
#define SAM_USB_PADCAL (SAM_USB_BASE+SAM_USB_PADCAL_OFFSET)
#define SAM_USBDEV_CTRLB (SAM_USB_BASE+SAM_USBDEV_CTRLB_OFFSET)
#define SAM_USBDEV_DADD (SAM_USB_BASE+SAM_USBDEV_DADD_OFFSET)
#define SAM_USBDEV_STATUS (SAM_USB_BASE+SAM_USBDEV_STATUS_OFFSET)
#define SAM_USBDEV_FNUM (SAM_USB_BASE+SAM_USBDEV_FNUM_OFFSET)
#define SAM_USBDEV_INTENCLR (SAM_USB_BASE+SAM_USBDEV_INTENCLR_OFFSET)
#define SAM_USBDEV_INTENSET (SAM_USB_BASE+SAM_USBDEV_INTENSET_OFFSET)
#define SAM_USBDEV_INTFLAG (SAM_USB_BASE+SAM_USBDEV_INTFLAG_OFFSET)
#define SAM_USBDEV_EPINTSMRY (SAM_USB_BASE+SAM_USBDEV_EPINTSMRY_OFFSET)
#define SAM_USBDEV_EP_BASE(n) (SAM_USB_BASE+SAM_USBDEV_EP_OFFSET(n))
#define SAM_USBDEV_EPCFG(n) (SAM_USBDEV_EP_BASE(n)+SAM_USBDEV_EPCFG_OFFSET)
#define SAM_USBDEV_EPSTATUSCLR(n) (SAM_USBDEV_EP_BASE(n)+SAM_USBDEV_EPSTATUSCLR_OFFSET)
#define SAM_USBDEV_EPSTATUSSET(n) (SAM_USBDEV_EP_BASE(n)+SAM_USBDEV_EPSTATUSSET_OFFSET)
#define SAM_USBDEV_EPSTATUS(n) (SAM_USBDEV_EP_BASE(n)+SAM_USBDEV_EPSTATUS_OFFSET)
#define SAM_USBDEV_EPINTFLAG(n) (SAM_USBDEV_EP_BASE(n)+SAM_USBDEV_EPINTFLAG_OFFSET)
#define SAM_USBDEV_EPINTENCLR(n) (SAM_USBDEV_EP_BASE(n)+SAM_USBDEV_EPINTENCLR_OFFSET)
#define SAM_USBDEV_EPINTENSET(n) (SAM_USBDEV_EP_BASE(n)+SAM_USBDEV_EPINTENSET_OFFSET)
#define SAM_USBHOST_CTRLB (SAM_USB_BASE+SAM_USBHOST_CTRLB_OFFSET)
#define SAM_USBHOST_HSOFC (SAM_USB_BASE+SAM_USBHOST_HSOFC_OFFSET)
#define SAM_USBHOST_STATUS (SAM_USB_BASE+SAM_USBHOST_STATUS_OFFSET)
#define SAM_USBHOST_FNUM (SAM_USB_BASE+SAM_USBHOST_FNUM_OFFSET)
#define SAM_USBHOST_FLENHIGH (SAM_USB_BASE+SAM_USBHOST_FLENHIGH_OFFSET)
#define SAM_USBHOST_INTENCLR (SAM_USB_BASE+SAM_USBHOST_INTENCLR_OFFSET)
#define SAM_USBHOST_INTENSET (SAM_USB_BASE+SAM_USBHOST_INTENSET_OFFSET)
#define SAM_USBHOST_INTFLAG (SAM_USB_BASE+SAM_USBHOST_INTFLAG_OFFSET)
#define SAM_USBHOST_PINTSMRY (SAM_USB_BASE+SAM_USBHOST_PINTSMRY_OFFSET)
#define SAM_USBHOST_PIPE_BASE(n) (SAM_USB_BASE+SAM_USBHOST_PIPE_OFFSET(n))
#define SAM_USBHOST_PCFG(n) (SAM_USBHOST_PIPE_BASE(n)+SAM_USBHOST_PCFG_OFFSET)
#define SAM_USBHOST_BINTERVAL(n) (SAM_USBHOST_PIPE_BASE(n)+SAM_USBHOST_BINTERVAL_OFFSET)
#define SAM_USBHOST_PSTATUSCLR(n) (SAM_USBHOST_PIPE_BASE(n)+SAM_USBHOST_PSTATUSCLR_OFFSET)
#define SAM_USBHOST_PSTATUSET(n) (SAM_USBHOST_PIPE_BASE(n)+SAM_USBHOST_PSTATUSET_OFFSET)
#define SAM_USBHOST_PSTATUS(n) (SAM_USBHOST_PIPE_BASE(n)+SAM_USBHOST_PSTATUS_OFFSET)
#define SAM_USBHOST_PINTFLAG(n) (SAM_USBHOST_PIPE_BASE(n)+SAM_USBHOST_PINTFLAG_OFFSET)
#define SAM_USBHOST_PINTENCLR(n) (SAM_USBHOST_PIPE_BASE(n)+SAM_USBHOST_PINTENCLR_OFFSET)
#define SAM_USBHOST_PINTENSET(n) (SAM_USBHOST_PIPE_BASE(n)+SAM_USBHOST_PINTENSET_OFFSET)
#define USB_CTRLA_SWRST (1 << 0)
#define USB_CTRLA_ENABLE (1 << 1)
#define USB_CTRLA_RUNSTBY (1 << 2)
#define USB_CTRLA_MODE (1 << 7)
# define USB_CTRLA_MODE_DEVICE (0)
# define USB_CTRLA_MODE_HOST (1 << 7)
#define USB_SYNCBUSY_SWRST (1 << 0)
#define USB_SYNCBUSY_ENABLE (1 << 1)
#define USB_QOSCTRL_CQOS_SHIFT (0)
#define USB_QOSCTRL_CQOS_MASK (3 << USB_QOSCTRL_CQOS_SHIFT)
# define USB_QOSCTRL_CQOS(n) ((uint8_t)(n) << USB_QOSCTRL_CQOS_SHIFT)
#define USB_QOSCTRL_DQOS_SHIFT (2)
#define USB_QOSCTRL_DQOS_MASK (3 << USB_QOSCTRL_DQOS_SHIFT)
# define USB_QOSCTRL_DQOS(n) ((uint8_t)(n) << USB_QOSCTRL_DQOS_SHIFT)
#define USB_FSMSTATUS_SHIFT (0)
#define USB_FSMSTATUS_MASK (0x7f << USB_FSMSTATUS_SHIFT)
# define USB_FSMSTATUS_OFF (0x01 << USB_FSMSTATUS_SHIFT)
# define USB_FSMSTATUS_ON (0x02 << USB_FSMSTATUS_SHIFT)
# define USB_FSMSTATUS_SUSPEND (0x04 << USB_FSMSTATUS_SHIFT)
# define USB_FSMSTATUS_SLEEP (0x08 << USB_FSMSTATUS_SHIFT)
# define USB_FSMSTATUS_DNRESUME (0x10 << USB_FSMSTATUS_SHIFT)
# define USB_FSMSTATUS_UPRESUME (0x20 << USB_FSMSTATUS_SHIFT)
# define USB_FSMSTATUS_RESET (0x40 << USB_FSMSTATUS_SHIFT)
#define USB_PADCAL_TRANSP_SHIFT (0)
#define USB_PADCAL_TRANSP_MASK (31 << USB_PADCAL_TRANSP_SHIFT)
# define USB_PADCAL_TRANSP(n) ((uint16_t)(n) << USB_PADCAL_TRANSP_SHIFT)
#define USB_PADCAL_TRANSN_SHIFT (6)
#define USB_PADCAL_TRANSN_MASK (31 << USB_PADCAL_TRANSN_SHIFT)
# define USB_PADCAL_TRANSN(n) ((uint16_t)(n) << USB_PADCAL_TRANSN_SHIFT)
#define USB_PADCAL_TRIM_SHIFT (12)
#define USB_PADCAL_TRIM_MASK (7 << USB_PADCAL_TRIM_SHIFT)
# define USB_PADCAL_TRIM(n) ((uint16_t)(n) << USB_PADCAL_TRIM_SHIFT)
#define USBDEV_CTRLB_DETACH (1 << 0)
#define USBDEV_CTRLB_UPRSM (1 << 1)
#define USBDEV_CTRLB_SPDCONF_SHIFT (2)
#define USBDEV_CTRLB_SPDCONF_MASK (3 << USBDEV_CTRLB_SPDCONF_SHIFT)
# define USBDEV_CTRLB_SPDCONF_FULL (0 << USBDEV_CTRLB_SPDCONF_SHIFT)
# define USBDEV_CTRLB_SPDCONF_LOW (1 << USBDEV_CTRLB_SPDCONF_SHIFT)
# define USBDEV_CTRLB_SPDCONF_HIGH (2 << USBDEV_CTRLB_SPDCONF_SHIFT)
# define USBDEV_CTRLB_SPDCONF_HIGH_TM (3 << USBDEV_CTRLB_SPDCONF_SHIFT)
#define USBDEV_CTRLB_NREPLY (1 << 4)
#define USBDEV_CTRLB_GNAK (1 << 9)
#define USBDEV_CTRLB_LPMHDSK_SHIFT (10)
#define USBDEV_CTRLB_LPMHDSK_MASK (3 << USBDEV_CTRLB_LPMHDSK_SHIFT)
# define USBDEV_CTRLB_LPMHDSK_NONE (0 << USBDEV_CTRLB_LPMHDSK_SHIFT)
# define USBDEV_CTRLB_LPMHDSK_ACK (1 << USBDEV_CTRLB_LPMHDSK_SHIFT)
# define USBDEV_CTRLB_LPMHDSK_NYET (2 << USBDEV_CTRLB_LPMHDSK_SHIFT)
#define USBDEV_DADD_SHIFT (0)
#define USBDEV_DADD_MASK (0x7f << USBDEV_DADD_SHIFT)
# define USBDEV_DADD(n) ((uint8_t)(n) << USBDEV_DADD_SHIFT)
#define USBDEV_DADD_ADDEN (1 << 7)
#define USBDEV_STATUS_SPEED_SHIFT (0)
#define USBDEV_STATUS_SPEED_MASK (3 << USBDEV_STATUS_SPEED_SHIFT)
# define USBDEV_STATUS_SPEED_LOW (0 << USBDEV_STATUS_SPEED_SHIFT)
# define USBDEV_STATUS_SPEED_FULL (1 << USBDEV_STATUS_SPEED_SHIFT)
#define USBDEV_STATUS_LNSTATE_SHIFT (6)
#define USBDEV_STATUS_LNSTATE_MASK (3 << USBDEV_STATUS_LNSTATE_SHIFT)
# define USBDEV_STATUS_LNSTATE_SE0 (0 << USBDEV_STATUS_LNSTATE_SHIFT)
# define USBDEV_STATUS_LNSTATE_LJFK (1 << USBDEV_STATUS_LNSTATE_SHIFT)
# define USBDEV_STATUS_LNSTATE_LKFJ (2 << USBDEV_STATUS_LNSTATE_SHIFT)
#define USBDEV_MFNUM_SHIFT (0)
#define USBDEV_MFNUM_MASK (7 << USBDEV_MFNUM_SHIFT)
#define USBDEV_FNUM_SHIFT (3)
#define USBDEV_FNUM_MASK (0x7ff << USBDEV_FNUM_SHIFT)
#define USBDEV_FNUM_FNCERR (1 << 15)
* interrupt Enable Set Register, and SAM_USBDEV_INTFLAG_OFFSET
*/
#define USBDEV_INT_SUSPEND (1 << 0)
#define USBDEV_INT_SOF (1 << 2)
#define USBDEV_INT_EORST (1 << 3)
#define USBDEV_INT_WAKEUP (1 << 4)
#define USBDEV_INT_EORSM (1 << 5)
#define USBDEV_INT_UPRSM (1 << 6)
#define USBDEV_INT_RAMACER (1 << 7)
#define USBDEV_INT_LPMNYET (1 << 8)
#define USBDEV_INT_LPMSUSP (1 << 9)
#define USBDEV_EPINTSMRY_EPINT(n) (1 << (n))
#define USBDEV_EPCFG_EPTYPE0_SHIFT (0)
#define USBDEV_EPCFG_EPTYPE0_MASK (7 << USBDEV_EPCFG_EPTYPE0_SHIFT)
# define USBDEV_EPCCFG_EPTYPE0_DISABLED (0 << USBDEV_EPCFG_EPTYPE0_SHIFT)
# define USBDEV_EPCCFG_EPTYPE0_CTRLOUT (1 << USBDEV_EPCFG_EPTYPE0_SHIFT)
# define USBDEV_EPCCFG_EPTYPE0_ISOCOUT (2 << USBDEV_EPCFG_EPTYPE0_SHIFT)
# define USBDEV_EPCCFG_EPTYPE0_BULKOUT (3 << USBDEV_EPCFG_EPTYPE0_SHIFT)
# define USBDEV_EPCCFG_EPTYPE0_INTOUT (4 << USBDEV_EPCFG_EPTYPE0_SHIFT)
# define USBDEV_EPCCFG_EPTYPE0_DBIN (5 << USBDEV_EPCFG_EPTYPE0_SHIFT)
#define USBDEV_EPCFG_EPTYPE1_SHIFT (4)
#define USBDEV_EPCFG_EPTYPE1_MASK (7 << USBDEV_EPCFG_EPTYPE1_SHIFT)
# define USBDEV_EPCCFG_EPTYPE1_DISABLED (0 << USBDEV_EPCFG_EPTYPE1_SHIFT)
# define USBDEV_EPCCFG_EPTYPE1_CTRLIN (1 << USBDEV_EPCFG_EPTYPE1_SHIFT)
# define USBDEV_EPCCFG_EPTYPE1_ISOCIN (2 << USBDEV_EPCFG_EPTYPE1_SHIFT)
# define USBDEV_EPCCFG_EPTYPE1_BULKIN (3 << USBDEV_EPCFG_EPTYPE1_SHIFT)
# define USBDEV_EPCCFG_EPTYPE1_INTIN (4 << USBDEV_EPCFG_EPTYPE1_SHIFT)
# define USBDEV_EPCCFG_EPTYPE1_DBOUT (5 << USBDEV_EPCFG_EPTYPE1_SHIFT)
* Register, and Endpoint Status Set Register
*/
#define USBDEV_EPSTATUS_DTGLOUT (1 << 0)
#define USBDEV_EPSTATUS_DTGLIN (1 << 1)
#define USBDEV_EPSTATUS_CURBK (1 << 2)
#define USBDEV_EPSTATUS_STALLRQ0 (1 << 4)
#define USBDEV_EPSTATUS_STALLRQ1 (1 << 5)
#define USBDEV_EPSTATUS_BK0RDY (1 << 6)
#define USBDEV_EPSTATUS_BK1RDY (1 << 7)
* Endpoint Interrupt Enable Register, and Device Endpoint Interrupt Set
* Register
*/
#define USBDEV_EPINT_TRCPT0 (1 << 0)
#define USBDEV_EPINT_TRCPT1 (1 << 1)
#define USBDEV_EPINT_TRFAIL0 (1 << 2)
#define USBDEV_EPINT_TRFAIL1 (1 << 3)
#define USBDEV_EPINT_RXSTP (1 << 4)
#define USBDEV_EPINT_STALL0 (1 << 5)
#define USBDEV_EPINT_STALL1 (1 << 6)
#define USBDEV_PKTSIZE_BCNT_SHIFT (0)
#define USBDEV_PKTSIZE_BCNT_MASK (0x3fff << USBDEV_PKTSIZE_BCNT_SHIFT)
# define USBDEV_PKTSIZE_BCNT(n) ((uint32_t)(n) << USBDEV_PKTSIZE_BCNT_SHIFT)
#define USBDEV_PKTSIZE_MPKTSIZE_SHIFT (14)
#define USBDEV_PKTSIZE_MPKTSIZE_MASK (0x3fff << USBDEV_PKTSIZE_MPKTSIZE_SHIFT)
# define USBDEV_PKTSIZE_MPKTSIZE(n) ((uint32_t)(n) << USBDEV_PKTSIZE_MPKTSIZE_SHIFT)
#define USBDEV_PKTSIZE_SIZE_SHIFT (28)
#define USBDEV_PKTSIZE_SIZE_MASK (7 << USBDEV_PKTSIZE_SIZE_SHIFT)
# define USBDEV_PKTSIZE_SIZE_8B (0 << USBDEV_PKTSIZE_SIZE_SHIFT)
# define USBDEV_PKTSIZE_SIZE_16B (1 << USBDEV_PKTSIZE_SIZE_SHIFT)
# define USBDEV_PKTSIZE_SIZE_32B (2 << USBDEV_PKTSIZE_SIZE_SHIFT)
# define USBDEV_PKTSIZE_SIZE_64B (3 << USBDEV_PKTSIZE_SIZE_SHIFT)
# define USBDEV_PKTSIZE_SIZE_128B (4 << USBDEV_PKTSIZE_SIZE_SHIFT)
# define USBDEV_PKTSIZE_SIZE_256B (5 << USBDEV_PKTSIZE_SIZE_SHIFT)
# define USBDEV_PKTSIZE_SIZE_512B (6 << USBDEV_PKTSIZE_SIZE_SHIFT)
# define USBDEV_PKTSIZE_SIZE_1023B (7 << USBDEV_PKTSIZE_SIZE_SHIFT)
#define USBDEV_PKTSIZE_AUTOZLP (1 << 31)
#define USBDEV_EXTREG_SUBPID_SHIFT (0)
#define USBDEV_EXTREG_SUBPID_MASK (15 << USBDEV_EXTREG_SUBPID_SHIFT)
# define USBDEV_EXTREG_SUBPID(n) ((uint16_t)(n) << USBDEV_EXTREG_SUBPID_SHIFT)
#define USBDEV_EXTREG_VARIABLE_SHIFT (4)
#define USBDEV_EXTREG_VARIABLE_MASK (0x7ff << USBDEV_EXTREG_VARIABLE_SHIFT)
# define USBDEV_EXTREG_VARIABLE(n) ((uint16_t)(n) << USBDEV_EXTREG_VARIABLE_SHIFT)
#define USBDEV_STATUSBK_CRCERR (1 << 0)
#define USBDEV_STATUSBK_ERRORFLOW (1 << 1)
#define USBHOST_CTRLB_RESUME (1 << 1)
#define USBHOST_CTRLB_SPDCONF_SHIFT (2)
#define USBHOST_CTRLB_SPDCONF_MASK (3 << USBHOST_CTRLB_SPDCONF_SHIFT)
# define USBHOST_CTRLB_SPDCONF_LF (0 << USBHOST_CTRLB_SPDCONF_SHIFT)
#define USBHOST_CTRLB_TSTJ (1 << 5)
#define USBHOST_CTRLB_TSTK (1 << 6)
#define USBHOST_CTRLB_SOFE (1 << 8)
#define USBHOST_CTRLB_BUSRESET (1 << 9)
#define USBHOST_CTRLB_VBUSOK (1 << 10)
#define USBHOST_CTRLB_L1RESUME (1 << 11)
#define USBHOST_HSOFC_FLENC_SHIFT (0)
#define USBHOST_HSOFC_FLENC_MASK (15 << USBHOST_HSOFC_FLENC_SHIFT)
# define USBHOST_HSOFC_FLENC(n) ((uint8_t)(n) << USBHOST_HSOFC_FLENC_SHIFT)
#define USBHOST_HSOFC_FLENCE (1 << 7)
#define USBHOST_STATUS_SPEED_SHIFT (0)
#define USBHOST_STATUS_SPEED_MASK (3 << USBHOST_STATUS_SPEED_SHIFT)
# define USBHOST_STATUS_SPEED_LOW (0 << USBHOST_STATUS_SPEED_SHIFT)
# define USBHOST_STATUS_SPEED_FULL (2 << USBHOST_STATUS_SPEED_SHIFT)
#define USBHOST_STATUS_LNSTATE_SHIFT (6)
#define USBHOST_STATUS_LNSTATE_MASK (3 << USBHOST_STATUS_LNSTATE_SHIFT)
# define USBHOST_STATUS_LNSTATE_SE0 (0 << USBHOST_STATUS_LNSTATE_SHIFT)
# define USBHOST_STATUS_LNSTATE_FJLK (1 << USBHOST_STATUS_LNSTATE_SHIFT)
# define USBHOST_STATUS_LNSTATE_FKLJ (2 << USBHOST_STATUS_LNSTATE_SHIFT)
#define USBHOST_FNUM_SHIFT (3)
#define USBHOST_FNUM_MASK (0x07ff << USBHOST_FNUM_SHIFT)
* Interrupt Enable Set Register, and Host Interrupt Flag Status and
* Clear Register
*/
#define USBHOST_INT_HSOF (1 << 2)
#define USBHOST_INT_RST (1 << 3)
#define USBHOST_INT_WAKEUP (1 << 4)
#define USBHOST_INT_DNRSM (1 << 5)
#define USBHOST_INT_UPRSM (1 << 6)
#define USBHOST_INT_RAMACER (1 << 7)
#define USBHOST_INT_DCONN (1 << 8)
#define USBHOST_INT_DDISC (1 << 9)
#define USBHOST_PINTSMRY_PIPEINT(n) (1 << (n))
#define USBHOST_PCFG_PTOKEN_SHIFT (0)
#define USBHOST_PCFG_PTOKEN_MASK (3 << USBHOST_PCFG_PTOKEN_SHIFT)
# define USBHOST_PCFG_PTOKEN_SETUP (0 << USBHOST_PCFG_PTOKEN_SHIFT)
# define USBHOST_PCFG_PTOKEN_IN (1 << USBHOST_PCFG_PTOKEN_SHIFT)
# define USBHOST_PCFG_PTOKEN_OUT (2 << USBHOST_PCFG_PTOKEN_SHIFT)
#define USBHOST_PCFG_BK (1 << 2)
# define USBHOST_PCFG_BK_SINGLE (0)
# define USBHOST_PCFG_BK_DUAL (1 << 2)
#define USBHOST_PCFG_PTYPE_SHIFT (3)
#define USBHOST_PCFG_PTYPE_MASK (7 << USBHOST_PCFG_PTYPE_SHIFT)
# define USBHOST_PCFG_PTYPE_DISABLED (0 << USBHOST_PCFG_PTYPE_SHIFT)
# define USBHOST_PCFG_PTYPE_CTRL (1 << USBHOST_PCFG_PTYPE_SHIFT)
# define USBHOST_PCFG_PTYPE_ISOC (2 << USBHOST_PCFG_PTYPE_SHIFT)
# define USBHOST_PCFG_PTYPE_BULK (3 << USBHOST_PCFG_PTYPE_SHIFT)
# define USBHOST_PCFG_PTYPE_INT (4 << USBHOST_PCFG_PTYPE_SHIFT)
# define USBHOST_PCFG_PTYPE_EXTENDED (5 << USBHOST_PCFG_PTYPE_SHIFT)
* Register, and Pipe Status Register
*/
#define USBHOST_PSTATUS_DTGL (1 << 0)
#define USBHOST_PSTATUS_CURBK (1 << 2)
#define USBHOST_PSTATUS_PFREEZE (1 << 4)
#define USBHOST_PSTATUS_BK0RDY (1 << 6)
#define USBHOST_PSTATUS_BK1RDY (1 << 7)
* Interrupt Clear Register, and Host Pipe Interrupt Set Register
*/
#define USBHOST_PINTFLAG_TRCPT0 (1 << 0)
#define USBHOST_PINTFLAG_TRCPT1 (1 << 1)
#define USBHOST_PINTFLAG_TRFAIL (1 << 2)
#define USBHOST_PINTFLAG_PERR (1 << 3)
#define USBHOST_PINTFLAG_TXSTP (1 << 4)
#define USBHOST_PINTFLAG_STALL (1 << 5)
#define USBHOST_PKTSIZE_BCNT_SHIFT (8)
#define USBHOST_PKTSIZE_BCNT_MASK (0x3f << USBHOST_PKTSIZE_BCNT_SHIFT)
# define USBHOST_PKTSIZE_BCNT(n) ((uint32_t)(n) << USBHOST_PKTSIZE_BCNT_SHIFT)
#define USBHOST_PKTSIZE_MPKTSIZE_SHIFT (14)
#define USBHOST_PKTSIZE_MPKTSIZE_MASK (0x3fff << USBHOST_PKTSIZE_MPKTSIZE_SHIFT)
# define USBHOST_PKTSIZE_MPKTSIZE(n) ((uint32_t)(n) << USBHOST_PKTSIZE_MPKTSIZE_SHIFT)
#define USBHOST_PKTSIZE_SIZE_SHIFT (28)
#define USBHOST_PKTSIZE_SIZE_MASK (7 << USBHOST_PKTSIZE_SIZE_SHIFT)
# define USBHOST_PKTSIZE_SIZE_8B (0 << USBHOST_PKTSIZE_SIZE_SHIFT)
# define USBHOST_PKTSIZE_SIZE_16B (1 << USBHOST_PKTSIZE_SIZE_SHIFT)
# define USBHOST_PKTSIZE_SIZE_32B (2 << USBHOST_PKTSIZE_SIZE_SHIFT)
# define USBHOST_PKTSIZE_SIZE_64B (3 << USBHOST_PKTSIZE_SIZE_SHIFT)
# define USBHOST_PKTSIZE_SIZE_128B (4 << USBHOST_PKTSIZE_SIZE_SHIFT)
# define USBHOST_PKTSIZE_SIZE_256B (5 << USBHOST_PKTSIZE_SIZE_SHIFT)
# define USBHOST_PKTSIZE_SIZE_512B (6 << USBHOST_PKTSIZE_SIZE_SHIFT)
# define USBHOST_PKTSIZE_SIZE_1023B (7 << USBHOST_PKTSIZE_SIZE_SHIFT)
#define USBHOST_PKTSIZE_AUTOZLP (1 << 31)
#define USBHOST_EXTREG_SUBPID_SHIFT (0)
#define USBHOST_EXTREG_SUBPID_MASK (15 << USBHOST_EXTREG_SUBPID_SHIFT)
# define USBHOST_EXTREG_SUBPID(n) ((uint16_t)(n) << USBHOST_EXTREG_SUBPID_SHIFT)
#define USBHOST_EXTREG_VARIABLE_SHIFT (4)
#define USBHOST_EXTREG_VARIABLE_MASK (0x7ff << USBHOST_EXTREG_VARIABLE_SHIFT)
# define USBHOST_EXTREG_VARIABLE(n) ((uint16_t)(n) << USBHOST_EXTREG_VARIABLE_SHIFT)
#define USBHOST_STATUSBK_CRCERR (1 << 0)
#define USBHOST_STATUSBK_ERRORFLOW (1 << 1)
#define USBHOST_CTRLPIPE_PDADDR_SHIFT (0)
#define USBHOST_CTRLPIPE_PDADDR_MASK (0x7f << USBHOST_CTRLPIPE_PDADDR_SHIFT)
# define USBHOST_CTRLPIPE_PDADDR(n) ((uint16_t)(n) << USBHOST_CTRLPIPE_PDADDR_SHIFT)
#define USBHOST_CTRLPIPE_PEPNUM_SHIFT (8)
#define USBHOST_CTRLPIPE_PEPNUM_MASK (15 << USBHOST_CTRLPIPE_PEPNUM_SHIFTxx)
# define USBHOST_CTRLPIPE_PEPNUM(n) ((uint16_t)(n) << USBHOST_CTRLPIPE_PEPNUM_SHIFTxx)
#define USBHOST_CTRLPIPE_PEPMAX_SHIFT (12)
#define USBHOST_CTRLPIPE_PEPMAX_MASK (15 << USBHOST_CTRLPIPE_PEPMAX_SHIFT)
# define USBHOST_CTRLPIPE_PEPMAX(n) ((uint16_t)(n) << USBHOST_CTRLPIPE_PEPMAX_SHIFT)
#define USBHOST_STATUSPIPE_DTGLER (1 << 0)
#define USBHOST_STATUSPIPE_DAPIDER (1 << 1)
#define USBHOST_STATUSPIPE_PIDER (1 << 2)
#define USBHOST_STATUSPIPE_TOUTER (1 << 3)
#define USBHOST_STATUSPIPE_CRC16ER (1 << 4)
#define USBHOST_STATUSPIPE_ERCNT_SHIFT (5)
#define USBHOST_STATUSPIPE_ERCNT_MASK (7 << USBHOST_STATUSPIPE_ERCNT_SHIFT)
# define USBHOST_STATUSPIPE_ERCNT(n) ((uint16_t)(n) << USBHOST_STATUSPIPE_ERCNT_SHIFT)
* Public Types
****************************************************************************/
struct usbdev_epdesc_s
{
uint32_t addr;
uint32_t pktsize;
uint16_t extreg;
uint8_t stausbk;
uint8_t reserved[5];
};
struct usbhost_pipedesc_s
{
uint32_t addr;
uint32_t pktsize;
uint16_t extreg;
uint8_t stausbk;
uint8_t reserved;
uint16_t ctrlpipe;
uint16_t statuspipe;
};
* Public Data
****************************************************************************/
* Public Functions Prototypes
****************************************************************************/
#endif
#endif