|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我在Smart ARM2200上,按照ISP1161嵌入式编程指南中的步骤对ISP1161 host进行初始化,用USB_BUS ANALYZER捕捉数据,结果发现只捕捉到SOF包,枚举的包没有发送。现在我不知道是初始化的问题,还是PTD(philips Transfer descriptor)数据的问题。请知道的前辈或朋友帮忙解答一下,谢谢!
代码如下:
void initHC()
{
//检测主机控制器
if( !CheckHC())
return;
//软件重新设置主机控制器
SoftResetHC();
//配置HcHardwareConfiguration寄存器
initHcHardwareConfiguration();
//配置中断
initInterruptController();
//配置HcFmInterval寄存器
initHcFmInterval();
//配置根集线器寄存器
initHcRhDescriptorA();
//设置ITL和ATL缓冲区长度
setITL_ATL_length();
//设置主机控制器为可操作的状态
SetHC2Operate();
}
void USB_Host_Exception()
{
uint8 i;
uint32 st,ist;
st= READ_32BIT_REG(HcRhPortStatus1);
ist=READ_32BIT_REG(HcInterruptStatus);
if(st&0x0200)
device_speed=low_speed;
else
device_speed=full_speed;
if((st&0x00000001)&&(ist&0x00000040))//有device连上
{
WRITE_32BIT_REG(HcRhPortStatus1, 0x00000010);//HC通过写HcRhPortStatus1,设置端口复位
for(i=0;i<100;i++);
// port_enable();
WRITE_32BIT_REG(HcRhPortStatus1,0x00000102); //设置端口1 端口使能状态和 端口电源状态为‘1’
WRITE_32BIT_REG(HcRhPortStatus2,0x00000102); //设置端口2 端口使能状态和 端口电源状态为 ‘1’
WRITE_32BIT_REG(HcRhDescriptorA,0x00000B01); //设置下行端口数、过流检测等为‘1’
WRITE_32BIT_REG(HcRhDescriptorB,0x00000000); //设备可移除且由全局电源切换控制
//发出第一个控制建立数据包
make_control_ptd((uint16 *)c_ptd,0x01,1,0,8,0,0);//c_ptd中存放PTD头
send_control(c_ptd,rb_ptr,0x0806,0x0001,0x0000,0x0800,8);//把PTD头8个字节和获取设备描述符请求数据写到ATL缓冲区。
}
现在是能进入中断,但获取设备描述符的包却没有发送出去?
} |
|