blob: e946a4a7875538860a222ea9824712d3998669fc [file] [log] [blame]
/*----------------------------------------------------------------------------
* U S B - K e r n e l
*----------------------------------------------------------------------------
* Name: usbhw.h
* Purpose: USB Hardware Layer Definitions
* Version: V1.20
*----------------------------------------------------------------------------
* This software is supplied "AS IS" without any warranties, express,
* implied or statutory, including but not limited to the implied
* warranties of fitness for purpose, satisfactory quality and
* noninfringement. Keil extends you a royalty-free right to reproduce
* and distribute executable files created using this software for use
* on NXP Semiconductors LPC family microcontroller devices only. Nothing
* else gives you the right to use this software.
*
* Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
*----------------------------------------------------------------------------
* History:
* V1.20 Added USB_ClearEPBuf
* V1.00 Initial Version
*----------------------------------------------------------------------------*/
#ifndef __USBHW_H__
#define __USBHW_H__
#include "usb.h"
/* dTD Transfer Description */
typedef volatile struct
{
volatile uint32_t next_dTD;
volatile uint32_t total_bytes ;
volatile uint32_t buffer0;
volatile uint32_t buffer1;
volatile uint32_t buffer2;
volatile uint32_t buffer3;
volatile uint32_t buffer4;
volatile uint32_t reserved;
} DTD_T;
/* dQH Queue Head */
typedef volatile struct
{
volatile uint32_t cap;
volatile uint32_t curr_dTD;
volatile uint32_t next_dTD;
volatile uint32_t total_bytes;
volatile uint32_t buffer0;
volatile uint32_t buffer1;
volatile uint32_t buffer2;
volatile uint32_t buffer3;
volatile uint32_t buffer4;
volatile uint32_t reserved;
volatile uint32_t setup[2];
volatile uint32_t gap[4];
} DQH_T;
/* bit defines for USBCMD register */
#define USBCMD_RS (1<<0)
#define USBCMD_RST (1<<1)
#define USBCMD_ATDTW (1<<12)
#define USBCMD_SUTW (1<<13)
/* bit defines for USBSTS register */
#define USBSTS_UI (1<<0)
#define USBSTS_UEI (1<<1)
#define USBSTS_PCI (1<<2)
#define USBSTS_URI (1<<6)
#define USBSTS_SRI (1<<7)
#define USBSTS_SLI (1<<8)
#define USBSTS_NAKI (1<<16)
/* bit defines for DEVICEADDR register */
#define USBDEV_ADDR_AD (1<<24)
#define USBDEV_ADDR(n) (((n) & 0x7F)<<25)
/* bit defines for PRTSC1 register */
#define USBPRTS_CCS (1<<0)
#define USBPRTS_PE (1<<2)
#define USBPRTS_FPR (1<<6)
#define USBPRTS_SUSP (1<<7)
#define USBPRTS_PR (1<<8)
#define USBPRTS_HSP (1<<9)
#define USBPRTS_PLPSCD (1<<23)
#define USBPRTS_PFSC (1<<24)
/* bit defines for USBMODE register */
#define USBMODE_CM_IDLE (0x0<<0)
#define USBMODE_CM_DEV (0x2<<0)
#define USBMODE_CM_HOST (0x3<<0)
#define USBMODE_SLOM (1<<3)
#define USBMODE_SDIS (1<<4)
/* bit defines for EP registers*/
#define USB_EP_BITPOS(n) (((n) & 0x80)? (0x10 | ((n) & 0x7)) : ((n) & 0x7))
/* bit defines EPcontrol registers*/
#define EPCTRL_RXS (1<<0)
#define EPCTRL_RX_TYPE(n) (((n) & 0x3)<<2)
#define EPCTRL_RX_CTL (0<<2)
#define EPCTRL_RX_ISO (1<<2)
#define EPCTRL_RX_BLK (2<<2)
#define EPCTRL_RXI (1<<5)
#define EPCTRL_RXR (1<<6)
#define EPCTRL_RXE (1<<7)
#define EPCTRL_TXS (1<<16)
#define EPCTRL_TX_TYPE(n) (((n) & 0x3)<<18)
#define EPCTRL_TX_CTL (0<<18)
#define EPCTRL_TX_ISO (1<<18)
#define EPCTRL_TX_BLK (2<<18)
#define EPCTRL_TX_INT (3<<18)
#define EPCTRL_TXI (1<<21)
#define EPCTRL_TXR (1<<22)
#define EPCTRL_TXE (1<<23)
/* dQH field and bit defines */
/* Temp fixed on max, should be taken out of table */
#define QH_MAX_CTRL_PAYLOAD 0x03ff
#define QH_MAX_PKT_LEN_POS 16
#define QH_MAXP(n) (((n) & 0x3FF)<<16)
#define QH_IOS (1<<15)
#define QH_ZLT (1<<29)
/* dTD field and bit defines */
#define TD_NEXT_TERMINATE (1<<0)
#define TD_IOC (1<<15)
/* Total physical enpoints*/
#define EP_NUM_MAX 8
/* USB Hardware Functions */
extern void USB_Init (LPC_USBDRV_INIT_T* cbs);
extern void USB_Connect (uint32_t con);
extern void USB_Reset (void);
extern void USB_Suspend (void);
extern void USB_Resume (void);
extern void USB_WakeUp (void);
extern void USB_WakeUpCfg (uint32_t cfg);
extern void USB_SetAddress (uint32_t adr);
extern void USB_Configure (uint32_t cfg);
extern void USB_ConfigEP (USB_ENDPOINT_DESCRIPTOR *pEPD);
extern void USB_DirCtrlEP (uint32_t dir);
extern void USB_EnableEP (uint32_t EPNum);
extern void USB_DisableEP (uint32_t EPNum);
extern void USB_ResetEP (uint32_t EPNum);
extern void USB_SetStallEP (uint32_t EPNum);
extern void USB_ClrStallEP (uint32_t EPNum);
extern void USB_ClearEPBuf (uint32_t EPNum);
extern uint32_t USB_SetTestMode(uint8_t mode);
extern uint32_t USB_ReadEP (uint32_t EPNum, uint8_t *pData);
extern uint32_t USB_ReadReqEP(uint32_t EPNum, uint8_t *pData, uint32_t len);
extern uint32_t USB_ReadSetupPkt(uint32_t, uint32_t *);
extern uint32_t USB_WriteEP (uint32_t EPNum, uint8_t *pData, uint32_t cnt);
extern uint32_t USB_GetFrame (void);
//extern void USB_ISR(void) __irq;
#endif /* __USBHW_H__ */