summersunboy 发表于 2012-7-27 16:28:44

usb device 中的寄存器EP0_CSR 与 IN_CSR1_REG

请教一个问题:
usb device 寄存器EP0_CSR 与 IN_CSR1_REG都是映射到了0x52000184(L) 0x52000187(B)地址处,在实际用的时候如何区分哪个寄存器是in的,哪个寄存器是out的?
如何区分ep0中断是in还是out?
非常感谢。

pcwangyihui 发表于 2012-7-28 10:41:57

韦东山的u-boot-1.1.6_OpenJTAG中usb device配置函数里是这样写的,看来是INDEX_REG的值决定的
void ReconfigUsbd(void)
{
...
      usbdevregs->INDEX_REG=0;
      usbdevregs->EP0_CSR_IN_CSR1_REG=EP0_SERVICED_OUT_PKT_RDY|EP0_SERVICED_SETUP_END;
...                               
      usbdevregs->INDEX_REG=1;
      usbdevregs->EP0_CSR_IN_CSR1_REG=EPI_FIFO_FLUSH|EPI_CDT;
...
      usbdevregs->INDEX_REG=2;
      usbdevregs->EP0_CSR_IN_CSR1_REG=EPI_FIFO_FLUSH|EPI_CDT|EPI_BULK;
...
      usbdevregs->INDEX_REG=3;
      usbdevregs->EP0_CSR_IN_CSR1_REG=EPI_FIFO_FLUSH|EPI_CDT|EPI_BULK;
...
      usbdevregs->INDEX_REG=4;
      usbdevregs->EP0_CSR_IN_CSR1_REG=EPI_FIFO_FLUSH|EPI_CDT|EPI_BULK;
...
}

ep0中断是in还是out?
这个需要了解USB协议
看主机发送给设备的控制请求
struct usb_ctrlrequest {
        __u8 bRequestType;
        __u8 bRequest;
        __le16 wValue;
        __le16 wIndex;
        __le16 wLength;
} __attribute__ ((packed));

bRequestType成员的第7位的值表明了是in还是out
        bit7=1:要求设备发送数据给主机
        bit7=0:要求设备接收主机的数据

summersunboy 发表于 2012-7-28 16:15:34

pcwangyihui 发表于 2012-7-28 10:41 static/image/common/back.gif
韦东山的u-boot-1.1.6_OpenJTAG中usb device配置函数里是这样写的,看来是INDEX_REG的值决定的
void Recon ...

噢,应该是 INDEX_REG的值决定的。
非常感谢!

liyvhg 发表于 2012-9-22 09:07:50

一般情况下,EP0是用作控制端点
页: [1]
查看完整版本: usb device 中的寄存器EP0_CSR 与 IN_CSR1_REG