lpc_usb.h
上传用户:sourcesun
上传日期:2013-09-23
资源大小:362k
文件大小:16k
- /*************************************************************************
- *
- * Used with ICCARM and AARM.
- *
- * (c) Copyright IAR Systems 2005
- *
- * File name : lpc_usb.h
- * Description : Define usb module
- *
- * History :
- * 1. Data : June 13, 2005
- * Author : Stanimir Bonev
- * Description : Create
- * 2. Data : August 4, 2005
- * Author : Stanimir Bonev
- * Description : Modify
- * Modify some functions
- * 3. Data : November 18, 2005
- * Author : Stanimir Bonev
- * Description : Modify
- * Add DMA support
- *
- * $Revision: 1.2.4.1 $
- **************************************************************************/
- #include <includes.h>
- #ifndef __LPC_USB_H
- #define __LPC_USB_H
- #ifdef LPC_USB_GLOBAL
- #define LPC_USB_EXTERN
- #else
- #define LPC_USB_EXTERN extern
- #endif
- typedef enum
- {
- USB_OK = 0,USB_PLL_ERROR,USB_INTR_ERROR,
- } USB_ErrorCodes_t;
- typedef enum
- {
- CTRL_ENP_OUT=0, CTRL_ENP_IN,
- ENP1_OUT , ENP1_IN ,
- ENP2_OUT , ENP2_IN ,
- ENP3_OUT , ENP3_IN ,
- ENP4_OUT , ENP4_IN ,
- ENP5_OUT , ENP5_IN ,
- ENP6_OUT , ENP6_IN ,
- ENP7_OUT , ENP7_IN ,
- ENP8_OUT , ENP8_IN ,
- ENP9_OUT , ENP9_IN ,
- ENP10_OUT , ENP10_IN ,
- ENP11_OUT , ENP11_IN ,
- ENP12_OUT , ENP12_IN ,
- ENP13_OUT , ENP13_IN ,
- ENP14_OUT , ENP14_IN ,
- ENP15_OUT , ENP15_IN ,
- ENP_MAX_NUMB
- } USB_Endpoint_t;
- typedef enum
- {
- USB_LowPrior = 0,
- USB_HighPrior,
- } USB_IntrPriority_t;
- typedef enum
- {
- USB_NotFast = 0,
- USB_EP_Fast,
- USB_FrameFast,
- } USB_DevIntrPriority_t;
- typedef union
- {
- Int32U Data;
- struct
- {
- Int32U Frame : 1;
- Int32U Fast : 1;
- Int32U Slow : 1;
- Int32U Status : 1;
- Int32U CcEmpty : 1;
- Int32U CdFull : 1;
- Int32U EpRx : 1;
- Int32U EpTx : 1;
- Int32U EpRealize : 1;
- Int32U Error : 1;
- Int32U :22;
- };
- }UsbDevIntrStat_t;
- typedef union
- {
- Int8U Data;
- struct
- {
- Int8U Connect : 1;
- Int8U ConnectChange : 1;
- Int8U Suspend : 1;
- Int8U SuspendChange : 1;
- Int8U Reset : 1;
- Int8U : 3;
- };
- }UsbDevStat_t;
- typedef enum
- {
- UsbEp0Out = 0, UsbEp0In,
- UsbEp1Out, UsbEp1In,
- UsbEp2Out, UsbEp2In,
- UsbEp3Out, UsbEp3In,
- UsbEp4Out, UsbEp4In,
- UsbEp5Out, UsbEp5In,
- UsbEp6Out, UsbEp6In,
- UsbEp7Out, UsbEp7In,
- UsbEp8Out, UsbEp8In,
- UsbEp9Out, UsbEp9In,
- UsbEp10Out, UsbEp10In,
- UsbEp11Out, UsbEp11In,
- UsbEp12Out, UsbEp12In,
- UsbEp13Out, UsbEp13In,
- UsbEp14Out, UsbEp14In,
- UsbEp15Out, UsbEp15In,
- UsbResetEvent,UsbConnectEvent,UsbSuspendEvent,
- UsbErrorEvent,UsbSofEvent,UsbHighPrioIntrEvent,
- UsbLastEvent
- }UsbUserEvent_t;
- typedef enum
- {
- USB_DevConnectStatus = 0, USB_SuspendStatus, USB_ResetStatus
- } USB_DevStatusReqType_t;
- typedef Int32U UsbDefStatus_t;
- typedef void (* UserFunc_t)(void * Arg);
- #define CMD_USB_SEL_EP 0x00
- #define CMD_USB_SEL_CLR_INT_EP 0x40
- #define CMD_USB_SET_EP_STAT 0x140
- #define CMD_USB_SET_ADDRESS 0xD0
- #define CMD_USB_CFG_DEV 0xD8
- #define CMD_USB_CLR_BUF 0xF2
- #define CMD_USB_SET_MODE 0xF3
- #define CMD_USB_RD_FRAME_NUMB 0xF5
- #define CMD_USB_VAL_BUF 0xFA
- #define CMD_USB_RD_ERROR_STAT 0xFB
- #define CMD_USB_RD_TEST_REG 0xFD
- #define CMD_USB_SET_DEV_STAT 0x1FE
- #define CMD_USB_GET_DEV_STAT 0xFE
- #define CMD_USB_GET_ERROR 0xFF
- #define USB_CMD_WR 0x00000500
- #define USB_DATA_WR 0x00000100
- #define USB_DATA_RD 0x00000200
- #define bmUSB_FrameInterrupt 0x00000001
- #define bmUSB_FastInterrupt 0x00000002
- #define bmUSB_SlowInterrupt 0x00000004
- #define bmUSB_DevStatusInterrupt 0x00000008
- #define bmUSB_CommRegEmptyInterrupt 0x00000010
- #define bmUSB_CommDataFullInterrupt 0x00000020
- #define bmUSB_RxPacketInterrupt 0x00000040
- #define bmUSB_TxPacketInterrupt 0x00000080
- #define bmUSB_EPRealizeInterrupt 0x00000100
- #define bmUSB_ErrorInterrupt 0x00000200
- #define bmUSB_Connect 0x00000001
- #define bmUSB_ConnectChange 0x00000002
- #define bmUSB_Suspend 0x00000004
- #define bmUSB_SuspendChange 0x00000008
- #define bmUSB_BusReset 0x00000010
- #define bmUSB_EpStall 0x00000001
- #define bmUSB_EpStallStatus 0x00000002
- #define bmUSB_EpSetupPacket 0x00000004
- #define bmUSB_EpPOStatus 0x00000010
- #define bmUSB_EpCondStall 0x00000080
- #define bmUSB_CtrlRdEna 0x00000001
- #define bmUSB_CtrlWrEna 0x00000002
- #define bmUSB_PacketOverWritten 0x00000001
- LPC_USB_EXTERN volatile Int32U USB_EpSoftPrio;
- extern UserFunc_t UsbUserFun[];
- #if USB_SOF_EVENT > 0
- LPC_USB_EXTERN volatile Int32U USB_SofNumbHold;
- #endif
- /*************************************************************************
- * Function Name: USB_Cmd
- * Parameters: Int16U Command, Int8U Data
- *
- * Return: Int32U - command result
- *
- * Description: Implement commands transmit to USB Engine
- *
- *************************************************************************/
- Int32U USB_Cmd (Int16U Command, Int8U Data);
- /*************************************************************************
- * Function Name: USB_UserFuncRegistered
- * Parameters: UserFunc_t UserFunc, UsbUserEvent_t UserFuncInd
- *
- * Return: UserFunc_t
- *
- * Description: Registered User callback function
- *
- *************************************************************************/
- UserFunc_t USB_UserFuncRegistered (UserFunc_t UserFunc, UsbUserEvent_t UserFuncInd);
- /*************************************************************************
- * Function Name: USB_EpIntrClr
- * Parameters: USB_Endpoint_t EndPoint
- *
- * Return: Int8U
- *
- * Description: Clear the EP interrupt flag and return the current EP status
- *
- *************************************************************************/
- Int8U USB_EpIntrClr(USB_Endpoint_t EndPoint);
- /*************************************************************************
- * Function Name: USB_HwInit
- * Parameters: LPC_VicIrqSlots_t IntrSlot
- *
- * Return: none
- *
- * Description: Init USB
- *
- *************************************************************************/
- void USB_HwInit(LPC_VicIrqSlots_t IntrSlot);
- /*************************************************************************
- * Function Name: USB_HwReset
- * Parameters: none
- *
- * Return: none
- *
- * Description: Reset Usb engine
- *
- *************************************************************************/
- void USB_HwReset (void);
- /*************************************************************************
- * Function Name: USB_SetEpPrio
- * Parameters: USB_Endpoint_t EndPoint,Boolean EpPrio
- *
- * Return: none
- *
- * Description: Set Endpoint priority
- *
- *************************************************************************/
- inline void USB_SetEpPrio (USB_Endpoint_t EndPoint,Boolean EpPrio);
- /*************************************************************************
- * Function Name: USB_RealizeEndPoint
- * Parameters: USB_Endpoint_t EndPoint, Boolean EpPrio,
- * Int32U MaxPacketSize, Boolean IntrEna
- *
- * Return: none
- *
- * Description: Enable or disable endpoint
- *
- *************************************************************************/
- void USB_RealizeEndPoint( USB_Endpoint_t EndPoint, Boolean EpPrio,
- Int32U MaxPacketSize, Boolean IntrEna);
- /*************************************************************************
- * Function Name: USB_ClearBuffer
- * Parameters: USB_Endpoint_t EndPoint - endpoiunt index
- *
- * Return: Int32U Packet overwrite statrus
- *
- * Description: Clear buffer of the corresponding endpoint
- *
- *************************************************************************/
- Int32U USB_ClearBuffer(USB_Endpoint_t EndPoint);
- /*************************************************************************
- * Function Name: USB_ValidateBuffer
- * Parameters: USB_Endpoint_t EndPoint - endpoiunt index
- *
- * Return: none
- *
- * Description: Validate buffer(only for IN Endpoints)
- *
- *************************************************************************/
- void USB_ValidateBuffer(USB_Endpoint_t EndPoint);
- /*************************************************************************
- * Function Name: USB_SetAdd
- * Parameters: Int32U DevAdd - device address between 0 - 127
- *
- * Return: none
- *
- * Description: Set device address
- *
- *************************************************************************/
- void USB_SetAdd(Int32U DevAdd);
- #define USB_SetDefAdd() USB_SetAdd(0)
- /*************************************************************************
- * Function Name: USB_Connect
- * Parameters: Boolean Conn
- *
- * Return: none
- *
- * Description: Connect Usb
- *
- *************************************************************************/
- void USB_Connect (Boolean Conn);
- /*************************************************************************
- * Function Name: USB_Configure
- * Parameters: Boolean Configure
- *
- * Return: none
- *
- * Description: Configure device
- * When Configure != 0 enable all Realize Ep
- *
- *************************************************************************/
- void USB_Configure (Boolean Configure);
- /*************************************************************************
- * Function Name: USB_WakeUp
- * Parameters: none
- *
- * Return: none
- *
- * Description: Wake up Usb
- *
- *************************************************************************/
- void USB_WakeUp (void);
- /*************************************************************************
- * Function Name: USB_GetDevStatus
- * Parameters: USB_DevStatusReqType_t Type
- *
- * Return: Boolean
- *
- * Description: Return USB device status
- *
- *************************************************************************/
- Boolean USB_GetDevStatus (USB_DevStatusReqType_t Type);
- /*************************************************************************
- * Function Name: USB_SetStallEP
- * Parameters: USB_Endpoint_t EndPoint, Boolean Stall
- *
- * Return: none
- *
- * Description: The endpoint stall/unstall
- *
- *************************************************************************/
- void USB_SetStallEP (USB_Endpoint_t EndPoint, Boolean Stall);
- /*************************************************************************
- * Function Name: USB_GetStallEP
- * Parameters: USB_Endpoint_t EndPoint
- *
- * Return: Boolean
- *
- * Description: Get stall state of the endpoint
- *
- *************************************************************************/
- Boolean USB_GetStallEP (USB_Endpoint_t EndPoint);
- /*************************************************************************
- * Function Name: USB_EpWrite
- * Parameters: USB_Endpoint_t EndPoint, Int32U * pData, Int32U Count
- *
- * Return: none
- *
- * Description: Endpoint Write (IN)
- *
- *************************************************************************/
- void USB_EpWrite (USB_Endpoint_t EndPoint, Int32U * pData, Int32U Count);
- /*************************************************************************
- * Function Name: USB_EpRead
- * Parameters: USB_Endpoint_t EndPoint, Int32U * pData, Int32U Count
- *
- * Return: Int32
- *
- * Description: Endpoint Read (OUT)
- *
- *************************************************************************/
- Int32U USB_EpRead (USB_Endpoint_t EndPoint, Int32U * pData, Int32U Count);
- /*************************************************************************
- * Function Name: USB_ISR
- * Parameters: none
- *
- * Return: none
- *
- * Description: USB interrupt subroutine
- *
- *************************************************************************/
- void USB_ISR (void);
- /*************************************************************************
- * Function Name: USB_EpLogToPhysAdd
- * Parameters: Int8U EpLogAdd
- *
- * Return: USB_Endpoint_t
- *
- * Description: Convert the logical to physical address
- *
- *************************************************************************/
- USB_Endpoint_t USB_EpLogToPhysAdd (Int8U EpLogAdd);
- /*************************************************************************
- * Function Name: USB_GetFrameNumb
- * Parameters: none
- *
- * Return: Int32U
- *
- * Description: Retunr curent value of SOF number
- *
- *************************************************************************/
- #if USB_SOF_EVENT > 0
- Int32U USB_GetFrameNumb (void);
- #endif
- #if USB_DMA > 0
- typedef enum
- {
- UsbDmaNoServiced = 0,UsbDmaBeingServiced,
- UsbDmaNormalCompletion, UsbDmaDataUnderrun,
- UsbDmaDataOverrun = 8, UsbDmaSystemError,
- UsbDmaParametersError,
- } UsbDmaStateCode_t;
- typedef enum
- {
- UsbDmaNormalMode = 0, UsbDmaAtleMode,
- } UsbDmaMode_t;
- #pragma pack(1)
- typedef struct
- {
- Int32U PacketLength :16;
- Int32U PacketValid : 1;
- Int32U FrameNumb :15;
- } DmaIsoPacket_t, *pDmaIsoPacket_t;
- typedef struct
- {
- void * pNextDD;
- union
- {
- Int32U Ctrl;
- struct
- {
- Int32U DmaMode : 2;
- Int32U NextDDValid : 1;
- Int32U : 1;
- Int32U Isochronous : 1;
- Int32U MaxPacketSize :11;
- Int32U DmaBufferLegtn :16;
- };
- };
- pInt32U pDmaBuffer;
- union
- {
- Int32U Status;
- struct
- {
- Int32U DdRetired : 1;
- Int32U DdState : 4;
- Int32U PacketValid : 1;
- Int32U LsByteExtr : 1;
- Int32U MsByteExtr : 1;
- Int32U MessLenPos : 6;
- Int32U : 2;
- Int32U PresentCnt :16;
- };
- };
- pDmaIsoPacket_t pDmaIsoPacket;
- } USB_DmaDesc_t, *pUSB_DmaDesc_t;
- #pragma pack()
- /*************************************************************************
- * Function Name: USB_DmaReset
- * Parameters: Int32U IntrEna
- *
- * Return: none
- *
- * Description: Reset USB DMA
- *
- *************************************************************************/
- void USB_DmaReset (Int32U IntrEna);
- /*************************************************************************
- * Function Name: USB_DmaInitTransfer
- * Parameters: USB_Endpoint_t EndPoint, Int32U DmaDescInd,
- * pInt32U pData, Int32U EpMaxSize, Int32U Size
- * pDmaIsoPacket_t pDmaIsoPacket, Boolean EpTransferType
- *
- * Return: UsbDmaStateCode_t
- *
- * Description: Init Transfer by DMA
- *
- *************************************************************************/
- UsbDmaStateCode_t USB_DmaInitTransfer (USB_Endpoint_t EndPoint,
- Int32U DmaDescInd, pInt32U pData, Int32U EpMaxSize, Int32U Size,
- pDmaIsoPacket_t pDmaIsoPacket, Boolean EpTransferType);
- /*************************************************************************
- * Function Name: USB_DmaRestattTransfer
- * Parameters: USB_Endpoint_t EndPoint, Int32U DmaDescInd,
- * pInt32U pData, Int32U EpMaxSize, Int32U Size
- * pDmaIsoPacket_t pDmaIsoPacket, Boolean EpTransferType
- *
- * Return: none
- *
- * Description: Restart DMA Transfer
- *
- *************************************************************************/
- void USB_DmaRestattTransfer (USB_Endpoint_t EndPoint,Int32U DmaDescInd);
- /*************************************************************************
- * Function Name: USB_DmaGetDesc
- * Parameters: Int32U DmaDescInd
- *
- * Return: pUSB_DmaDesc_t
- *
- * Description: Retur pointer to DMA deskriptor
- *
- *************************************************************************/
- pUSB_DmaDesc_t USB_DmaGetDesc (Int32U DmaDescInd);
- /*************************************************************************
- * Function Name: USB_DmaDisable
- * Parameters: USB_Endpoint_t EndPoint
- *
- * Return: none
- *
- * Description: Disable DMA transfer for the EP
- *
- *************************************************************************/
- void USB_DmaDisable (USB_Endpoint_t EndPoint);
- #endif // USB_DMA
- #endif //__LPC_USB_H