主机控制器通信区(
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
寄存器,确定中断原因。
本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/238666,如需转载请自行联系原作者