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

📄 hcd.h

📁 smartARM2400 USB OTG例程
💻 H
📖 第 1 页 / 共 2 页
字号:
} __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 + -