356 lines
16 KiB
C
356 lines
16 KiB
C
|
/*
|
||
|
* Copyright (c) 2012, Texas Instruments Incorporated - http://www.ti.com/
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* Redistribution and use in source and binary forms, with or without
|
||
|
* modification, are permitted provided that the following conditions
|
||
|
* are met:
|
||
|
* 1. Redistributions of source code must retain the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer.
|
||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||
|
* notice, this list of conditions and the following disclaimer in the
|
||
|
* documentation and/or other materials provided with the distribution.
|
||
|
*
|
||
|
* 3. Neither the name of the copyright holder nor the names of its
|
||
|
* contributors may be used to endorse or promote products derived
|
||
|
* from this software without specific prior written permission.
|
||
|
*
|
||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||
|
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||
|
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
*/
|
||
|
/** \addtogroup cc2538
|
||
|
* @{
|
||
|
*
|
||
|
* \defgroup cc2538-usb cc2538 USB controller
|
||
|
*
|
||
|
* Driver for the cc2538 USB controller.
|
||
|
*
|
||
|
* We use the USB core in cpu/cc253x/usb which is known to work on Linux as
|
||
|
* well as on OS X.
|
||
|
* @{
|
||
|
*
|
||
|
* \file
|
||
|
* Header file with declarations for the cc2538 USB registers
|
||
|
*/
|
||
|
#ifndef USB_REGS_H_
|
||
|
#define USB_REGS_H_
|
||
|
|
||
|
#include "contiki-conf.h"
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB Register Offsets
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_ADDR 0x40089000 /**< Function address */
|
||
|
#define USB_POW 0x40089004 /**< Power/Control register */
|
||
|
#define USB_IIF 0x40089008 /**< IN EPs and EP0 interrupt flags */
|
||
|
#define USB_OIF 0x40089010 /**< OUT endpoint interrupt flags */
|
||
|
#define USB_CIF 0x40089018 /**< Common USB interrupt flags */
|
||
|
#define USB_IIE 0x4008901C /**< IN EPs and EP0 interrupt mask */
|
||
|
#define USB_OIE 0x40089024 /**< Out EPs interrupt-enable mask */
|
||
|
#define USB_CIE 0x4008902C /**< Common USB interrupt mask */
|
||
|
#define USB_FRML 0x40089030 /**< Current frame number (low byte) */
|
||
|
#define USB_FRMH 0x40089034 /**< Current frame number (high) */
|
||
|
#define USB_INDEX 0x40089038 /**< Current endpoint index register */
|
||
|
#define USB_CTRL 0x4008903C /**< USB control register */
|
||
|
#define USB_MAXI 0x40089040 /**< MAX packet size for IN EPs{1-5} */
|
||
|
#define USB_CS0_CSIL 0x40089044 /**< EP0 Control and Status or IN EPs
|
||
|
control and status (low) */
|
||
|
#define USB_CS0 0x40089044 /**< EP0 Control and Status
|
||
|
(Alias for USB_CS0_CSIL) */
|
||
|
#define USB_CSIL 0x40089044 /**< IN EPs control and status (low)
|
||
|
(Alias for USB_CS0_CSIL) */
|
||
|
#define USB_CSIH 0x40089048 /**< IN EPs control and status (high) */
|
||
|
#define USB_MAXO 0x4008904C /**< MAX packet size for OUT EPs */
|
||
|
#define USB_CSOL 0x40089050 /**< OUT EPs control and status (low) */
|
||
|
#define USB_CSOH 0x40089054 /**< OUT EPs control and status (high) */
|
||
|
#define USB_CNT0_CNTL 0x40089058 /**< Number of RX bytes in EP0 FIFO
|
||
|
or number of bytes in EP{1-5}
|
||
|
OUT FIFO (low) */
|
||
|
#define USB_CNT0 0x40089058 /**< Number of RX bytes in EP0 FIFO
|
||
|
(Alias for USB_CNT0_CNTL) */
|
||
|
#define USB_CNTL 0x40089058 /**< Number of bytes in EP{1-5}
|
||
|
OUT FIFO (low)
|
||
|
(Alias for USB_CNT0_CNTL) */
|
||
|
#define USB_CNTH 0x4008905C /**< Number of bytes in EP{1-5}
|
||
|
OUT FIFO (high) */
|
||
|
#define USB_F0 0x40089080 /**< Endpoint-0 FIFO */
|
||
|
#define USB_F1 0x40089088 /**< Endpoint-1 FIFO */
|
||
|
#define USB_F2 0x40089090 /**< Endpoint-2 FIFO */
|
||
|
#define USB_F3 0x40089098 /**< Endpoint-3 FIFO */
|
||
|
#define USB_F4 0x400890A0 /**< Endpoint-4 FIFO */
|
||
|
#define USB_F5 0x400890A8 /**< Endpoint-5 FIFO */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_ADDR Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_ADDR_UPDATE 0x00000080 /**< 1 while address updating */
|
||
|
#define USB_ADDR_USBADDR 0x0000007F /**< Device address */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_POW Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_POW_ISO_WAIT_SOF 0x00000080 /**< 1 until SOF received - ISO only */
|
||
|
#define USB_POW_RST 0x00000008 /**< 1 During reset signaling */
|
||
|
#define USB_POW_RESUME 0x00000004 /**< Remote wakeup resume signalling */
|
||
|
#define USB_POW_SUSPEND 0x00000002 /**< Suspend mode entered */
|
||
|
#define USB_POW_SUSPEND_EN 0x00000001 /**< Suspend enable */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_IIF Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_IIF_INEP5IF 0x00000020 /**< IN EP5 Interrupt flag */
|
||
|
#define USB_IIF_INEP4IF 0x00000010 /**< IN EP4 Interrupt flag */
|
||
|
#define USB_IIF_INEP3IF 0x00000008 /**< IN EP3 Interrupt flag */
|
||
|
#define USB_IIF_INEP2IF 0x00000004 /**< IN EP2 Interrupt flag */
|
||
|
#define USB_IIF_INEP1IF 0x00000002 /**< IN EP1 Interrupt flag */
|
||
|
#define USB_IIF_EP0IF 0x00000001 /**< EP0 Interrupt flag */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_OIF Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_OIF_OUTEP5IF 0x00000020 /**< OUT EP5 Interrupt flag */
|
||
|
#define USB_OIF_OUTEP4IF 0x00000010 /**< OUT EP4 Interrupt flag */
|
||
|
#define USB_OIF_OUTEP3IF 0x00000008 /**< OUT EP3 Interrupt flag */
|
||
|
#define USB_OIF_OUTEP2IF 0x00000004 /**< OUT EP2 Interrupt flag */
|
||
|
#define USB_OIF_OUTEP1IF 0x00000002 /**< OUT EP1 Interrupt flag */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_CIF Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_CIF_SOFIF 0x00000008 /**< Start-of-frame interrupt flag */
|
||
|
#define USB_CIF_RSTIF 0x00000004 /**< Reset interrupt flag */
|
||
|
#define USB_CIF_RESUMEIF 0x00000002 /**< Resume interrupt flag */
|
||
|
#define USB_CIF_SUSPENDIF 0x00000001 /**< Suspend interrupt flag */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_IIE Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_IIE_INEP5IE 0x00000020 /**< IN EP5 interrupt enable */
|
||
|
#define USB_IIE_INEP4IE 0x00000010 /**< IN EP4 interrupt enable */
|
||
|
#define USB_IIE_INEP3IE 0x00000008 /**< IN EP3 interrupt enable */
|
||
|
#define USB_IIE_INEP2IE 0x00000004 /**< IN EP2 interrupt enable */
|
||
|
#define USB_IIE_INEP1IE 0x00000002 /**< IN EP1 interrupt enable */
|
||
|
#define USB_IIE_EP0IE 0x00000001 /**< EP0 interrupt enable */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_OIE Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_OIE_OUTEP5IE 0x00000020 /**< OUT EP5 interrupt enable */
|
||
|
#define USB_OIE_OUTEP4IE 0x00000010 /**< OUT EP4 interrupt enable */
|
||
|
#define USB_OIE_OUTEP3IE 0x00000008 /**< OUT EP3 interrupt enable */
|
||
|
#define USB_OIE_OUTEP2IE 0x00000004 /**< OUT EP2 interrupt enable */
|
||
|
#define USB_OIE_OUTEP1IE 0x00000002 /**< OUT EP1 interrupt enable */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_CIE Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_CIE_SOFIE 0x00000008 /**< Start-of-frame interrupt enable */
|
||
|
#define USB_CIE_RSTIE 0x00000004 /**< Reset interrupt enable */
|
||
|
#define USB_CIE_RESUMEIE 0x00000002 /**< Resume interrupt enable */
|
||
|
#define USB_CIE_SUSPENDIE 0x00000001 /**< Suspend interrupt enable */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_FRML Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_FRML_FRAME 0x000000FF /**< Low byte of 11-bit frame number */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_FRMH Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_FRMH_FRAME 0x00000007 /**< 3 MSBs of 11-bit frame number */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_INDEX Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_INDEX_USBINDEX 0x0000000F /**< Endpoint selected */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_CTRL Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_CTRL_PLL_LOCKED 0x00000080 /**< PLL locked status */
|
||
|
#define USB_CTRL_PLL_EN 0x00000002 /**< 48-MHz USB PLL enable */
|
||
|
#define USB_CTRL_USB_EN 0x00000001 /**< USB enable */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_MAXI Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_MAXI_USBMAXI 0x000000FF /**< Maximum packet size */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_CS0_CSIL Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
/** Listed as reserved in the UG, is this right? */
|
||
|
#define USB_CS0_CLR_SETUP_END 0x00000080
|
||
|
|
||
|
/** Deassert OUTPKT_RDY bit of this register or reset the data toggle to 0 */
|
||
|
#define USB_CS0_CSIL_CLR_OUTPKT_RDY_or_CLR_DATA_TOG 0x00000040
|
||
|
#define USB_CS0_CLR_OUTPKT_RDY 0x00000040
|
||
|
#define USB_CSIL_CLR_DATA_TOG 0x00000040
|
||
|
|
||
|
/**
|
||
|
* Set this bit to 1 to terminate the current transaction or
|
||
|
* is set when a STALL handshake has been sent
|
||
|
*/
|
||
|
#define USB_CS0_CSIL_SEND_STALL_or_SENT_STALL 0x00000020
|
||
|
#define USB_CS0_SEND_STALL 0x00000020
|
||
|
#define USB_CSIL_SENT_STALL 0x00000020
|
||
|
|
||
|
/**
|
||
|
* Is set if the control transfer ends due to a premature end-of-control
|
||
|
* transfer or set to 1 to make the USB controller reply with a STALL handshake
|
||
|
* when receiving IN tokens
|
||
|
*/
|
||
|
#define USB_CS0_CSIL_SETUP_END_or_SEND_STALL 0x00000010
|
||
|
#define USB_CS0_SETUP_END 0x00000010
|
||
|
#define USB_CSIL_SEND_STALL 0x00000010
|
||
|
|
||
|
/**
|
||
|
* Signal the end of a data transfer or set to 1 to flush next packet that
|
||
|
* is ready to transfer from the IN FIFO
|
||
|
*/
|
||
|
#define USB_CS0_CSIL_DATA_END_or_FLUSH_PACKET 0x00000008
|
||
|
#define USB_CS0_DATA_END 0x00000008
|
||
|
#define USB_CSIL_FLUSH_PACKET 0x00000008
|
||
|
|
||
|
/**
|
||
|
* Set when a STALL handshake is sent or set if an IN token is received when
|
||
|
* INPKT_RDY = 0, and a zero-length data packet is transmitted in response to
|
||
|
* the IN token. In bulk/interrupt mode, this bit is set when a NAK is returned
|
||
|
* in response to an IN token
|
||
|
*/
|
||
|
#define USB_CS0_CSIL_SENT_STALL_or_UNDERRUN 0x00000004
|
||
|
#define USB_CS0_SENT_STALL 0x00000004
|
||
|
#define USB_CSIL_UNDERRUN 0x00000004
|
||
|
|
||
|
/**
|
||
|
* Data packet has been loaded into the EP0 FIFO or at least one packet in the
|
||
|
* IN FIFO
|
||
|
*/
|
||
|
#define USB_CS0_CSIL_INPKT_RDY_or_PKT_PRESENT 0x00000002
|
||
|
#define USB_CS0_INPKT_RDY 0x00000002
|
||
|
#define USB_CSIL_PKT_PRESENT 0x00000002
|
||
|
|
||
|
/** Data packet received or data packet has been loaded into the IN FIFO */
|
||
|
#define USB_CS0_CSIL_OUTPKT_RDY_or_INPKT_RDY 0x00000001
|
||
|
#define USB_CS0_OUTPKT_RDY 0x00000001
|
||
|
#define USB_CSIL_INPKT_RDY 0x00000001
|
||
|
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_CSIH Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_CSIH_AUTISET 0x00000080 /**< Auto-assert INPKT_RDY */
|
||
|
#define USB_CSIH_ISO 0x00000040 /**< Selects IN endpoint type */
|
||
|
#define USB_CSIH_FORCE_DATA_TOG 0x00000008 /**< IN EP force data toggle switch */
|
||
|
#define USB_CSIH_IN_DBL_BUF 0x00000001 /**< Double buffering enable (IN FIFO) */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_MAXO Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_MAXO_USBMAXO 0x000000FF /**< Maximum packet size */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_CSOL Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_CSOL_CLR_DATA_TOG 0x00000080 /**< Setting resets data toggle to 0 */
|
||
|
#define USB_CSOL_SENT_STALL 0x00000040 /**< STALL handshake sent */
|
||
|
#define USB_CSOL_SEND_STALL 0x00000020 /**< Reply with STALL to OUT tokens */
|
||
|
#define USB_CSOL_FLUSH_PACKET 0x00000010 /**< Flush next packet read from OUT FIFO */
|
||
|
#define USB_CSOL_DATA_ERROR 0x00000008 /**< CRC or bit-stuff error in RX packet */
|
||
|
#define USB_CSOL_OVERRUN 0x00000004 /**< OUT packet can not be loaded into OUT FIFO */
|
||
|
#define USB_CSOL_FIFO_FULL 0x00000002 /**< OUT FIFO full */
|
||
|
#define USB_CSOL_OUTPKT_RDY 0x00000001 /**< OUT packet read in OUT FIFO */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_CSOH Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_CSOH_AUTOCLEAR 0x00000080 /**< Auto-clear OUTPKT_RDY */
|
||
|
#define USB_CSOH_ISO 0x00000040 /**< Selects OUT endpoint type */
|
||
|
#define USB_CSOH_OUT_DBL_BUF 0x00000001 /**< Double buffering enable (OUT FIFO) */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_CNT0_CNTL Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_CNT0_CNTL_USBCNT0 0x0000003F /**< Number of RX bytes in EP0 FIFO */
|
||
|
#define USB_CNT0_USBCNT0 0x0000003F
|
||
|
|
||
|
#define USB_CNT0_CNTL_USBCNT_5_0 0x0000003F /**< 6 LSBs of the number of RX
|
||
|
bytes in EP1-5 OUT FIFO */
|
||
|
#define USB_CNTL_USBCNT_5_0 0x0000003F
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_CNTH Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_CNTH_USBCNT 0x00000007 /**< 3 MSBs of RX byte number */
|
||
|
/** @} */
|
||
|
/*---------------------------------------------------------------------------*/
|
||
|
/**
|
||
|
* \name USB_F[0-5] Register Bit-Masks
|
||
|
* @{
|
||
|
*/
|
||
|
#define USB_F0_USBF0 0x000000FF /**< Endpoint 0 FIFO mask */
|
||
|
#define USB_F1_USBF1 0x000000FF /**< Endpoint 1 FIFO mask */
|
||
|
#define USB_F2_USBF2 0x000000FF /**< Endpoint 2 FIFO mask */
|
||
|
#define USB_F3_USBF3 0x000000FF /**< Endpoint 3 FIFO mask */
|
||
|
#define USB_F4_USBF4 0x000000FF /**< Endpoint 4 FIFO mask */
|
||
|
#define USB_F5_USBF5 0x000000FF /**< Endpoint 5 FIFO mask */
|
||
|
/** @} */
|
||
|
|
||
|
#endif /* USB_REGS_H_ */
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
* @}
|
||
|
*/
|