您的位置:首页 > 其它

2.3 基于OHCI的USB主机 —— 寄存器(传输)

2012-03-22 09:43 411 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/232493

启动控制传输

进行控制传输之前,需要设置好相应的ED和TD参数(参见下一章),启动传输时需要设置OHCI寄存器中的控制传输ED头指针寄存器和控制传输的当前ED指针寄存器,然后设置控制寄存器允许处理控制传输列表,控制状态寄存器有控制传输列表数据需要传输,代码如下:
[align=left]/**[/align]
[align=left] * 通过Control端口传输数据[/align]
[align=left] * @param *ed 需要进行数据收发的ED指针[/align]
[align=left] * @return 0 - 成功[/align]
[align=left] */[/align]
[align=left]short ohciCtrlXfer(AT91S_UHP_ED *ed)[/align]
[align=left]{[/align]
[align=left]    // Programming the CHED[/align]
[align=left]    pUhp->UHP_HcControlHeadED = (unsigned int) ed;[/align]
[align=left] [/align]
[align=left]    // Programming the CCED[/align]
[align=left]    pUhp->UHP_HcControlCurrentED = (unsigned int) ed;[/align]
[align=left] [/align]
[align=left]    // UHP: UHP is now operational and control list processing is enabled[/align]
[align=left]    pUhp->UHP_HcControl = 0x90;[/align]
[align=left]   [/align]
[align=left]    // UHP: Notify the Hc that the Control list is filled[/align]
[align=left]    pUhp->UHP_HcCommandStatus = OHCI_HC_COMMAND_STATUS_CLF;[/align]
[align=left]   [/align]
[align=left]    return 0;[/align]
[align=left]}[/align]
 

启动批量传输

启动批量传输的流程与控制传输类似,只不过相应寄存器换为批量传输的寄存器了:
[align=left]/**[/align]
[align=left] * 通过Bulk端口传输数据[/align]
[align=left] * @param *ed 需要进行数据收发的ED指针[/align]
[align=left] * @return 0 - 成功[/align]
[align=left] */[/align]
[align=left]short ohciBulkXfer(AT91S_UHP_ED *ed)[/align]
[align=left]{[/align]
[align=left]    // 禁止ED[/align]
[align=left]    pUhp->UHP_HcControl = 0x180;[/align]
[align=left]    pUhp->UHP_HcCommandStatus = 0x00;[/align]
[align=left]   [/align]
[align=left]    // Programming the BHED[/align]
[align=left]    pUhp->UHP_HcBulkHeadED = (unsigned int) ed;[/align]
[align=left] [/align]
[align=left]    // Programming the BCED[/align]
[align=left]    pUhp->UHP_HcBulkCurrentED = (unsigned int) ed;[/align]
[align=left] [/align]
[align=left]    // UHP: UHP is now operational and control list processing is enabled[/align]
[align=left]    pUhp->UHP_HcControl = 0x0A0;[/align]
[align=left]   [/align]
[align=left]    // UHP: Notify the Hc that the Bulk list is filled[/align]
[align=left]    pUhp->UHP_HcCommandStatus = OHCI_HC_COMMAND_STATUS_BLF;[/align]
[align=left]   [/align]
[align=left]    return 0;[/align]
[align=left]}[/align]
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  processing command list