From 990090a4cc9070837d31e66b58d40f0c3d038741 Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Sun, 16 Mar 2014 14:41:11 +0200 Subject: Add usblib and utils --- usblib/usbulpi.c | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 usblib/usbulpi.c (limited to 'usblib/usbulpi.c') diff --git a/usblib/usbulpi.c b/usblib/usbulpi.c new file mode 100644 index 0000000..dbbf68a --- /dev/null +++ b/usblib/usbulpi.c @@ -0,0 +1,176 @@ +//***************************************************************************** +// +// usbulpi.c - ULPI access functions. +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the Tiva USB Library. +// +//***************************************************************************** +#include +#include +#include "inc/hw_types.h" +#include "driverlib/usb.h" +#include "usbulpi.h" + +//***************************************************************************** +// +// Hardware ULPI registers. +// +//***************************************************************************** +#define ULPI_FCTL 0x04 +#define ULPI_FCTL_SET 0x05 +#define ULPI_FCTL_CLEAR 0x06 +#define ULPI_ICTL 0x07 +#define ULPI_ICTL_SET 0x08 +#define ULPI_ICTL_CLEAR 0x09 +#define ULPI_OTGCTL 0x0A +#define ULPI_OTGCTL_SET 0x0B +#define ULPI_OTGCTL_CLEAR 0x0C + +//***************************************************************************** +// +// The following are defines for the bit fields in the ULPI_FCTL register. +// +//***************************************************************************** +#define ULPI_FCTL_XCVR_M 0x03 +#define ULPI_FCTL_XCVR_HS 0x00 +#define ULPI_FCTL_XCVR_FS 0x01 +#define ULPI_FCTL_XCVR_LS 0x02 +#define ULPI_FCTL_XCVR_FSLS 0x03 +#define ULPI_FCTL_TERMSEL 0x04 +#define ULPI_FCTL_OPMODE_M 0x18 +#define ULPI_FCTL_OPMODE_NORM 0x00 +#define ULPI_FCTL_OPMODE_NODRV 0x08 +#define ULPI_FCTL_OPMODE_NONRZI 0x10 +#define ULPI_FCTL_OPMODE_DISAUTO \ + 0x18 +#define ULPI_FCTL_OPMODE_RESET 0x20 +#define ULPI_FCTL_OPMODE_SUSPEND \ + 0x40 + +//***************************************************************************** +// +// The following are defines for the bit fields in the ULPI_ICTL register. +// +//***************************************************************************** +#define ULPI_ICTL_SER6PIN 0x01 +#define ULPI_ICTL_SER3PIN 0x02 +#define ULPI_ICTL_AUTORESUME 0x10 +#define ULPI_ICTL_INDINV 0x20 +#define ULPI_ICTL_INDPASSTHRU 0x40 +#define ULPI_ICTL_PROTDIS 0x80 + +//***************************************************************************** +// +// The following are defines for the bit fields in the ULPI_OTGCTL register. +// +//***************************************************************************** +#define ULPI_OTGCTL_ID_EN 0x01 +#define ULPI_OTGCTL_DPPD_EN 0x02 +#define ULPI_OTGCTL_DMPD_EN 0x04 +#define ULPI_OTGCTL_DISCHRG_VBUS \ + 0x08 +#define ULPI_OTGCTL_CHRG_VBUS 0x10 +#define ULPI_OTGCTL_VBUSINT_EN 0x20 +#define ULPI_OTGCTL_VBUSEXT_EN 0x40 +#define ULPI_OTGCTL_VBUSEXT_IND 0x80 + +//***************************************************************************** +// +//! Sets the configuration of an external USB Phy. +//! +//! \param ui32Base specifies the USB module base address. +//! \param ui32Config specifies the configuration options for the external Phy. +//! +//! This function sets the configuration options for an externally connected +//! USB Phy that is connected using the ULPI interface. The \e ui32Config +//! parameter holds all of the configuration options defined by the +//! \b UPLI_CFG_ values. The values are grouped as follows: +//! +//! Connection speed, using one of the following: +//! - \b UPLI_CFG_HS enables high speed operation. +//! - \b UPLI_CFG_FS enables full speed operation. +//! - \b UPLI_CFG_HS enables low speed operation. +//! +//! Any of the following can be included: +//! - \b UPLI_CFG_AUTORESUME enable automatic transmission of resume signaling +//! from the Phy. +//! - \b UPLI_CFG_INVVBUSIND inverts the external VBUS indicator if it is +//! selected. +//! - \b UPLI_CFG_PASSTHRUIND passes the external VBUS indicator through +//! without using the Phy's VBUS comparator. +//! - \b ULPI_CFG_EXTVBUSDRV enables an external VBUS drive source. +//! - \b ULPI_CFG_EXTVBUSIND enables an external signal for VBUS valid. +//! +//! \return None. +// +//***************************************************************************** +void +ULPIConfigSet(uint32_t ui32Base, uint32_t ui32Config) +{ + uint8_t ui8Val; + + ui8Val = USBULPIRegRead(ui32Base, ULPI_FCTL); + ui8Val &= ~(ULPI_FCTL_XCVR_M); + ui8Val = ui8Val | (uint8_t)ui32Config; + + USBULPIRegWrite(ui32Base, ULPI_FCTL, ui8Val); + + ui8Val = USBULPIRegRead(ui32Base, ULPI_ICTL); + ui8Val &= ~(ULPI_ICTL_AUTORESUME | ULPI_ICTL_INDINV | + ULPI_ICTL_INDPASSTHRU); + ui8Val = ui8Val | (uint8_t)((ui32Config >> 8) & 0xff); + + USBULPIRegWrite(ui32Base, ULPI_ICTL, ui8Val); + + ui8Val = USBULPIRegRead(ui32Base, ULPI_OTGCTL); + ui8Val &= ~(ULPI_OTGCTL_VBUSINT_EN | ULPI_OTGCTL_VBUSEXT_EN | + ULPI_OTGCTL_VBUSEXT_IND); + ui8Val = ui8Val | (uint8_t)((ui32Config >> 16) & 0xff); + + USBULPIRegWrite(ui32Base, ULPI_OTGCTL, ui8Val); +} + +//***************************************************************************** +// +//! Enables or disables power to the external USB Phy. +//! +//! \param ui32Base specifies the USB module base address. +//! \param bEnable specifies if the Phy is fully powered or in suspend mode. +//! +//! This function sets the current power configuration for the external ULPI +//! connected Phy. When \e bEnable is \b true the Phy is fully powered and +//! when \b false the USB Phy is in suspend mode. +//! +//! \return None. +// +//***************************************************************************** +void +ULPIPowerTransceiver(uint32_t ui32Base, bool bEnable) +{ + if(bEnable) + { + USBULPIRegWrite(ui32Base, ULPI_FCTL_CLEAR, + ULPI_FCTL_OPMODE_SUSPEND); + } + else + { + USBULPIRegWrite(ui32Base, ULPI_FCTL_SET, + ULPI_FCTL_OPMODE_SUSPEND); + } +} -- cgit v1.3.1