seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1506回复:5

使usb slave开始正常的必须条件?

楼主#
更多 发布于:2004-03-25 12:16
因为是从别的开发板上已经可以正常运行的代码移植到新的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呢?
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-25 12:26
现在中断来后的处理工作都已经完成,根据usb slave控制器的状态寄存器处理的工作都已经完成拉,就是来不料中断。
fjqzlyy
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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;
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-31 13:14
你的代码我还没有细看,但是跟你的描述的做法是一样的,我的信箱
zhufeng@koretide.com.cn 我们mail联系好不?
HongZhangQian
驱动牛犊
驱动牛犊
  • 注册日期2004-03-31
  • 最后登录2009-05-31
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-03 08:44
楼上两位大哥,我问一下是不是只有对USBHOST进行初始化后,插上USB外设时USBHOST才会向CPU发中断,还是不用初始化USBHOST也会自动发现发中断请求,我现在在ARM2410上做USBHOST,碰上难题了
fjqzlyy
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2004-06-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-05 19:51
我觉得你不必关心占有DMA和中断资源,那是主机控制器的事情,而你写的HOST仅是功能驱动程序,个人见解!
游客

返回顶部