基于OHCI的USB主机 —— OHCI(HCCA)

 
主机控制器通信区( HCCA )是一个 256 字节对齐的内存数据结构,被系统软件用于与 HC 进行通信,收发相关控制和状态信息。系统软件通过 HcHCCA 寄存器设置 HCCA 的地址到 HC 。该结构允许软件给 HC 的函数指明方向,而不需要从 HC 读取,除非不寻常的状况发生(例如发生错误)。通常与 HC 的交互可以通过读取 HCCA 结构的值或者写入 HC 操作寄存器来完成。
 
HC 周期性的将 HcDoneHead 寄存器的值写入到内存 HccaDoneHead ,以便主机软件可以处理已完成的 TD 。通常 HcDoneHead 在每一帧的开始,并且中断延时计数器为 0 时完成数据更新。在 HcDoneHead 被写入到 HccaDoneHead 之后, HC 设置 HcDoneHead 寄存器的值为 0 ,并且设置 HcInterruptStatus 寄存器的 WD 位为 1 。在写完 HccaDoneHead 之后, HC 可以开始建立新的已完成队列,但是新的队列只有在 HCD 清除了 WDH 位以后才可以进行。
 
HC 产生的中断上, HCD 检查 HccaDoneHead 值。如果该值为 0 ,则该中断不是 HccaDoneHead 更新所产生,而是需要访问 HcInterruptStatus 寄存器以确定正确的中断原因。如果 HccaDoneHead 0 ,表明该中断是由于已完成队列产生,如果最低位的值非 0 ,则表明同时还产生了中断,需要访问 HcInterruptStatus 寄存器,确定中断原因。

你可能感兴趣的:(主机,usb,mdash,ohci,HCCA)