阅读:1507回复:5
使usb slave开始正常的必须条件?
因为是从别的开发板上已经可以正常运行的代码移植到新的usb slave控制器上,现在中断一直没有起来。所以问一下。
我觉得应该有以下几个工作要做: 1,clock 的初始化 2,usb控制器寄存器的初始化 3,设置并load descriptors。 我的疑惑就是: 我设置好那些descriptor后,放在什么地方,才能让host知道去那个地方读取descriptor信息呢,我有这样的想法是因为我原来在l7201上开发过usbslave驱动,他的usb slave 控制器上提供0xA8(0x100 - 0x1a8)的sram,0x100处存放device descriptor,然后紧随其后的是configuraion ,interface ,endponit descriptor, 最后是string descriptor,这样,host就能自动从这个sram中获得所需的description。 但是我现在在neomagic公司的magic5上开发,没有提供这样的SRAM,那么如何将descriptor信息告知host呢? |
|
沙发#
发布于:2004-03-25 12:26
现在中断来后的处理工作都已经完成,根据usb slave控制器的状态寄存器处理的工作都已经完成拉,就是来不料中断。
|
|
板凳#
发布于:2004-03-25 13:12
我做的工作跟你的前次类似,是在ARM linkup7210上做USB Slave,
我在程序里面初始化USB的控制寄存器以后,在SRAM的0x100上装设备描述符,0x114上装配置,接口,和3个端点描述符,省略了它本来的字符串描述符。只有极少的几次能在监视程序里面看到读到了设备描述符,请问seu_zhufeng这是什么原因啊,在ARM上作USB的很少,我都找不到人帮忙啊!我的QQ:112565541,不胜感激! 我的代码如下,请看看什么地方不对? POWER_USB(POWER_OFF); // use internal transceiver; tUsbHrcr |= ExtXver4Host; tUsbHrcr &= ~PRTA4USB; *(volatile UINT32* )USBHRCR= tUsbHrcr; PMU_SetUSBClock(); pstUFCRegs->uControl =(UdcENBL + UdcFRST + UdcF1MOD2 +UdcF2MOD2+ UdcF0CLR + UdcF1CLR + UdcF2CLR + UdcF3CLR ); //Wait for a while WAIT(0x00ff); //Enable UsbFunc Clock PMU_USBFEnable(); //Wait a while WAIT(0xf0); //Initialise Device Descriptor P_UdcSRAMBASE = (unsigned int*)0x8004B100; P_UdcSRAMCDB = (unsigned int *)0x8004B118; for(i=0;i<5;i++) { //设备描述符; *P_UdcSRAMBASE++ = pDDPTR; //UsbFuncbase + 0x100 } //Initalise Configuration Descriptor for function for(i=0;i<10;i++) { *P_UdcSRAMCDB++ = pDConFig; //UsbFuncbase + 0x114 } //Configure Endpoint Reg zero //endpoint0 for control transfer //EP0MSIZE =0 for 8 bytes (Max packet size for endpoint 0) pstUFCRegs->uEndPtBuf0 = 0x0; //Configure Endpoint Reg one //maxbyte size =0x20(ie (bit 0:9) 32 bytes),and set for bulkmode(bit 10:11 0x2) pstUFCRegs->uEndPtBuf1 =0x820; //Configure Endpoint Reg two //maxbyte size =0x20(ie (bit 0:9) 32 bytes),and set for bulkmode(bit 10:11 0x2) pstUFCRegs->uEndPtBuf2 =0x820; //Configure Endpoint Reg Three //Atribute type for interrupt endpoint pstUFCRegs->uEndPtBuf3 =0x03; //Configure Configbuff1,set SRAM offset of config address and size pstUFCRegs->uConfigBuf1 = 0x4e18; //Wait a while WAIT(0x00f0); pstUFCRegs->uControl &=~(UdcFRST + UdcF0CLR + UdcF1CLR + UdcF2CLR + UdcF3CLR ); WAIT(0x00f000); ClearAndEnableInterrpts(); //enable Udc,set INITD and programme mode pstUFCRegs->uControl |= UdcINITD; |
|
地板#
发布于:2004-03-31 13:14
你的代码我还没有细看,但是跟你的描述的做法是一样的,我的信箱
zhufeng@koretide.com.cn 我们mail联系好不? |
|
地下室#
发布于:2004-04-03 08:44
楼上两位大哥,我问一下是不是只有对USBHOST进行初始化后,插上USB外设时USBHOST才会向CPU发中断,还是不用初始化USBHOST也会自动发现发中断请求,我现在在ARM2410上做USBHOST,碰上难题了
|
|
5楼#
发布于:2004-04-05 19:51
我觉得你不必关心占有DMA和中断资源,那是主机控制器的事情,而你写的HOST仅是功能驱动程序,个人见解!
|
|