📄 hcd.h
字号:
/*****************************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 + -