📄 hcd.h
字号:
} __HCD_ED_PARAM, *__PHCD_ED_PARAM;
/*********************************************************************************************************
HCD 中端点 GEN TD 的参数结构体, 详细参见OHCI Sepc Rev 1.0 中的 4.3.1
*********************************************************************************************************/
typedef struct __tagHCD_GEN_TD_PARAM {
USB_INT8U ucType;
USB_INT8U ucTDStatus;
USB_INT16U usBufLen; /* 数据缓冲区末地址 */
USB_INT8U *pucBuf; /* 数据缓冲区首地址 */
USB_INT16U usThisIndex;
USB_INT16U usTotalIndex;
__HC_GEN_TD_PARAM tdHcParam;
__PHC_GEN_TRANSFER_DESCRIPTOR ptdNextTD; /* 指向下一个 TD */
} __HCD_GEN_TD_PARAM, *__PHCD_GEN_TD_PARAM;
/*********************************************************************************************************
HCD 层 TD
*********************************************************************************************************/
typedef struct __tagHCD_GEN_TD {
USB_INT8U ucType;
USB_INT8U ucTDStatus;
USB_INT16U usBufLen; /* 数据缓冲区末地址 */
USB_INT8U *pucBuf; /* 数据缓冲区首地址 */
USB_INT16U usThisIndex;
USB_INT16U usTotalIndex;
__PHC_GEN_TRANSFER_DESCRIPTOR ptdNextTD;
__HC_GEN_TRANSFER_DESCRIPTOR tdTD;
} __HCD_GEN_TD, *__PHCD_GEN_TD;
/*********************************************************************************************************
传输描述符TD的集合
*********************************************************************************************************/
typedef struct __tagOHCI_TD {
__HC_GEN_TRANSFER_DESCRIPTOR tdCtrlTd[USB_MAX_CTRL_TD]; /* 传输描述符TD, 要求16字节对齐*/
__HC_GEN_TRANSFER_DESCRIPTOR tdBulkOutTd[USB_MAX_BULKOUT_TD]; /* 传输描述符TD, 要求16字节对齐*/
__HC_GEN_TRANSFER_DESCRIPTOR tdBulkInTd[USB_MAX_BULKIN_TD]; /* 传输描述符TD, 要求16字节对齐*/
__HC_GEN_TRANSFER_DESCRIPTOR tdIntrOutTd[USB_MAX_INTROUT_TD]; /* 传输描述符TD, 要求16字节对齐*/
__HC_GEN_TRANSFER_DESCRIPTOR tdIntrInTd[USB_MAX_INTRIN_TD]; /* 传输描述符TD, 要求16字节对齐*/
} __OHCI_TD, *__POHCI_TD;
/*********************************************************************************************************
TD是否正被使用的状态标志
*********************************************************************************************************/
typedef struct __tagOHCI_TD_STAT {
USB_INT32U uiCtrlTdStatus[(USB_MAX_CTRL_TD + 31) / 32];
USB_INT32U uiBulkOutTdStatus[(USB_MAX_BULKOUT_TD + 31) / 32];
USB_INT32U uiBulkInTdStatus[(USB_MAX_BULKIN_TD + 31) / 32];
USB_INT32U uiIntrOutTdStatus[(USB_MAX_INTROUT_TD + 31) / 32];
USB_INT32U uiIntrInTdStatus[(USB_MAX_INTRIN_TD + 31) / 32];
} __OHCI_TD_STAT, *__POHCI_TD_STAT;
/*********************************************************************************************************
当前TD队列中最后一个TD地址
*********************************************************************************************************/
typedef struct __tagTRAN_END_TD {
__PHC_GEN_TRANSFER_DESCRIPTOR pCtrlEndTd;
__PHC_GEN_TRANSFER_DESCRIPTOR pDataEndTd;
} __TRAN_END_TD, *__PTRAN_END_TD;
/*********************************************************************************************************
ED的信息结构体,包括该端点描述符地址,端点最大包长度,该类型TD首地址,表示该类型TD状态的变量首地址等
*********************************************************************************************************/
typedef struct __tagED_INFO {
__PHC_ENDPOINT_DESCRIPTOR pEd; /* 指向该端点描述符ED */
__PHC_GEN_TRANSFER_DESCRIPTOR pTdHead; /* 指向该类ED下的TD的首地址 */
volatile USB_INT32 *puiTdSts; /* 标志TD状态的变量的首地址 */
USB_INT32U uiMaxTd; /* 该类型最大TD数 */
USB_INT16U usMaxPktSize; /* 端点最大包长度 */
USB_INT8U ucTranType; /* 传输类型 */
USB_INT8U ucReserv;
} __ED_INFO, *__PED_INFO;
/*********************************************************************************************************
各传输类型的TD的基地址和末地址
*********************************************************************************************************/
#define __OHCI_TD_CTRL_BASE_ADDR (__OHCI_TD_BASE_ADDR + (USB_INT32U)(&(((__POHCI_TD)0)->tdCtrlTd[0])))
#define __OHCI_TD_CTRL_END_ADDR (__OHCI_TD_CTRL_BASE_ADDR + \
sizeof(__HC_GEN_TRANSFER_DESCRIPTOR) * USB_MAX_CTRL_TD - 1)
#define __OHCI_TD_BULKOUT_BASE_ADDR (__OHCI_TD_BASE_ADDR + \
(USB_INT32U)(&(((__POHCI_TD)0)->tdBulkOutTd[0])))
#define __OHCI_TD_BULKOUT_END_ADDR (__OHCI_TD_BULKOUT_BASE_ADDR + \
sizeof(__HC_GEN_TRANSFER_DESCRIPTOR) * USB_MAX_BULKOUT_TD - 1)
#define __OHCI_TD_BULKIN_BASE_ADDR (__OHCI_TD_BASE_ADDR + \
(USB_INT32U)(&(((__POHCI_TD)0)->tdBulkInTd[0])))
#define __OHCI_TD_BULKIN_END_ADDR (__OHCI_TD_BULKIN_BASE_ADDR + \
sizeof(__HC_GEN_TRANSFER_DESCRIPTOR) * USB_MAX_BULKIN_TD - 1)
#define __OHCI_TD_INTROUT_BASE_ADDR (__OHCI_TD_BASE_ADDR + \
(USB_INT32U)(&(((__POHCI_TD)0)->tdIntrOutTd[0])))
#define __OHCI_TD_INTROUT_END_ADDR (__OHCI_TD_INTROUT_BASE_ADDR + \
sizeof(__HC_GEN_TRANSFER_DESCRIPTOR) * USB_MAX_INTROUT_TD - 1)
#define __OHCI_TD_INTRIN_BASE_ADDR (__OHCI_TD_BASE_ADDR + \
(USB_INT32U)(&(((__POHCI_TD)0)->tdIntrInTd[0])))
#define __OHCI_TD_INTRIN_END_ADDR (__OHCI_TD_INTRIN_BASE_ADDR + \
sizeof(__HC_GEN_TRANSFER_DESCRIPTOR) * USB_MAX_INTRIN_TD - 1)
#define PACK_CTRL_PARAM(tdHcParam) ((tdHcParam.ucDataToggle << 24) | (tdHcParam.ucDelayIntr << 21) | \
(tdHcParam.ucDirect_PID << 19) | (tdHcParam.ucBufferRound << 18))
/* 打包TD的uiControl字段参数 */
extern __TRAN_END_TD __GsTranEndTd;
extern __POHCI_ED __GpohciEd;
extern __POHCI_TD_TAIL __GpohciTdTail;
extern __OHCI_TD_STAT __GohciTdStat;
extern volatile USB_INT8U __GucUsbSpeed;
extern volatile USB_INT8U __GucUsbDevAddr;
extern const __POHCI_REG volatile __GpsOhciReg;
void __hcdEdInit (void);
__PHC_GEN_TRANSFER_DESCRIPTOR __hcdAllocTd(__PED_INFO pEdInfo);
void __hcdFreeTd(__PED_INFO pEdInfo, __PHC_GEN_TRANSFER_DESCRIPTOR phcdFreeTd);
void __hcdFreeAllTd (__PED_INFO pEdInfo);
USB_BOOL __hcdAddTd (__PHC_GEN_TD_PARAM pGenTdParam, __PHC_GEN_TRANSFER_DESCRIPTOR ptdAddTd, __PED_INFO pEdInfo);
USB_BOOL __hcdIsEdHeadEquTail (__PED_INFO pEdInfo);
void __hcdEdLetHeadEquTail (__PED_INFO pEdInfo);
__PHC_ENDPOINT_DESCRIPTOR __hcdGetEdPtr (USB_INT8U ucTranType);
USB_INT8U __hcdEnableEd (USB_INT8U ucEdType);
USB_BOOL __hcEnableSchedule (USB_INT8U ucType);
USB_BOOL __hcStartSchedule (USB_INT8U ucType);
USB_BOOL __hcDisEnSchedule (USB_INT8U ucType);
void __hcWaitNextFrame (void);
USB_BOOL __hcDisEnSchedAndWaitNextFrame(USB_INT8U ucType);
USB_BOOL __hcEnableAndStartSchedule (USB_INT8U ucType);
USB_BOOL __usbEdSetSkipAndWaitNextFrame (USB_INT8U ucType);
USB_BOOL __usbEdClearSkip (USB_INT8U ucType);
void __hcdInit (void);
void __hcdGetEdInfo (USB_INT8U ucTranType, __PED_INFO pedInfo);
USB_INT8U __hcdGetTdType (__PHC_GEN_TRANSFER_DESCRIPTOR tdTd);
USB_INT16U __usbGetFrameNumber (void);
USB_INT8U *__usbAllocCtrlBuffer (USB_INT32U uiLen);
USB_INT8U *__usbAllocGenBuffer (USB_INT32U uiLen);
void __usbFreeCtrlBuffer (USB_INT32U uiLen);
void __usbFreeGenBuffer (USB_INT32U uiLen);
void __usbFreeAllCtrlBuffer (void);
void __usbFreeAllGenBuffer (void);
#define __OHCI_FM_INTERVAL_FSMPS 0x2374
#define __OHCI_FM_INTERVAL_FI 0x2EDF
#define __OHCI_PWRON_TO_PWRGOOD 10
#define __OHCI_LS_THRESHOLD 0x0628
#define __OHCI_PERIODIC_START ((__OHCI_FM_INTERVAL_FI - __OHCI_LS_THRESHOLD) / 10 \
+ __OHCI_LS_THRESHOLD)
#define __OHCI_RH_LSDA (1 << 9) /* uiHcRhPortStatus中的速度位 */
#define __OHCI_SPEED_LOW (1 << 9) /* 所连设备为低速 */
#define __OHCI_SPEED_FULL (0 << 9) /* 所连设备为全速 */
/*********************************************************************************************************
** Function name: usbBusSusp
** Descriptions: 挂起总线
** input parameters: None
** output parameters: None
** Returned value: None
*********************************************************************************************************/
void usbBusSusp (void);
/*********************************************************************************************************
** Function name: usbBusResume
** Descriptions: 唤醒总线
** input parameters: None
** output parameters: None
** Returned value: None
*********************************************************************************************************/
void usbBusResume (void);
/*********************************************************************************************************
** Function name: usbBusReset
** Descriptions: 复位总线
** input parameters: None
** output parameters: None
** Returned value: None
*********************************************************************************************************/
void usbBusReset (void);
USB_BOOL __ohciInit (void);
USB_BOOL __ohciInit2 (USB_INT8U ucPort);
USB_BOOL __ohciPortOpen (USB_INT8U ucPortNum);
USB_BOOL __ohciPortClose (USB_INT8U ucPortNum);
USB_BOOL __ohciEnableInt (USB_INT32U);
void __ohciDisEnInt (USB_INT32U uiIntIndex);
void __ohciDisEnIntAll (void);
USB_BOOL __ohciAffirmAttach (USB_INT8U ucRhNum);
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -