|
补充一下:
问题出在地址设置上。OHCI的寄存器和HCCA部门的结构如下:
struct ohci_hcca
{
U32 int_table[NUM_INTS]; /* Interrupt ED table */
U16 frame_no; /* current frame number */
U16 pad1; /* set to 0 on each frame_no change */
U32 done_head; /* info returned for an interrupt */
U8 reserved_for_hc[116];//116
} /*__attribute((aligned(256)))*/;
struct ohci_regs
{
/* control and status registers */
U32 revision;
U32 control;
U32 cmdstatus;
U32 intrstatus;
U32 intrenable;
U32 intrdisable;
/* memory pointers */
U32 hcca;
U32 ed_periodcurrent;
U32 ed_controlhead;
U32 ed_controlcurrent;
U32 ed_bulkhead;
U32 ed_bulkcurrent;
U32 donehead;
/* frame counters */
U32 fminterval;
U32 fmremaining;
U32 fmnumber;
U32 periodicstart;
U32 lsthresh;
/* Root hub ports */
struct ohci_roothub_regs
{
U32 a;
U32 b;
U32 status;
U32 portstatus[MAX_ROOT_PORTS];
}
roothub;
}/*__attribute((aligned(32)))*/;
当USB进入operational状态,OHCI寄存器中的fmnumber周期性更新,并将自身值的低16位回写到HCCA的frame_no位置。OHCI手册上要求寄存器中的hcca为物理地址。
问题:若都采用物理地址操作,程序正常运行;移植到eboot中,采用虚拟地址,寄存器就无法将自己的hcfmnumber值更新到HCCA的内存地址上frame_no????
困扰很久了,请高手们指教啊
|
|