启动控制传输
进行控制传输之前,需要设置好相应的ED和TD参数(参见下一章),启动传输时需要设置OHCI寄存器中的控制传输ED头指针寄存器和控制传输的当前ED指针寄存器,然后设置控制寄存器允许处理控制传输列表,控制状态寄存器有控制传输列表数据需要传输,代码如下:
/**
* 通过Control端口传输数据
* @param *ed 需要进行数据收发的ED指针
* @return 0 - 成功
*/
short ohciCtrlXfer(AT91S_UHP_ED *ed)
{
// Programming the CHED
pUhp->UHP_HcControlHeadED = (unsigned int) ed;
// Programming the CCED
pUhp->UHP_HcControlCurrentED = (unsigned int) ed;
// UHP: UHP is now operational and control list processing is enabled
pUhp->UHP_HcControl = 0x90;
// UHP: Notify the Hc that the Control list is filled
pUhp->UHP_HcCommandStatus = OHCI_HC_COMMAND_STATUS_CLF;
return 0;
}
|
启动批量传输
启动批量传输的流程与控制传输类似,只不过相应寄存器换为批量传输的寄存器了:
/**
* 通过Bulk端口传输数据
* @param *ed 需要进行数据收发的ED指针
* @return 0 - 成功
*/
short ohciBulkXfer(AT91S_UHP_ED *ed)
{
// 禁止ED
pUhp->UHP_HcControl = 0x180;
pUhp->UHP_HcCommandStatus = 0x00;
// Programming the BHED
pUhp->UHP_HcBulkHeadED = (unsigned int) ed;
// Programming the BCED
pUhp->UHP_HcBulkCurrentED = (unsigned int) ed;
// UHP: UHP is now operational and control list processing is enabled
pUhp->UHP_HcControl = 0x0A0;
// UHP: Notify the Hc that the Bulk list is filled
pUhp->UHP_HcCommandStatus = OHCI_HC_COMMAND_STATUS_BLF;
return 0;
}
|
本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/232493,如需转载请自行联系原作者