These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usbhw.h Source File

usbhw.h

00001 /*----------------------------------------------------------------------------
00002  *      U S B  -  K e r n e l
00003  *----------------------------------------------------------------------------
00004  * Name:    usbhw.h
00005  * Purpose: USB Hardware Layer Definitions
00006  * Version: V1.20
00007  *----------------------------------------------------------------------------
00008  *      This software is supplied "AS IS" without any warranties, express,
00009  *      implied or statutory, including but not limited to the implied
00010  *      warranties of fitness for purpose, satisfactory quality and
00011  *      noninfringement. Keil extends you a royalty-free right to reproduce
00012  *      and distribute executable files created using this software for use
00013  *      on NXP Semiconductors LPC family microcontroller devices only. Nothing 
00014  *      else gives you the right to use this software.
00015  *
00016  * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
00017  *----------------------------------------------------------------------------
00018  * History:
00019  *          V1.20 Added USB_ClearEPBuf 
00020  *          V1.00 Initial Version
00021  *----------------------------------------------------------------------------*/
00022 
00023 #ifndef __USBHW_H__
00024 #define __USBHW_H__
00025 
00026 
00027 /* USB RAM Definitions */
00028 #define USB_RAM_ADR     0x20080000  /* USB RAM Start Address */
00029 #define USB_RAM_SZ      0x00004000  /* USB RAM Size (4kB) */
00030 
00031 /* DMA Endpoint Descriptors */
00032 #define DD_NISO_CNT             16  /* Non-Iso EP DMA Descr. Count (max. 32) */
00033 #define DD_ISO_CNT               8  /* Iso EP DMA Descriptor Count (max. 32) */
00034 #define DD_NISO_SZ    (DD_NISO_CNT * 16)    /* Non-Iso DMA Descr. Size */
00035 #define DD_ISO_SZ     (DD_ISO_CNT  * 20)    /* Iso DMA Descriptor Size */
00036 #define DD_NISO_ADR   (USB_RAM_ADR + 128)   /* Non-Iso DMA Descr. Address */
00037 #define DD_ISO_ADR    (DD_NISO_ADR + DD_NISO_SZ) /* Iso DMA Descr. Address */
00038 #define DD_SZ                 (128 + DD_NISO_SZ + DD_ISO_SZ) /* Descr. Size */
00039 
00040 /* DMA Buffer Memory Definitions */
00041 #define DMA_BUF_ADR   (USB_RAM_ADR + DD_SZ) /* DMA Buffer Start Address */
00042 #define DMA_BUF_SZ    (USB_RAM_SZ  - DD_SZ) /* DMA Buffer Size */
00043 
00044 /* USB Error Codes */
00045 #define USB_ERR_PID         0x0001  /* PID Error */
00046 #define USB_ERR_UEPKT       0x0002  /* Unexpected Packet */
00047 #define USB_ERR_DCRC        0x0004  /* Data CRC Error */
00048 #define USB_ERR_TIMOUT      0x0008  /* Bus Time-out Error */
00049 #define USB_ERR_EOP         0x0010  /* End of Packet Error */
00050 #define USB_ERR_B_OVRN      0x0020  /* Buffer Overrun */
00051 #define USB_ERR_BTSTF       0x0040  /* Bit Stuff Error */
00052 #define USB_ERR_TGL         0x0080  /* Toggle Bit Error */
00053 
00054 /* USB DMA Status Codes */
00055 #define USB_DMA_INVALID     0x0000  /* DMA Invalid - Not Configured */
00056 #define USB_DMA_IDLE        0x0001  /* DMA Idle - Waiting for Trigger */
00057 #define USB_DMA_BUSY        0x0002  /* DMA Busy - Transfer in progress */
00058 #define USB_DMA_DONE        0x0003  /* DMA Transfer Done (no Errors)*/
00059 #define USB_DMA_OVER_RUN    0x0004  /* Data Over Run */
00060 #define USB_DMA_UNDER_RUN   0x0005  /* Data Under Run (Short Packet) */
00061 #define USB_DMA_ERROR       0x0006  /* Error */
00062 #define USB_DMA_UNKNOWN     0xFFFF  /* Unknown State */
00063 
00064 /* USB DMA Descriptor */
00065 typedef struct _USB_DMA_DESCRIPTOR {
00066   uint32_t BufAdr;                     /* DMA Buffer Address */
00067   uint16_t  BufLen;                     /* DMA Buffer Length */
00068   uint16_t  MaxSize;                    /* Maximum Packet Size */
00069   uint32_t InfoAdr;                    /* Packet Info Memory Address */
00070   union {                           /* DMA Configuration */
00071     struct {
00072       uint32_t Link   : 1;             /* Link to existing Descriptors */
00073       uint32_t IsoEP  : 1;             /* Isonchronous Endpoint */
00074       uint32_t ATLE   : 1;             /* ATLE (Auto Transfer Length Extract) */
00075       uint32_t Rsrvd  : 5;             /* Reserved */
00076       uint32_t LenPos : 8;             /* Length Position (ATLE) */
00077     } Type;
00078     uint32_t Val;
00079   } Cfg;
00080 } USB_DMA_DESCRIPTOR;
00081 
00082 /* USB Hardware Functions */
00083 extern void  USB_Init       (void);
00084 extern void  USB_Connect    (uint32_t  con);
00085 extern void  USB_Reset      (void);
00086 extern void  USB_Suspend    (void);
00087 extern void  USB_Resume     (void);
00088 extern void  USB_WakeUp     (void);
00089 extern void  USB_WakeUpCfg  (uint32_t  cfg);
00090 extern void  USB_SetAddress (uint32_t adr);
00091 extern void  USB_Configure  (uint32_t  cfg);
00092 extern void  USB_ConfigEP   (USB_ENDPOINT_DESCRIPTOR *pEPD);
00093 extern void  USB_DirCtrlEP  (uint32_t dir);
00094 extern void  USB_EnableEP   (uint32_t EPNum);
00095 extern void  USB_DisableEP  (uint32_t EPNum);
00096 extern void  USB_ResetEP    (uint32_t EPNum);
00097 extern void  USB_SetStallEP (uint32_t EPNum);
00098 extern void  USB_ClrStallEP (uint32_t EPNum);
00099 extern void USB_ClearEPBuf  (uint32_t  EPNum);
00100 extern uint32_t USB_ReadEP     (uint32_t EPNum, uint8_t *pData);
00101 extern uint32_t USB_WriteEP    (uint32_t EPNum, uint8_t *pData, uint32_t cnt);
00102 extern uint32_t  USB_DMA_Setup  (uint32_t EPNum, USB_DMA_DESCRIPTOR *pDD);
00103 extern void  USB_DMA_Enable (uint32_t EPNum);
00104 extern void  USB_DMA_Disable(uint32_t EPNum);
00105 extern uint32_t USB_DMA_Status (uint32_t EPNum);
00106 extern uint32_t USB_DMA_BufAdr (uint32_t EPNum);
00107 extern uint32_t USB_DMA_BufCnt (uint32_t EPNum);
00108 extern uint32_t USB_GetFrame   (void);
00109 extern void  USB_IRQHandler (void);
00110 
00111 
00112 #endif  /* __USBHW_H__ */