1 /*----------------------------------------------------------------------------
\r
2 * U S B - K e r n e l
\r
3 *----------------------------------------------------------------------------
\r
5 * Purpose: USB Hardware Layer Definitions
\r
7 *----------------------------------------------------------------------------
\r
8 * This software is supplied "AS IS" without any warranties, express,
\r
9 * implied or statutory, including but not limited to the implied
\r
10 * warranties of fitness for purpose, satisfactory quality and
\r
11 * noninfringement. Keil extends you a royalty-free right to reproduce
\r
12 * and distribute executable files created using this software for use
\r
13 * on NXP Semiconductors LPC family microcontroller devices only. Nothing
\r
14 * else gives you the right to use this software.
\r
16 * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
\r
17 *----------------------------------------------------------------------------
\r
19 * V1.20 Added USB_ClearEPBuf
\r
20 * V1.00 Initial Version
\r
21 *----------------------------------------------------------------------------*/
\r
25 #include "lpc_types.h"
\r
27 /* USB RAM Definitions */
\r
28 #define USB_RAM_ADR 0x20080000 /* USB RAM Start Address */
\r
29 #define USB_RAM_SZ 0x00004000 /* USB RAM Size (4kB) */
\r
31 /* DMA Endpoint Descriptors */
\r
32 #define DD_NISO_CNT 16 /* Non-Iso EP DMA Descr. Count (max. 32) */
\r
33 #define DD_ISO_CNT 8 /* Iso EP DMA Descriptor Count (max. 32) */
\r
34 #define DD_NISO_SZ (DD_NISO_CNT * 16) /* Non-Iso DMA Descr. Size */
\r
35 #define DD_ISO_SZ (DD_ISO_CNT * 20) /* Iso DMA Descriptor Size */
\r
36 #define DD_NISO_ADR (USB_RAM_ADR + 128) /* Non-Iso DMA Descr. Address */
\r
37 #define DD_ISO_ADR (DD_NISO_ADR + DD_NISO_SZ) /* Iso DMA Descr. Address */
\r
38 #define DD_SZ (128 + DD_NISO_SZ + DD_ISO_SZ) /* Descr. Size */
\r
40 /* DMA Buffer Memory Definitions */
\r
41 #define DMA_BUF_ADR (USB_RAM_ADR + DD_SZ) /* DMA Buffer Start Address */
\r
42 #define DMA_BUF_SZ (USB_RAM_SZ - DD_SZ) /* DMA Buffer Size */
\r
44 /* USB Error Codes */
\r
45 #define USB_ERR_PID 0x0001 /* PID Error */
\r
46 #define USB_ERR_UEPKT 0x0002 /* Unexpected Packet */
\r
47 #define USB_ERR_DCRC 0x0004 /* Data CRC Error */
\r
48 #define USB_ERR_TIMOUT 0x0008 /* Bus Time-out Error */
\r
49 #define USB_ERR_EOP 0x0010 /* End of Packet Error */
\r
50 #define USB_ERR_B_OVRN 0x0020 /* Buffer Overrun */
\r
51 #define USB_ERR_BTSTF 0x0040 /* Bit Stuff Error */
\r
52 #define USB_ERR_TGL 0x0080 /* Toggle Bit Error */
\r
54 /* USB DMA Status Codes */
\r
55 #define USB_DMA_INVALID 0x0000 /* DMA Invalid - Not Configured */
\r
56 #define USB_DMA_IDLE 0x0001 /* DMA Idle - Waiting for Trigger */
\r
57 #define USB_DMA_BUSY 0x0002 /* DMA Busy - Transfer in progress */
\r
58 #define USB_DMA_DONE 0x0003 /* DMA Transfer Done (no Errors)*/
\r
59 #define USB_DMA_OVER_RUN 0x0004 /* Data Over Run */
\r
60 #define USB_DMA_UNDER_RUN 0x0005 /* Data Under Run (Short Packet) */
\r
61 #define USB_DMA_ERROR 0x0006 /* Error */
\r
62 #define USB_DMA_UNKNOWN 0xFFFF /* Unknown State */
\r
64 /* USB DMA Descriptor */
\r
65 typedef struct _USB_DMA_DESCRIPTOR {
\r
66 uint32_t BufAdr; /* DMA Buffer Address */
\r
67 uint16_t BufLen; /* DMA Buffer Length */
\r
68 uint16_t MaxSize; /* Maximum Packet Size */
\r
69 uint32_t InfoAdr; /* Packet Info Memory Address */
\r
70 union { /* DMA Configuration */
\r
72 uint32_t Link : 1; /* Link to existing Descriptors */
\r
73 uint32_t IsoEP : 1; /* Isonchronous Endpoint */
\r
74 uint32_t ATLE : 1; /* ATLE (Auto Transfer Length Extract) */
\r
75 uint32_t Rsrvd : 5; /* Reserved */
\r
76 uint32_t LenPos : 8; /* Length Position (ATLE) */
\r
80 } USB_DMA_DESCRIPTOR;
\r
82 /* USB Hardware Functions */
\r
83 extern void USB_Init (void);
\r
84 extern void USB_Connect (uint32_t con);
\r
85 extern void USB_Reset (void);
\r
86 extern void USB_Suspend (void);
\r
87 extern void USB_Resume (void);
\r
88 extern void USB_WakeUp (void);
\r
89 extern void USB_WakeUpCfg (uint32_t cfg);
\r
90 extern void USB_SetAddress (uint32_t adr);
\r
91 extern void USB_Configure (uint32_t cfg);
\r
92 extern void USB_ConfigEP (USB_ENDPOINT_DESCRIPTOR *pEPD);
\r
93 extern void USB_DirCtrlEP (uint32_t dir);
\r
94 extern void USB_EnableEP (uint32_t EPNum);
\r
95 extern void USB_DisableEP (uint32_t EPNum);
\r
96 extern void USB_ResetEP (uint32_t EPNum);
\r
97 extern void USB_SetStallEP (uint32_t EPNum);
\r
98 extern void USB_ClrStallEP (uint32_t EPNum);
\r
99 extern void USB_ClearEPBuf (uint32_t EPNum);
\r
100 extern uint32_t USB_ReadEP (uint32_t EPNum, uint8_t *pData);
\r
101 extern uint32_t USB_WriteEP (uint32_t EPNum, uint8_t *pData, uint32_t cnt);
\r
102 extern uint32_t USB_DMA_Setup (uint32_t EPNum, USB_DMA_DESCRIPTOR *pDD);
\r
103 extern void USB_DMA_Enable (uint32_t EPNum);
\r
104 extern void USB_DMA_Disable(uint32_t EPNum);
\r
105 extern uint32_t USB_DMA_Status (uint32_t EPNum);
\r
106 extern uint32_t USB_DMA_BufAdr (uint32_t EPNum);
\r
107 extern uint32_t USB_DMA_BufCnt (uint32_t EPNum);
\r
108 extern uint32_t USB_GetFrame (void);
\r
109 extern void USB_IRQHandler (void);
\r
112 #endif /* __USBHW_H__ */
\r