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

📄 hcd.h

📁 smartARM2400 USB host例程
💻 H
📖 第 1 页 / 共 2 页
字号:
/*****************************Copyright(c)****************************************************************
**                    Guangzhou ZHIYUAN electronics Co.,LTD.
**                                     
**                           http://www.embedtools.com
**
**------File Info-----------------------------------------------------------------------------------------
** File Name:            hcd.h
** Latest modified Date: 2007-11-06        
** Latest Version:       V1.0    
** Description:          主控制器驱动, HCD层代码 hcd.c 头文件
**                       
**--------------------------------------------------------------------------------------------------------
** Created By:           吴隆穗  Longsui Wu   
** Created date:         2007-11-06    
** Version:              V1.0    
** Descriptions:         初始版本
**
**--------------------------------------------------------------------------------------------------------
** Modified by:          
** Modified date:        
** Version:              
** Description:          
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
*********************************************************************************************************/
#ifndef __HCD_H
#define __HCD_H

#include "USBHostConfig.h"

#define __OHCI_HCCA_BASE_ADDR       0x7FD00000
#define __OHCI_ED_BASE_ADDR         (__OHCI_HCCA_BASE_ADDR + 0x200)
#define __OHCI_TD_BASE_ADDR         (__OHCI_ED_BASE_ADDR + sizeof(__OHCI_ED))

#define __OHCI_DATA_BASE_ADDR       (__OHCI_TD_BASE_ADDR + sizeof(__OHCI_TD))

#define __OHCI_DATA_CTRL_BUFFER_LEN 0x200
#define __OHCI_DATA_BASE_ADDR_CTRL  __OHCI_DATA_BASE_ADDR               /*  控制端点数据缓冲区首地址    */
#define __OHCI_DATA_BASE_ADDR_GEN   (__OHCI_DATA_BASE_ADDR_CTRL + __OHCI_DATA_CTRL_BUFFER_LEN)
                                                                        /*  BULK, INTR 等端点数据缓冲区 */
                                                                        /*  ...首地址                   */
#define __OHCI_USB_RAM_END_ADDR     0x7FD03FFF

#define __HC_TD_TYPE_GEN            0x01
#define __HC_TD_TYPE_ISO            0x02

#define __HC_CTL_MAXPACKETSIZE      8
#define __HC_BULK_MAXPACKETSIZE     64
#define __HC_ISO_MAXPACKETSIZE      16

#define __OHCI_TD_R                 1

#define __OHCI_TD_TYPE_SETUP        0x00
#define __OHCI_TD_TYPE_OUT          0x01
#define __OHCI_TD_TYPE_IN           0x02

#define __OHCI_TD_T_DATA0           0x02       
#define __OHCI_TD_T_DATA1           0x03

#define __HC_SPEED_LOW              1
#define __HC_SPEED_FULL             0

#define __HC_CTRL_LIST_EN           (0x01 << 4)

#define __HCD_GEN_PARAM_MASK        0x01
#define __HC_GEN_PARAM_MASK         0x02

#define __HCD_TD_TYPE_ED_TYPE_MASK  (USB_INT8U)0x03


#define __USB_INT_MIE               (1U << 31)
#define __USB_INT_SO                (1 << 0)
#define __USB_INT_WDH               (1 << 1)
#define __USB_INT_SF                (1 << 2)
#define __USB_INT_RD                (1 << 3)
#define __USB_INT_UE                (1 << 4)
#define __USB_INT_FNO               (1 << 5)
#define __USB_INT_RHSC              (1 << 6)
#define __USB_INT_OC                (1 << 30)


/*********************************************************************************************************
  Host Controller Endpoint Descriptor, refer to Section 4.2 of OpenHCI Spec. Rev1.0, Endpoint Descriptor
*********************************************************************************************************/
typedef struct __tagHCCA {
    USB_INT32U uiHccaInterrruptTable[32];
    USB_INT16U usHccaFrameNumber;
    USB_INT16U usHccaPad1;
    USB_INT32U uiHccaDoneHead;
    USB_INT32U uiReserved[30];
} __HCCA, *__PHCCA; 


/*********************************************************************************************************
  Host Controller Transfer Descriptor, refer to Section 4.3 of OpenHCI Spec. Rev1.0, Transfer Descriptors
*********************************************************************************************************/
typedef struct __tagHC_GEN_TRANSFER_DESCRIPTOR {                        /*  通用 TD,for Contrl,bulk,Intr*/
    USB_INT32U                              uiControl;                  /*  控制字                      */
    USB_INT8U                              *pucCBP;                     /*  Current Buffer Pointer      */
    struct __tagHC_GEN_TRANSFER_DESCRIPTOR *ptdNextTD;                  /*  phys ptr to                 */
                                                                        /*  ...HC_TRANSFER_DESCRIPTOR   */
    USB_INT8U                              *pucBufEnd;                  /*  Buffer end                  */
} __HC_GEN_TRANSFER_DESCRIPTOR, *__PHC_GEN_TRANSFER_DESCRIPTOR;

/*********************************************************************************************************
  HC 中用于同步传输的传输描述符 TD, 详细参见OHCI Sepc Rev 1.0 中的 4.3.2
*********************************************************************************************************/
typedef struct __tagHC_ISO_TRANSFER_DESCRIPTOR {                        /*  用于同步传输的TD(ISO TD)    */
    USB_INT32U                              uiControl;                  /*  控制字                      */
    USB_INT8U                              *pucBF0;                     /*  Current Buffer Pointer      */
    struct __tagHC_ISO_TRANSFER_DESCRIPTOR *ptdNextTD;                  /*  phys ptr to                 */
                                                                        /*  ...ISO_TD                   */
    USB_INT8U                              *pucBufEnd;                  /*  Buffer end                  */
    USB_INT16U                              usOP0;                      /*  Offsetn/PSWn                */
    USB_INT16U                              usOP1;
    USB_INT16U                              usOP2;
    USB_INT16U                              usOP3;
    USB_INT16U                              usOP4;
    USB_INT16U                              usOP5;
    USB_INT16U                              usOP6;
    USB_INT16U                              usOP7;
} __HC_ISO_TRANSFER_DESCRIPTOR, *__PHC_ISO_TRANSFER_DESCRIPTOR;

/*********************************************************************************************************
  HC 中端点描述符 ED, 详细参见OHCI Sepc Rev 1.0 中的 4.2
*********************************************************************************************************/
typedef struct __tagHC_ENDPOINT_DESCRIPTOR {
    USB_INT32U                          uiControl;                      /*  dword 0:控制位              */
    __PHC_GEN_TRANSFER_DESCRIPTOR       ptdTailP;                       /*  TRANSFER_DESCRIPTOR物理地址 */
    __PHC_GEN_TRANSFER_DESCRIPTOR       ptdHeadP;                       /*  flags + phys ptr to TD      */
    struct __tagHC_ENDPOINT_DESCRIPTOR *pedNextED;                      /*  phys ptr to TD              */
} __HC_ENDPOINT_DESCRIPTOR, *__PHC_ENDPOINT_DESCRIPTOR;

typedef struct __tagHC_ISO_ENDPOINT_DESCRIPTOR {
    USB_INT32U                              uiControl;                  /*  dword 0:控制位              */
    __PHC_ISO_TRANSFER_DESCRIPTOR           ptdTailP;                   /*  TRANSFER_DESCRIPTOR物理地址 */
    __PHC_ISO_TRANSFER_DESCRIPTOR           ptdHeadP;                   /*  flags + phys ptr to TD      */
    struct __tagHC_ISO_ENDPOINT_DESCRIPTOR *pedNextED;                  /*  phys ptr to TD              */
} __HC_ISO_ENDPOINT_DESCRIPTOR, *__PHC_ISO_ENDPOINT_DESCRIPTOR;

/*********************************************************************************************************
  HC 中端点 GEN TD 的参数结构体, 详细参见OHCI Sepc Rev 1.0 中的 4.3.1
*********************************************************************************************************/
typedef struct __tagHC_GEN_TD_PARAM {
    USB_INT8U  ucBufferRound;                                           /*  参见OHCI Sepc Rev 1.0 中的  */  
                                                                        /*  ... 4.3.1.2                 */
    USB_INT8U  ucDirect_PID;                                            /*  数据流方向或 PID            */
    USB_INT8U  ucDelayIntr;                                             /*  DelayInterrupt              */
    USB_INT8U  ucDataToggle;                                            /*  同步数据                    */
    USB_INT8U *pucCBP;
    USB_INT16U usBufLen;
    USB_INT16U usReserv;
} __HC_GEN_TD_PARAM, *__PHC_GEN_TD_PARAM;

/*********************************************************************************************************
  端点描述符 ED 的集合
*********************************************************************************************************/
typedef struct __tagOHCI_ED {

    __HC_ENDPOINT_DESCRIPTOR     edsControl;

    __HC_ENDPOINT_DESCRIPTOR     edsBulkOut;
    __HC_ENDPOINT_DESCRIPTOR     edsBulkIn;

    __HC_ENDPOINT_DESCRIPTOR     edsIntrOut;
    __HC_ENDPOINT_DESCRIPTOR     edsIntrIn;

    __HC_ISO_ENDPOINT_DESCRIPTOR edsIso;
    
} __OHCI_ED, *__POHCI_ED;

/*********************************************************************************************************
 TD链中尾部传输描述符 TD 的集合
*********************************************************************************************************/
typedef struct __tagOHCI_TD_TAIL {

    __HC_ISO_TRANSFER_DESCRIPTOR tdsIsoTail;
    __HC_GEN_TRANSFER_DESCRIPTOR tdsContrlTail;
    __HC_GEN_TRANSFER_DESCRIPTOR tdsBulkOutTail;
    __HC_GEN_TRANSFER_DESCRIPTOR tdsBulkInTail;
    __HC_GEN_TRANSFER_DESCRIPTOR tdsIntrOutTail;
    __HC_GEN_TRANSFER_DESCRIPTOR tdsIntrInTail;
    
}__OHCI_TD_TAIL, *__POHCI_TD_TAIL;

/*********************************************************************************************************
  HCD 中端点 ED 的参数结构体, 详细参见OHCI Sepc Rev 1.0 中的 4.2.2
*********************************************************************************************************/
typedef struct __tagHCD_ED_PARAM {                                      /*  通用 TD,for Contrl 和 bulk  */
    USB_INT8U                     ucMethod;                             /*  如果该值为0,则添加ED的函数  */
                                                                        /*  __hcdAddEd()将忽略这些参数  */
    USB_INT8U                     ucReserved[3];                        /*  保留.也是为了避免pad警告    */
    USB_INT8U                     ucFunAddr;                            /*  设备(从机)地址              */
    USB_INT8U                     ucEpNum;                              /*  端点号                      */
    USB_INT8U                     ucDirection;                          /*  数据流方向,见OHCI Sepc 4.2.2*/
    USB_INT8U                     ucSpeed;                              /*  速度: 全速(0) 或 低速(1)    */
    USB_INT8U                     ucSkip;                               /*  是(1)否(0)跳过此端点        */
    USB_INT8U                     ucFormat;                             /*  该端点下的 TD 格式,GEN TD(0)*/
                                                                        /*  ...或 ISO TD(1)             */
    USB_INT16U                    usMaxPktSize;                         /*  该端点的最大缓冲区大小      */
    __PHC_GEN_TRANSFER_DESCRIPTOR ptdTailP;                             /*  TRANSFER_DESCRIPTOR物理地址 */
    __PHC_GEN_TRANSFER_DESCRIPTOR ptdHeadP;                             /*  flags + phys ptr to TD      */
    __PHC_ENDPOINT_DESCRIPTOR     pedNextED;                            /*  phys ptr to TD              */

⌨️ 快捷键说明

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