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

📄 str91x_usb.h

📁 最新版IAR FOR ARM(EWARM)5.11中的代码例子
💻 H
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2006
 *
 *    File name   : STR91x_usb.h
 *    Description : usb module header file
 *
 *    History :
 *    1. Date        : September 29, 2006
 *       Author      : Stanimir Bonev
 *       Description : Create
 *
 *    $Revision: 16170 $
 **************************************************************************/

#include "includes.h"
#include "usb_9.h"

#ifndef __STR91X_USB_H
#define __STR91X_USB_H

#ifdef HAL_USB_GLOBAL
#define HAL_USB_EXTERN
#else
#define HAL_USB_EXTERN  extern
#endif

#define MSG_FILE stdout

#if USB_TRACE_LM_EN != 0
#define  USB_LM_TRACE_INFO(...)   fprintf(MSG_FILE,  __VA_ARGS__)
#else
#define  USB_LM_TRACE_INFO(...)
#endif

#if USB_TRACE_LW_EN != 0
#define  USB_LW_TRACE_INFO(...)   fprintf(MSG_FILE,  __VA_ARGS__)
#else
#define  USB_LW_TRACE_INFO(...)
#endif

#if USB_TRACE_LE_EN != 0
#define  USB_LE_TRACE_INFO(...)   fprintf(MSG_FILE,  __VA_ARGS__)
#else
#define  USB_LE_TRACE_INFO(...)
#endif

#if USB_TRACE_T9M_EN != 0
#define  USB_T9M_TRACE_INFO(...)   fprintf(MSG_FILE,  __VA_ARGS__)
#else
#define  USB_T9M_TRACE_INFO(...)
#endif

#if USB_TRACE_T9W_EN != 0
#define  USB_T9W_TRACE_INFO(...)   fprintf(MSG_FILE,  __VA_ARGS__)
#else
#define  USB_T9W_TRACE_INFO(...)
#endif

#if USB_TRACE_T9E_EN != 0
#define  USB_T9E_TRACE_INFO(...)   fprintf(MSG_FILE,  __VA_ARGS__)
#else
#define  USB_T9E_TRACE_INFO(...)
#endif

#include "io_macros.h"

/* USB control register (USB_CNTR) */
typedef struct{
__REG16 FRES     : 1;
__REG16 PDWN     : 1;
__REG16 LP_MODE  : 1;
__REG16 FSUSP    : 1;
__REG16 RESUME   : 1;
__REG16          : 2;
__REG16 SZDPRM   : 1;
__REG16 ESOFM    : 1;
__REG16 SOFM     : 1;
__REG16 RESETM   : 1;
__REG16 SUSPM    : 1;
__REG16 WKUPM    : 1;
__REG16 ERRM     : 1;
__REG16 DOVRM    : 1;
__REG16 CTRM     : 1;
} __usb_cntr_bits;

/* USB Interrupt Status Register (USB_ISTR) */
typedef struct{
__REG16 EP_ID  : 4;
__REG16 DIR    : 1;
__REG16        : 2;
__REG16 SZDPR  : 1;
__REG16 ESOF   : 1;
__REG16 SOF    : 1;
__REG16 RESET  : 1;
__REG16 SUSP   : 1;
__REG16 WKUP   : 1;
__REG16 ERR    : 1;
__REG16 DOVR   : 1;
__REG16 CTR    : 1;
} __usb_st_bits;

/* USB Frame Number Register (USB_FNR) */
typedef struct{
__REG16 FN    :11;
__REG16 LSOF  : 2;
__REG16 LCK   : 1;
__REG16 RXDM  : 1;
__REG16 RXDP  : 1;
} __usb_fnr_bits;

/* USB device address (USB_DADDR) */
typedef struct{
__REG16 ADD  : 7;
__REG16 EF   : 1;
__REG16      : 8;
} __usb_daddr_bits;

/* Buffer table address (USB_BTABLE) */
typedef struct{
__REG16         : 3;
__REG16 BTABLE  :13;
} __usb_btable_bits;

/* USB Endpoint n Register (USB_EPnR) */
typedef struct{
__REG16 EA       : 4;
__REG16 STAT_TX  : 2;
__REG16 DTOG_TX  : 1;
__REG16 CTR_TX   : 1;
__REG16 EP_KIND  : 1;
__REG16 EP_TYPE  : 2;
__REG16 SETUP    : 1;
__REG16 STAT_RX  : 2;
__REG16 DTOG_RX  : 1;
__REG16 CTR_RX   : 1;
} __usb_epr_bits;

/* DMA control register 1 (USB_DMACR1) */
typedef struct{
__REG16 DMA_UNLK_RK_EN  :10;
__REG16                 : 6;
} __usb_dmacr1_bits;

/* DMA control register 2 (USB_DMACR2) */
typedef struct{
__REG16 UNLNK_TX_EP_ID1  : 4;
__REG16 UNLNK_TX_EP_ID2  : 4;
__REG16 UNLNK_TX_EP_ID3  : 4;
__REG16 DMA_UNLK_TX_EN   : 2;
__REG16                  : 2;
} __usb_dmacr2_bits;

/* DMA control register 3 (USB_DMACR3) */
typedef struct{
__REG16 LK_TX_EN      : 1;
__REG16 LK_TX_EP_ID   : 4;
__REG16 DMA_LK_TX_EN  : 1;
__REG16 SLE           : 1;
__REG16               : 1;
__REG16 LK_RX_EN      : 1;
__REG16 LK_RX_EP_ID   : 4;
__REG16 DMA_LK_RX_EN  : 1;
__REG16 SR_TX         : 1;
__REG16 SR_RX         : 1;
} __usb_dmacr3_bits;

/* DMA burst size register (USB_DMABSIZE) */
typedef struct{
__REG16 SBSIZE           : 3;
__REG16                  : 1;
__REG16 DBSIZE           : 3;
__REG16                  : 1;
__REG16 LLI_RX_NPACKETS  : 8;
} __usb_dmabsize_bits;

/* DMA LLI register (USB_DMALLI) */
typedef struct{
__REG16 LLI_TX_LNG  : 8;
__REG16 LLI_RX_LNG  : 8;
} __usb_dmalli_bits;

/***************************************************************************
 **
 **  USB
 **
 ***************************************************************************/
__IO_REG16_BIT(USB_EP0R,            0x70000800,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_EP1R,            0x70000804,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_EP2R,            0x70000808,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_EP3R,            0x7000080C,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_EP4R,            0x70000810,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_EP5R,            0x70000814,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_EP6R,            0x70000818,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_EP7R,            0x7000081C,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_EP8R,            0x70000820,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_EP9R,            0x70000824,__READ_WRITE,__usb_epr_bits);
__IO_REG16_BIT(USB_CNTR,            0x70000840,__READ_WRITE,__usb_cntr_bits);
__IO_REG16_BIT(USB_ISTR,            0x70000844,__READ_WRITE,__usb_st_bits);
__IO_REG16_BIT(USB_FNR,             0x70000848,__READ      ,__usb_fnr_bits);
__IO_REG16_BIT(USB_DADDR,           0x7000084C,__READ_WRITE,__usb_daddr_bits);
__IO_REG16_BIT(USB_BTABLE,          0x70000850,__READ_WRITE,__usb_btable_bits);
__IO_REG16_BIT(USB_DMACR1,          0x70000854,__READ_WRITE,__usb_dmacr1_bits);
__IO_REG16_BIT(USB_DMACR2,          0x70000858,__READ_WRITE,__usb_dmacr2_bits);
__IO_REG16_BIT(USB_DMACR3,          0x7000085C,__READ_WRITE,__usb_dmacr3_bits);
__IO_REG16_BIT(USB_DMABSIZE,        0x70000860,__READ_WRITE,__usb_dmabsize_bits);
__IO_REG16_BIT(USB_DMALLI,          0x70000864,__READ_WRITE,__usb_dmalli_bits);

#define AddrTxOffset    0
#define AddrRxOffset    2
#define CountTxOffset   4
#define CountRxOffset   6

#define USB_RESUME_DLY  8

#define USB_OffsetOfDBT ((Int32U) __segment_size("USB_PACKET_MEMORY") - (sizeof(USB_BuffDeskTbl_t) * (MaxIndOfRealizeEp+1)) & ~7)

#define ReadEpDTB(Slot,Offset)  (*((pInt16U)((Int32U)__segment_begin("USB_PACKET_MEMORY") + (USB_OffsetOfDBT + (Slot)*sizeof(USB_BuffDeskTbl_t)  + (Offset)))))

#define ReadEpDTB_AddrRx(Slot)        ReadEpDTB(Slot,AddrRxOffset)
#define ReadEpDTB_CountRx(Slot)       ReadEpDTB(Slot,CountRxOffset)
#define ReadEpDTB_AddrTx(Slot)        ReadEpDTB(Slot,AddrTxOffset)
#define ReadEpDTB_CountTx(Slot)       ReadEpDTB(Slot,CountTxOffset)

#define WriteEpDTB_AddrRx(Slot,Data)  WriteEpDTB(Slot,AddrRxOffset,Data)
#define WriteEpDTB_CountRx(Slot,Data) WriteEpDTB(Slot,CountRxOffset,Data)
#define WriteEpDTB_AddrTx(Slot,Data)  WriteEpDTB(Slot,AddrTxOffset,Data)
#define WriteEpDTB_CountTx(Slot,Data) WriteEpDTB(Slot,CountTxOffset,Data)

#define USB_CTRL_RW_MASK              0x070F
#define USB_CTRL_CLEAR_ONLY_MASK      0x8080
#define USB_CTRL_TOGGLE_MASK          0x7070

typedef enum _USB_PacketType_t
{
	// Packet type parameters
  UsbSetupPacket = 0,UsbDataOutPacket,UsbDataInPacket,UsbDmaPacket,
} USB_PacketType_t;

typedef enum _USB_ErrorCodes_t
{
  USB_OK = 0,USB_PLL_ERROR, USB_INTR_ERROR,
  USB_EP_OCCUPIER, USB_MEMORY_FULL, USB_EP_NOT_VALID,
  USB_EP_OVERRUN, UB_EP_SETUP_UNDERRUN,
  USB_EP_STALLED, UB_EP_SETUP_OVERWRITE,
  USB_EP_FATAL_ERROR,
} USB_ErrorCodes_t;

typedef enum _EpType_t
{
  EP_BULK_SING_BUFF = 0, EP_CTRL, EP_ISO,
  EP_INTERRUPT, EP_BULK_DOUB_BUF,
} EpType_t;

typedef enum _EpSlot_t
{
  EP_SLOT0 = 0, EP_SLOT1, EP_SLOT2, EP_SLOT3, EP_SLOT4,
  EP_SLOT5, EP_SLOT6, EP_SLOT7, EP_SLOT8, EP_SLOT9,
  EP_MAX_SLOTS
} EpSlot_t;

typedef enum _EpState_t
{
  EP_DISABLED = 0, EP_STALL, EP_NAK, EP_VALID
} EpState_t;

typedef enum _USB_Endpoint_t
{
  CTRL_ENP_OUT=0, CTRL_ENP_IN,
  ENP1_OUT      , ENP1_IN    ,
  ENP2_OUT      , ENP2_IN    ,
  ENP3_OUT      , ENP3_IN    ,
  ENP4_OUT      , ENP4_IN    ,
  ENP5_OUT      , ENP5_IN    ,
  ENP6_OUT      , ENP6_IN    ,
  ENP7_OUT      , ENP7_IN    ,
  ENP8_OUT      , ENP8_IN    ,
  ENP9_OUT      , ENP9_IN    ,
  ENP10_OUT     , ENP10_IN   ,
  ENP11_OUT     , ENP11_IN   ,
  ENP12_OUT     , ENP12_IN   ,
  ENP13_OUT     , ENP13_IN   ,
  ENP14_OUT     , ENP14_IN   ,
  ENP15_OUT     , ENP15_IN   ,
  ENP_MAX_NUMB
} USB_Endpoint_t;

typedef enum _UsbUserEvent_t
{
  UsbEp0Out = 0 , UsbEp0In,
  UsbEp1Out     , UsbEp1In,
  UsbEp2Out     , UsbEp2In,
  UsbEp3Out     , UsbEp3In,
  UsbEp4Out     , UsbEp4In,
  UsbEp5Out     , UsbEp5In,
  UsbEp6Out     , UsbEp6In,
  UsbEp7Out     , UsbEp7In,
  UsbEp8Out     , UsbEp8In,
  UsbEp9Out     , UsbEp9In,
  UsbEp10Out    , UsbEp10In,
  UsbEp11Out    , UsbEp11In,
  UsbEp12Out    , UsbEp12In,
  UsbEp13Out    , UsbEp13In,
  UsbEp14Out    , UsbEp14In,
  UsbEp15Out    , UsbEp15In,
  UsbClassEp0OutPacket,
  UsbVendorEp0OutPacket,
  UsbUserSofEvent,
  UsbUserClass,
  UsbUserVendor,
  UsbUserGetDescriptor,
  UsbUserConfigure,
  UsbUserReset,
  UsbUserConnect,
  UsbUserSuspend,
  UsbUserEpStall,
  UsbUserEpUnStall,
  UsbLastEvent,
}UsbUserEvent_t;

typedef enum _USB_DevStatusReqType_t
{
  USB_DevConnectStatus = 0, USB_SuspendStatus, USB_ResetStatus
} USB_DevStatusReqType_t;

typedef enum _UsbResumeEvent_t
{
  USB_RESUME_SOF_EVENT = 0, USB_RESUME_SOFT_EVENT,
  USB_RESUME_WAKE_UP_EVENT,
} UsbResumeEvent_t, *pUsbResumeEvent_t;

typedef union _RxCount_t
{
  Int16U Count;
  struct
  {
    Int16U CountField     : 10;
    Int16U NubBlockField  :  5;
    Int16U BlSizeField    :  1;
  };
} RxCount_t, *pRxCount_t;

typedef struct _PacketMemUse_t
{
  USB_Endpoint_t RpAddr;
  Int16U         Start;
  Int16U         Size;
  struct _PacketMemUse_t * pNext;
} PacketMemUse_t, *pPacketMemUse_t;

typedef struct _EpInfo_t
{
  volatile pInt32U    pEpCtrl;
           EpSlot_t   EpSlot;
           Int32U     MaxSize;
           EpType_t   EpType;
           Int32U     EpIntrFl;
} EpInfo_t, *pEpInfo_t;


#pragma pack(1)
typedef struct _USB_BuffDeskTbl_t
{
  Int16U    AddrTx;
  Int16U    AddrRx;
  Int16U    CountTx;
  RxCount_t CountRx;
} USB_BuffDeskTbl_t, *pUSB_BuffDeskTbl_t;
#pragma pack()

typedef union _pIntrStatus_t
{
  Int32U Status;
  struct {
    Int32U EP_ID  : 4;
    Int32U DIR    : 1;
    Int32U        : 2;
    Int32U SZDPR  : 1;
    Int32U ESOF   : 1;
    Int32U SOF    : 1;
    Int32U RESET  : 1;
    Int32U SUSP   : 1;
    Int32U WKUP   : 1;
    Int32U ERR    : 1;
    Int32U DOVR   : 1;
    Int32U CTR    : 1;
    Int32U        :16;
  };
} IntrStatus_t, *pIntrStatus_t;

typedef Int32U UsbDefStatus_t;
typedef void * (* UserFunc_t)(void * Arg);

#define bmCTRM                      0x8000
#define bmDOVRM                     0x4000
#define bmERRM                      0x2000
#define bmWKUPM                     0x1000
#define bmSUSPM                     0x0800
#define bmRESETM                    0x0400
#define bmSOFM                      0x0200
#define bmESOFM                     0x0100

/*************************************************************************
 * Function Name: EpCtrlSet_EA
 * Parameters: volatile pInt32U pReg, Int32U Data
 *
 * Return: none
 *
 * Description: Set EP Addr
 *
 *************************************************************************/
void EpCtrlSet_EA(volatile pInt32U pReg, Int32U Data);

/*************************************************************************
 * Function Name: EpCtrlGet_EA
 * Parameters: volatile pInt32U pReg
 *
 * Return: Int16U
 *
 * Description: Get EP Addr
 *
 *************************************************************************/
inline
Int16U EpCtrlGet_EA(volatile pInt32U pReg);

/*************************************************************************
 * Function Name: EpCtrlSet_STAT_TX
 * Parameters: volatile pInt32U pReg, EpState_t Data
 *
 * Return: none
 *
 * Description: Set EP IN State
 *
 *************************************************************************/
void EpCtrlSet_STAT_TX (volatile pInt32U pReg, EpState_t Data);

/*************************************************************************
 * Function Name: EpCtrlGet_STAT_TX
 * Parameters: volatile pInt32U pReg
 *
 * Return: Int32U
 *
 * Description: Get EP IN Status
 *
 *************************************************************************/
inline
Int32U EpCtrlGet_STAT_TX (volatile pInt32U pReg);

/*************************************************************************
 * Function Name: EpCtrlSet_DTOG_TX
 * Parameters: volatile pInt32U pReg, Int32U Data
 *

⌨️ 快捷键说明

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