⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb.h

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 H
字号:
#ifndef  _USB_H_
#define  _USB_H_

#include "Hw_define.h"
#include "UsbSpec.h"            //oli 2007-5-25 11:45
#include "UdcReg.h"             //oli 2007-5-25 11:45
#include "hw_interrupt.h"          //oli 2007-5-25 11:45



#define END_POINTER_NUM      4
//#define END_POINTER_NUM  16

#define WAIT_TX_BUF_AV(reg)  do{ }while( ReadReg32( reg ) & TxFULL   )
#define WAIT_DMA_DONE(reg)  do{ }while( ReadReg32( reg ) & ENP_DMASTATUS )

#define virt_to_phy(va)   (TransVAtoPA(va))      //oli 2007-9-26 15:22


#define ASSERT_SOFT_POR()  do { WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL) | SOFT_POR)); } while(0)
#define DEASSERT_SOFT_POR()  do { WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL) & ~SOFT_POR)); } while(0)
#define SET_PHY_16_BIT()  do { WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL) | DEV_PHY16BIT)); } while(0)

#ifdef SUPPORT_REMOTE_WAKEUP
#define SOFT_CONNECT()  do { WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL)|DEV_SELF_PWR|DEV_SOFT_CN|CSR_DONE|DEV_RMTWKP) ); } while(0)
#else
#define SOFT_CONNECT()  do { WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL)|DEV_SELF_PWR|DEV_SOFT_CN|CSR_DONE) );} while(0)
#endif // SUPPORT_REMOTE_WAKEUP

#ifdef SUPPORT_REMOTE_WAKEUP
#define SOFT_DISCONNECT()  do { WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL)|DEV_RMTWKP|DEV_SELF_PWR) ); WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL)&(~DEV_SOFT_CN)) );} while(0)
#else
#define SOFT_DISCONNECT()  do { WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL)|DEV_SELF_PWR) ); WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL)&(~DEV_SOFT_CN)) );} while(0)
#endif // SUPPORT_REMOTE_WAKEUP

#define USB_SOFT_DISCONNECT()       do { WriteReg32( UDC_DEVCTL, (ReadReg32(UDC_DEVCTL)|(~DEV_SOFT_CN)) ); } while(0)


#define IS_FULL_SPEED()   ( (ReadReg32( UDC_DEVINFO ) & ENUM_SPEED_MASK)==ENUM_FULL_SPEED )
#define IS_HIGH_SPEED()   ( (ReadReg32( UDC_DEVINFO ) & ENUM_SPEED_MASK)==ENUM_HIGH_SPEED )
#define ASSIGNED_ADDRESS()  ( ReadReg32( UDC_DEVINFO ) & DEV_ADDR )
#define VBUS_OK()    (( ReadReg32( UDC_DEVINFO ) & VBUS_STS ) ? TRUE : FALSE)
#define INTFLG                  (ReadReg32( UDC_INTFLG ))

#define RX0_STATUS              (ReadReg32( UDC_RX0STAT ))
#define TX0_STATUS              (ReadReg32( UDC_TX0STAT ))
#define RX1_STATUS              (ReadReg32( UDC_RX1STAT ))
#define TX2_STATUS              (ReadReg32( UDC_TX2STAT ))

#define TX0_STALL              (WriteReg32( UDC_TX0CON, ReadReg32( UDC_TX0CON ) | TxSTALL ))

#define YES      1
#define NO      0
#define SETUP_STAGE    11
#define DATA_STAGE    22
#define STATUS_STAGE   33

#define BK_BUF_SIZE    0x10000
#define BULK_BLOCK_SIZE   0x200
#define MAX_BK_NUM    (BK_BUF_SIZE/BULK_BLOCK_SIZE)

#define INTR_BUF_SIZE   0x10000
#define INTR_BLOCK_SIZE   0x20
#define MAX_INTR_NUM   (INTR_BUF_SIZE/INTR_BLOCK_SIZE)

#define CTRL_BUF_SIZE   0x10000
#define CTRL_BLOCK_SIZE   0x200
#define MAX_CTRL_NUM   (CTRL_BUF_SIZE/CTRL_BLOCK_SIZE)

#define VENDOR_TEST_OUT0  (0x1)
#define VENDOR_TEST_IN0   (0x2)
#define VENDOR_TEST_OUT1  (0x3)
#define VENDOR_TEST_IN2   (0x4)

#ifdef __cplusplus
extern "C"
{
#endif
#ifdef BOARD
#define USB_INSERT()    VBUS_OK()
#else
#define USB_INSERT()    0
#endif
    extern  void serial_printf(const char *fmt, ...);
    void UDCInit(void);
    void UDC_ISR(void);

    UINT32  UsbWriteCtlEP(UINT16 len, UINT8 * buf);
    void    UsbWriteDataEP(UINT16 len, UINT8 * buf);
    UINT32  UsbReadCtlEP(UINT16 len, UINT8 * buf);
    void    UsbReadyToReadDataEP(UINT8 * buf);
    void    UsbEnableRX(void);

#ifdef BOARD
    __inline void UsbClrCtlEP()
    {
        WriteReg32(UDC_TX0CON, ReadReg32(UDC_TX0CON) | TxCLR);
        WriteReg32(UDC_TX0CON, ReadReg32(UDC_TX0CON) & ~TxCLR);
        WriteReg32(UDC_RX0CON, ReadReg32(UDC_RX0CON) | RxCLR);
        WriteReg32(UDC_RX0CON, ReadReg32(UDC_RX0CON) & ~RxCLR);
    }

    __inline void UsbDisableEP0()
    {
        WriteReg32(UDC_TX0CON, ReadReg32(UDC_TX0CON) | TxNAK);
        WriteReg32(UDC_RX0CON, ReadReg32(UDC_RX0CON) | RxNAK);
    }
#endif
    void GetStatus(void);
    void ClearFeature(void);
    void SetFeature(void);
    void set_address(void);
    UINT32 UsbGetDescriptor(void);
    void GetConfiguration(void);
    void SetConfiguration(void);
    void GetInterface(void);
    void SetInterface(void);

//u32_t fn_get_device_id();
    UINT8   UsbGetLUN(void);
    UINT32  UsbGetCapacity(UINT8 LUN);
    void    UsbReadInit(UINT8 LUN, UINT32 LBA, UINT16 Len);
    void    UsbWriteInit(UINT8 LUN, UINT32 LBA, UINT16 Len);
    void*   UsbReadSec(void);
    void    UsbWriteSec(void *buf);

    void    Usb_PowerOnInit(void);
    void    UsbReset(void);
    void UsbSetupReq(void);
    void UsbIn0(void);
    void UsbOut0(void);
    void UsbIntrReq(UINT32 ch); // Interrupt IN request hanlder
    void UsbSuspend(void);
    void UsbResume(void);
    void UsbVbusIntr(void);
    void    UsbCtlSetZeroData(INT32 len);
#endif // _USB_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -