设备描述符的前8个字节已经放入了RAM_ENDP0_TRAN缓存区(因为放入后能够读出来,所以确信数据是正确写进去了)。写入后也用Write374Byte( REG_USB_ENDP0, M_SET_EP0_TRAN_ACK( M_SET_EP0_RECV_ACK( Read374Byte( REG_USB_ENDP0 )), l)|BIT_EP0_TRAN_TOG );设置了端点0的控制寄存器。按我的理解这条语句的目的是应答ACK,同时设置端点0将要送入主机的字节数和当前数据为DATA1。但是我这里有一个问题,当我设置好端点0控制寄存器后,再回读出来,发现端点0控制寄存器的值不对,因为我写入的长度是8,应答是ACK,按理说执行完这条语句后应该是0x48,但是回读的值并不是0x48.这个问题有点类似我清中断后回读中断标志寄存器的值,但是读出来的值相应中断位还是1,并没有清掉。我也偿试过将端点0控制寄存器的值强制写入0x48(回读时是0x48),但是还是不行,问题依旧。 因为我这里程序架构跟你们提供的例程不一样,所以代码跟例程有点不同,但是流程是一样的,在调试过程中软件方面可能出现的各种问题都考虑过,结果还是一样,后来我也试着全部代码用例程里面的,从初始化到中断的处理,包括设备描述等,结果也是一样。一直都是只进入到GET DESCRIPTOR请求的SETUP中断后就再也没有出现过任何USB的中断,而且后面插拔的过程中也没有进入到USB中断中,包括总线复位中断、挂起中断,因为中断处理函数中的调试输出语句没有看到。不知道是不是这块芯片有问题或是硬件连接有问题引起的。