关闭

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

标签: processingcommandlist
413人阅读 评论(0) 收藏 举报
分类:
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/232493

启动控制传输

进行控制传输之前,需要设置好相应的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;
}
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:268093次
    • 积分:4152
    • 等级:
    • 排名:第7873名
    • 原创:3篇
    • 转载:533篇
    • 译文:0篇
    • 评论:0条