lpc_usb.h
上传用户:sourcesun
上传日期:2013-09-23
资源大小:362k
文件大小:16k
源码类别:

DNA

开发平台:

Asm

  1. /*************************************************************************
  2.  *
  3.  *    Used with ICCARM and AARM.
  4.  *
  5.  *    (c) Copyright IAR Systems 2005
  6.  *
  7.  *    File name   : lpc_usb.h
  8.  *    Description : Define usb module
  9.  *
  10.  *    History :
  11.  *    1. Data        : June 13, 2005
  12.  *       Author      : Stanimir Bonev
  13.  *       Description : Create
  14.  *    2. Data        : August 4, 2005
  15.  *       Author      : Stanimir Bonev
  16.  *       Description : Modify
  17.  *        Modify some functions
  18.  *    3. Data        : November 18, 2005
  19.  *       Author      : Stanimir Bonev
  20.  *       Description : Modify
  21.  *        Add DMA support
  22.  *
  23.  *    $Revision: 1.2.4.1 $
  24. **************************************************************************/
  25. #include <includes.h>
  26. #ifndef __LPC_USB_H
  27. #define __LPC_USB_H
  28. #ifdef LPC_USB_GLOBAL
  29. #define LPC_USB_EXTERN
  30. #else
  31. #define LPC_USB_EXTERN  extern
  32. #endif
  33. typedef enum
  34. {
  35.   USB_OK = 0,USB_PLL_ERROR,USB_INTR_ERROR,
  36. } USB_ErrorCodes_t;
  37. typedef enum
  38. {
  39.   CTRL_ENP_OUT=0, CTRL_ENP_IN,
  40.   ENP1_OUT      , ENP1_IN    ,
  41.   ENP2_OUT      , ENP2_IN    ,
  42.   ENP3_OUT      , ENP3_IN    ,
  43.   ENP4_OUT      , ENP4_IN    ,
  44.   ENP5_OUT      , ENP5_IN    ,
  45.   ENP6_OUT      , ENP6_IN    ,
  46.   ENP7_OUT      , ENP7_IN    ,
  47.   ENP8_OUT      , ENP8_IN    ,
  48.   ENP9_OUT      , ENP9_IN    ,
  49.   ENP10_OUT     , ENP10_IN   ,
  50.   ENP11_OUT     , ENP11_IN   ,
  51.   ENP12_OUT     , ENP12_IN   ,
  52.   ENP13_OUT     , ENP13_IN   ,
  53.   ENP14_OUT     , ENP14_IN   ,
  54.   ENP15_OUT     , ENP15_IN   ,
  55.   ENP_MAX_NUMB
  56. } USB_Endpoint_t;
  57. typedef enum
  58. {
  59.   USB_LowPrior = 0,
  60.   USB_HighPrior,
  61. } USB_IntrPriority_t;
  62. typedef enum
  63. {
  64.   USB_NotFast = 0,
  65.   USB_EP_Fast,
  66.   USB_FrameFast,
  67. } USB_DevIntrPriority_t;
  68. typedef union
  69. {
  70.   Int32U Data;
  71.   struct
  72.   {
  73.     Int32U Frame      : 1;
  74.     Int32U Fast       : 1;
  75.     Int32U Slow       : 1;
  76.     Int32U Status     : 1;
  77.     Int32U CcEmpty    : 1;
  78.     Int32U CdFull     : 1;
  79.     Int32U EpRx       : 1;
  80.     Int32U EpTx       : 1;
  81.     Int32U EpRealize  : 1;
  82.     Int32U Error      : 1;
  83.     Int32U            :22;
  84.   };
  85. }UsbDevIntrStat_t;
  86. typedef union
  87. {
  88.   Int8U Data;
  89.   struct
  90.   {
  91.     Int8U  Connect        : 1;
  92.     Int8U  ConnectChange  : 1;
  93.     Int8U  Suspend        : 1;
  94.     Int8U  SuspendChange  : 1;
  95.     Int8U  Reset          : 1;
  96.     Int8U                 : 3;
  97.   };
  98. }UsbDevStat_t;
  99. typedef enum
  100. {
  101.   UsbEp0Out = 0, UsbEp0In,
  102.   UsbEp1Out,  UsbEp1In,
  103.   UsbEp2Out,  UsbEp2In,
  104.   UsbEp3Out,  UsbEp3In,
  105.   UsbEp4Out,  UsbEp4In,
  106.   UsbEp5Out,  UsbEp5In,
  107.   UsbEp6Out,  UsbEp6In,
  108.   UsbEp7Out,  UsbEp7In,
  109.   UsbEp8Out,  UsbEp8In,
  110.   UsbEp9Out,  UsbEp9In,
  111.   UsbEp10Out, UsbEp10In,
  112.   UsbEp11Out, UsbEp11In,
  113.   UsbEp12Out, UsbEp12In,
  114.   UsbEp13Out, UsbEp13In,
  115.   UsbEp14Out, UsbEp14In,
  116.   UsbEp15Out, UsbEp15In,
  117.   UsbResetEvent,UsbConnectEvent,UsbSuspendEvent,
  118.   UsbErrorEvent,UsbSofEvent,UsbHighPrioIntrEvent,
  119.   UsbLastEvent
  120. }UsbUserEvent_t;
  121. typedef enum
  122. {
  123.   USB_DevConnectStatus = 0, USB_SuspendStatus, USB_ResetStatus
  124. } USB_DevStatusReqType_t;
  125. typedef Int32U UsbDefStatus_t;
  126. typedef void (* UserFunc_t)(void * Arg);
  127. #define CMD_USB_SEL_EP              0x00
  128. #define CMD_USB_SEL_CLR_INT_EP      0x40
  129. #define CMD_USB_SET_EP_STAT         0x140
  130. #define CMD_USB_SET_ADDRESS         0xD0
  131. #define CMD_USB_CFG_DEV             0xD8
  132. #define CMD_USB_CLR_BUF             0xF2
  133. #define CMD_USB_SET_MODE            0xF3
  134. #define CMD_USB_RD_FRAME_NUMB       0xF5
  135. #define CMD_USB_VAL_BUF             0xFA
  136. #define CMD_USB_RD_ERROR_STAT       0xFB
  137. #define CMD_USB_RD_TEST_REG         0xFD
  138. #define CMD_USB_SET_DEV_STAT        0x1FE
  139. #define CMD_USB_GET_DEV_STAT        0xFE
  140. #define CMD_USB_GET_ERROR           0xFF
  141. #define USB_CMD_WR                  0x00000500
  142. #define USB_DATA_WR                 0x00000100
  143. #define USB_DATA_RD                 0x00000200
  144. #define bmUSB_FrameInterrupt        0x00000001
  145. #define bmUSB_FastInterrupt         0x00000002
  146. #define bmUSB_SlowInterrupt         0x00000004
  147. #define bmUSB_DevStatusInterrupt    0x00000008
  148. #define bmUSB_CommRegEmptyInterrupt 0x00000010
  149. #define bmUSB_CommDataFullInterrupt 0x00000020
  150. #define bmUSB_RxPacketInterrupt     0x00000040
  151. #define bmUSB_TxPacketInterrupt     0x00000080
  152. #define bmUSB_EPRealizeInterrupt    0x00000100
  153. #define bmUSB_ErrorInterrupt        0x00000200
  154. #define bmUSB_Connect               0x00000001
  155. #define bmUSB_ConnectChange         0x00000002
  156. #define bmUSB_Suspend               0x00000004
  157. #define bmUSB_SuspendChange         0x00000008
  158. #define bmUSB_BusReset              0x00000010
  159. #define bmUSB_EpStall               0x00000001
  160. #define bmUSB_EpStallStatus         0x00000002
  161. #define bmUSB_EpSetupPacket         0x00000004
  162. #define bmUSB_EpPOStatus            0x00000010
  163. #define bmUSB_EpCondStall           0x00000080
  164. #define bmUSB_CtrlRdEna             0x00000001
  165. #define bmUSB_CtrlWrEna             0x00000002
  166. #define bmUSB_PacketOverWritten     0x00000001
  167. LPC_USB_EXTERN volatile Int32U USB_EpSoftPrio;
  168. extern UserFunc_t UsbUserFun[];
  169. #if USB_SOF_EVENT > 0
  170. LPC_USB_EXTERN volatile Int32U USB_SofNumbHold;
  171. #endif
  172. /*************************************************************************
  173.  * Function Name: USB_Cmd
  174.  * Parameters:  Int16U Command, Int8U Data
  175.  *
  176.  * Return: Int32U - command result
  177.  *
  178.  * Description: Implement commands transmit to USB Engine
  179.  *
  180.  *************************************************************************/
  181. Int32U USB_Cmd (Int16U Command, Int8U Data);
  182. /*************************************************************************
  183.  * Function Name: USB_UserFuncRegistered
  184.  * Parameters: UserFunc_t UserFunc, UsbUserEvent_t UserFuncInd
  185.  *
  186.  * Return: UserFunc_t
  187.  *
  188.  * Description: Registered User callback function
  189.  *
  190.  *************************************************************************/
  191. UserFunc_t USB_UserFuncRegistered (UserFunc_t UserFunc, UsbUserEvent_t UserFuncInd);
  192. /*************************************************************************
  193.  * Function Name: USB_EpIntrClr
  194.  * Parameters: USB_Endpoint_t EndPoint
  195.  *
  196.  * Return: Int8U
  197.  *
  198.  * Description: Clear the EP interrupt flag and return the current EP status
  199.  *
  200.  *************************************************************************/
  201. Int8U USB_EpIntrClr(USB_Endpoint_t EndPoint);
  202. /*************************************************************************
  203.  * Function Name: USB_HwInit
  204.  * Parameters: LPC_VicIrqSlots_t IntrSlot
  205.  *
  206.  * Return: none
  207.  *
  208.  * Description: Init USB
  209.  *
  210.  *************************************************************************/
  211. void USB_HwInit(LPC_VicIrqSlots_t IntrSlot);
  212. /*************************************************************************
  213.  * Function Name: USB_HwReset
  214.  * Parameters: none
  215.  *
  216.  * Return: none
  217.  *
  218.  * Description: Reset Usb engine
  219.  *
  220.  *************************************************************************/
  221. void USB_HwReset (void);
  222. /*************************************************************************
  223.  * Function Name: USB_SetEpPrio
  224.  * Parameters: USB_Endpoint_t EndPoint,Boolean EpPrio
  225.  *
  226.  * Return: none
  227.  *
  228.  * Description: Set Endpoint priority
  229.  *
  230.  *************************************************************************/
  231. inline void USB_SetEpPrio (USB_Endpoint_t EndPoint,Boolean EpPrio);
  232. /*************************************************************************
  233.  * Function Name: USB_RealizeEndPoint
  234.  * Parameters: USB_Endpoint_t EndPoint, Boolean EpPrio,
  235.  *                Int32U MaxPacketSize, Boolean IntrEna
  236.  *
  237.  * Return: none
  238.  *
  239.  * Description: Enable or disable endpoint
  240.  *
  241.  *************************************************************************/
  242. void USB_RealizeEndPoint( USB_Endpoint_t EndPoint, Boolean EpPrio,
  243.                              Int32U MaxPacketSize, Boolean IntrEna);
  244. /*************************************************************************
  245.  * Function Name: USB_ClearBuffer
  246.  * Parameters: USB_Endpoint_t EndPoint - endpoiunt index
  247.  *
  248.  * Return: Int32U Packet overwrite statrus
  249.  *
  250.  * Description: Clear buffer of the corresponding endpoint
  251.  *
  252.  *************************************************************************/
  253. Int32U USB_ClearBuffer(USB_Endpoint_t EndPoint);
  254. /*************************************************************************
  255.  * Function Name: USB_ValidateBuffer
  256.  * Parameters: USB_Endpoint_t EndPoint - endpoiunt index
  257.  *
  258.  * Return: none
  259.  *
  260.  * Description: Validate buffer(only for IN Endpoints)
  261.  *
  262.  *************************************************************************/
  263. void USB_ValidateBuffer(USB_Endpoint_t EndPoint);
  264. /*************************************************************************
  265.  * Function Name: USB_SetAdd
  266.  * Parameters: Int32U DevAdd - device address between 0 - 127
  267.  *
  268.  * Return: none
  269.  *
  270.  * Description: Set device address
  271.  *
  272.  *************************************************************************/
  273. void USB_SetAdd(Int32U DevAdd);
  274. #define USB_SetDefAdd() USB_SetAdd(0)
  275. /*************************************************************************
  276.  * Function Name: USB_Connect
  277.  * Parameters: Boolean Conn
  278.  *
  279.  * Return: none
  280.  *
  281.  * Description: Connect Usb
  282.  *
  283.  *************************************************************************/
  284. void USB_Connect (Boolean Conn);
  285. /*************************************************************************
  286.  * Function Name: USB_Configure
  287.  * Parameters: Boolean Configure
  288.  *
  289.  * Return: none
  290.  *
  291.  * Description: Configure device
  292.  *  When Configure != 0 enable all Realize Ep
  293.  *
  294.  *************************************************************************/
  295. void USB_Configure (Boolean Configure);
  296. /*************************************************************************
  297.  * Function Name: USB_WakeUp
  298.  * Parameters: none
  299.  *
  300.  * Return: none
  301.  *
  302.  * Description: Wake up Usb
  303.  *
  304.  *************************************************************************/
  305. void USB_WakeUp (void);
  306. /*************************************************************************
  307.  * Function Name: USB_GetDevStatus
  308.  * Parameters: USB_DevStatusReqType_t Type
  309.  *
  310.  * Return: Boolean
  311.  *
  312.  * Description: Return USB device status
  313.  *
  314.  *************************************************************************/
  315. Boolean USB_GetDevStatus (USB_DevStatusReqType_t Type);
  316. /*************************************************************************
  317.  * Function Name: USB_SetStallEP
  318.  * Parameters: USB_Endpoint_t EndPoint, Boolean Stall
  319.  *
  320.  * Return: none
  321.  *
  322.  * Description: The endpoint stall/unstall
  323.  *
  324.  *************************************************************************/
  325. void USB_SetStallEP (USB_Endpoint_t EndPoint, Boolean Stall);
  326. /*************************************************************************
  327.  * Function Name: USB_GetStallEP
  328.  * Parameters: USB_Endpoint_t EndPoint
  329.  *
  330.  * Return: Boolean
  331.  *
  332.  * Description: Get stall state of the endpoint
  333.  *
  334.  *************************************************************************/
  335. Boolean USB_GetStallEP (USB_Endpoint_t EndPoint);
  336. /*************************************************************************
  337.  * Function Name: USB_EpWrite
  338.  * Parameters: USB_Endpoint_t EndPoint, Int32U * pData, Int32U Count
  339.  *
  340.  * Return: none
  341.  *
  342.  * Description: Endpoint Write (IN)
  343.  *
  344.  *************************************************************************/
  345. void USB_EpWrite (USB_Endpoint_t EndPoint, Int32U * pData, Int32U Count);
  346. /*************************************************************************
  347.  * Function Name: USB_EpRead
  348.  * Parameters: USB_Endpoint_t EndPoint, Int32U * pData, Int32U Count
  349.  *
  350.  * Return: Int32
  351.  *
  352.  * Description: Endpoint Read (OUT)
  353.  *
  354.  *************************************************************************/
  355. Int32U USB_EpRead (USB_Endpoint_t EndPoint, Int32U * pData, Int32U Count);
  356. /*************************************************************************
  357.  * Function Name: USB_ISR
  358.  * Parameters: none
  359.  *
  360.  * Return: none
  361.  *
  362.  * Description: USB interrupt subroutine
  363.  *
  364.  *************************************************************************/
  365. void USB_ISR (void);
  366. /*************************************************************************
  367.  * Function Name: USB_EpLogToPhysAdd
  368.  * Parameters: Int8U EpLogAdd
  369.  *
  370.  * Return: USB_Endpoint_t
  371.  *
  372.  * Description: Convert the logical to physical address
  373.  *
  374.  *************************************************************************/
  375. USB_Endpoint_t USB_EpLogToPhysAdd (Int8U EpLogAdd);
  376. /*************************************************************************
  377.  * Function Name: USB_GetFrameNumb
  378.  * Parameters: none
  379.  *
  380.  * Return: Int32U
  381.  *
  382.  * Description: Retunr curent value of SOF number
  383.  *
  384.  *************************************************************************/
  385. #if USB_SOF_EVENT > 0
  386. Int32U USB_GetFrameNumb (void);
  387. #endif
  388. #if USB_DMA > 0
  389. typedef enum
  390. {
  391.   UsbDmaNoServiced = 0,UsbDmaBeingServiced,
  392.   UsbDmaNormalCompletion, UsbDmaDataUnderrun,
  393.   UsbDmaDataOverrun = 8, UsbDmaSystemError,
  394.   UsbDmaParametersError,
  395. } UsbDmaStateCode_t;
  396. typedef enum
  397. {
  398.   UsbDmaNormalMode = 0, UsbDmaAtleMode,
  399. } UsbDmaMode_t;
  400. #pragma pack(1)
  401. typedef struct
  402. {
  403. Int32U PacketLength  :16;
  404. Int32U PacketValid   : 1;
  405. Int32U FrameNumb  :15;
  406. } DmaIsoPacket_t, *pDmaIsoPacket_t;
  407. typedef struct
  408. {
  409. void * pNextDD;
  410. union
  411. {
  412. Int32U Ctrl;
  413. struct
  414. {
  415. Int32U DmaMode      : 2;
  416. Int32U NextDDValid    : 1;
  417. Int32U        : 1;
  418. Int32U Isochronous    : 1;
  419. Int32U MaxPacketSize  :11;
  420. Int32U DmaBufferLegtn :16;
  421. };
  422. };
  423. pInt32U pDmaBuffer;
  424. union
  425. {
  426. Int32U Status;
  427. struct
  428. {
  429. Int32U DdRetired : 1;
  430. Int32U DdState  : 4;
  431. Int32U PacketValid : 1;
  432. Int32U LsByteExtr : 1;
  433. Int32U MsByteExtr : 1;
  434. Int32U MessLenPos : 6;
  435. Int32U   : 2;
  436. Int32U PresentCnt :16;
  437. };
  438. };
  439. pDmaIsoPacket_t pDmaIsoPacket;
  440. } USB_DmaDesc_t, *pUSB_DmaDesc_t;
  441. #pragma pack()
  442. /*************************************************************************
  443.  * Function Name: USB_DmaReset
  444.  * Parameters:  Int32U IntrEna
  445.  *
  446.  * Return: none
  447.  *
  448.  * Description: Reset USB DMA
  449.  *
  450.  *************************************************************************/
  451. void USB_DmaReset (Int32U IntrEna);
  452. /*************************************************************************
  453.  * Function Name: USB_DmaInitTransfer
  454.  * Parameters: USB_Endpoint_t EndPoint, Int32U DmaDescInd,
  455.  *             pInt32U pData, Int32U EpMaxSize, Int32U Size
  456.  *             pDmaIsoPacket_t pDmaIsoPacket,  Boolean EpTransferType
  457.  *
  458.  * Return: UsbDmaStateCode_t
  459.  *
  460.  * Description: Init Transfer by DMA
  461.  *
  462.  *************************************************************************/
  463. UsbDmaStateCode_t USB_DmaInitTransfer (USB_Endpoint_t EndPoint,
  464.           Int32U DmaDescInd, pInt32U pData, Int32U EpMaxSize, Int32U Size,
  465.           pDmaIsoPacket_t pDmaIsoPacket, Boolean EpTransferType);
  466. /*************************************************************************
  467.  * Function Name: USB_DmaRestattTransfer
  468.  * Parameters: USB_Endpoint_t EndPoint, Int32U DmaDescInd,
  469.  *             pInt32U pData, Int32U EpMaxSize, Int32U Size
  470.  *             pDmaIsoPacket_t pDmaIsoPacket,  Boolean EpTransferType
  471.  *
  472.  * Return: none
  473.  *
  474.  * Description: Restart DMA Transfer
  475.  *
  476.  *************************************************************************/
  477. void USB_DmaRestattTransfer (USB_Endpoint_t EndPoint,Int32U DmaDescInd);
  478. /*************************************************************************
  479.  * Function Name: USB_DmaGetDesc
  480.  * Parameters: Int32U DmaDescInd
  481.  *
  482.  * Return: pUSB_DmaDesc_t
  483.  *
  484.  * Description: Retur pointer to DMA deskriptor
  485.  *
  486.  *************************************************************************/
  487. pUSB_DmaDesc_t USB_DmaGetDesc (Int32U DmaDescInd);
  488. /*************************************************************************
  489.  * Function Name: USB_DmaDisable
  490.  * Parameters: USB_Endpoint_t EndPoint
  491.  *
  492.  * Return: none
  493.  *
  494.  * Description: Disable DMA transfer for the EP
  495.  *
  496.  *************************************************************************/
  497. void USB_DmaDisable (USB_Endpoint_t EndPoint);
  498. #endif  // USB_DMA
  499. #endif //__LPC_USB_H