2.2 基于OHCI的USB主机 —— 寄存器(初始化)

转载 2012年03月22日 09:42:29
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lancelot.blog.51cto.com/393579/229673
硬件初始化的操作比较简单,主要代码从例程《AT91RM9200-BasicUHP》中抄过来,另外增加了中断向量初始化的部分。

在AM9200中,USB的中断是基于AIC中断的,因此要设置对应的AIC中断。在此之前要设置OHCI的中断寄存器,代码如下:
/**
 * USB主机初始化
 * @return 0 - 成功
 */
short ohciHardInit(void)
{
    unsigned int reg;
   
    //打开USB主机所使用的时钟
    AT91F_UHP_CfgPMC();
    AT91C_BASE_PMC->PMC_SCER |= (AT91C_PMC_UHP);
   
    // Forcing UHP_Hc to reset
    pUhp->UHP_HcControl = 0;
 
    // Writing the UHP_HCCA
    pUhp->UHP_HcHCCA = (unsigned int) &HCCA;
 
    // Enabling list processing
    pUhp->UHP_HcControl = 0;
 
    // Set the frame interval
    pUhp->UHP_HcFmInterval = AT91C_FMINTERVAL;
    pUhp->UHP_HcPeriodicStart = AT91C_PRDSTRT;
   
    // Initializing the UHP_HcDoneHead
    pUhp->UHP_HcBulkDoneHead   = 0x00;
    HCCA.UHP_HccaDoneHead = 0x0000;
 
    // Forcing UHP_Hc to Operational State
    reg = pUhp->UHP_HcControl;
    pUhp->UHP_HcControl = 0x80;
 
    // Enabling port power
    pUhp->UHP_HcRhPortStatus[0] = 0x00000100;
    pUhp->UHP_HcRhPortStatus[1] = 0x00000100;
 
    pUhp->UHP_HcRhDescriptorA = OHCI_HC_RHDESCRIPTORA_NPS;
    pUhp->UHP_HcRhStatus = 0x00010000;
   
    // UDP: Connect a pull-up
    //调试时发现不设置此寄存器则返回的数据有问题
    AT91F_PIO_SetOutput(AT91C_BASE_PIOD, AT91C_PIO_PD5);
   
    //设置USB Host中断寄存器
    pUhp->UHP_HcInterruptEnable =   OHCI_HC_INTR_MIE |
                                OHCI_HC_INTR_RHSC |
                                OHCI_HC_INTR_UE |
                                OHCI_HC_INTR_WDH |
                                OHCI_HC_INTR_FNO;
    pUhp->UHP_HcInterruptStatus =   OHCI_HC_INTR_RHSC |
                                OHCI_HC_INTR_UE |
                                OHCI_HC_INTR_WDH |
                                OHCI_HC_INTR_FNO;
    //设置AIC中断信息
    AT91F_AIC_ConfigureIt(   AT91C_BASE_AIC,
                         AT91C_ID_UHP,
                         AT91C_AIC_PRIOR_HIGHEST,
                         AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED,                                    AT91F_ASM_UHP_Handler);
    AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_UHP);
   
    return 0;
}
 
OHCI中的中断寄存器设置了若干中断,实际上有用的就是WDH中断,该中断是TD传输完毕后产生的。通过判断该中断的产生以及配合HCCA判断是否到达TD队列尾,可以确定数据是否传输完毕。

代码中的相关常量定义可以在"AT91RM9200.h"、"lib_AT91RM9200.h"、 "ohci.h"这几个头文件中找到,例程《AT91RM9200-BasicUHP》里面都有的。

USB EHCI和OHCI端口切换原理分析

USB EHCI和OHCI端口切换原理分析
  • zoosenpin
  • zoosenpin
  • 2014年11月14日 12:28
  • 1618

OHCI(二) - OHCI控制器驱动

OHCI初始化struct hc_driver一个重要的结构体struct hc_driverstatic const struct hc_driver ohci_platform_hc_driver...
  • luckywang1103
  • luckywang1103
  • 2015年11月03日 15:37
  • 1595

EHCI,OHCI,UHCI概念及区别

UHCI EHCI OHCI基本概念     UHCI(universal host controller interface): Intel用在自家芯片组上的usb 1.1主控制器(host c...
  • Primeprime
  • Primeprime
  • 2015年01月23日 11:39
  • 1141

USB主机控制器驱动——OHCI分析

首先,整个驱动框架的开始,是基于 platform 平台总线的。 struct platform_device s3c_device_usb = { .name = "s3c2410-ohci...
  • lizuobin2
  • lizuobin2
  • 2016年07月18日 22:34
  • 4383

FPGA笔记(十)-正确初始化的重要性

寄存器正确初始化——>reg [5:0] addresss=5'd1;//定义寄存器时就赋初值,initial块(用于Testbench)在.v文件是不可综合的 一个仿真的经验——>如果是posed...
  • Struggle_For_M
  • Struggle_For_M
  • 2016年07月14日 21:40
  • 1866

控制寄存器(CR0,CR1,CR2,CR3)的说明

内核源码中涉及控制寄存器较多,看到有人介绍转过来收藏下。 控制寄存器 (控制寄存器(CR0,CR1,CR2,CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。)     从上表可见,...
  • huagongzxuezi
  • huagongzxuezi
  • 2013年11月21日 15:15
  • 1308

DDR2初始化源码分析_2

14-25步的SDRAM有些就让人摸不着头脑了,因为说得不详细(因为详细了可就有的说了涉及的知识非常多,不过做的不好的就是没有提示在哪里可以得到相关资料),而且寄存器的配置说明讲额也不是很清楚 这些...
  • chenhongfeng1122
  • chenhongfeng1122
  • 2014年05月02日 15:16
  • 1264

uhci ehci ohci及hcdxxx的区别与 usb驱动架构(USB总线分析前奏曲)

摘自:usb协议   最近在做一个usb总线控制器的驱动,用的是一个韩国厂家的.基本上是CPU bus ->芯片->usb设备.   因此我做的驱动类似于uhci ehci ohci的...
  • liangxiaozhang
  • liangxiaozhang
  • 2013年01月10日 14:19
  • 1391

STM32F10x uart初始化以及寄存器说明

USART(Universal Synchronous Asynchronous Receiver Transmitter) 也就是通用同步异步收发。它根据NRZ非同步串行数据工业标准,提供了灵活的全...
  • hongzg1982
  • hongzg1982
  • 2017年02月22日 23:40
  • 702

UCOS-II任务堆栈初始化函数移植

http://blog.sina.com.cn/s/blog_6d589a300100nc3n.html### (2010-10-20 16:34:40) 转载▼ 标签:...
  • sun_z_x
  • sun_z_x
  • 2013年08月03日 18:41
  • 1397
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2.2 基于OHCI的USB主机 —— 寄存器(初始化)
举报原因:
原因补充:

(最多只允许输入30个字)