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