設(shè)備描述符的前8個(gè)字節(jié)已經(jīng)放入了RAM_ENDP0_TRAN緩存區(qū)(因?yàn)榉湃牒竽軌蜃x出來,所以確信數(shù)據(jù)是正確寫進(jìn)去了)。寫入后也用Write374Byte( REG_USB_ENDP0, M_SET_EP0_TRAN_ACK( M_SET_EP0_RECV_ACK( Read374Byte( REG_USB_ENDP0 )), l)|BIT_EP0_TRAN_TOG );設(shè)置了端點(diǎn)0的控制寄存器。按我的理解這條語句的目的是應(yīng)答ACK,同時(shí)設(shè)置端點(diǎn)0將要送入主機(jī)的字節(jié)數(shù)和當(dāng)前數(shù)據(jù)為DATA1。但是我這里有一個(gè)問題,當(dāng)我設(shè)置好端點(diǎn)0控制寄存器后,再回讀出來,發(fā)現(xiàn)端點(diǎn)0控制寄存器的值不對(duì),因?yàn)槲覍懭氲拈L度是8,應(yīng)答是ACK,按理說執(zhí)行完這條語句后應(yīng)該是0x48,但是回讀的值并不是0x48.這個(gè)問題有點(diǎn)類似我清中斷后回讀中斷標(biāo)志寄存器的值,但是讀出來的值相應(yīng)中斷位還是1,并沒有清掉。我也償試過將端點(diǎn)0控制寄存器的值強(qiáng)制寫入0x48(回讀時(shí)是0x48),但是還是不行,問題依舊。 因?yàn)槲疫@里程序架構(gòu)跟你們提供的例程不一樣,所以代碼跟例程有點(diǎn)不同,但是流程是一樣的,在調(diào)試過程中軟件方面可能出現(xiàn)的各種問題都考慮過,結(jié)果還是一樣,后來我也試著全部代碼用例程里面的,從初始化到中斷的處理,包括設(shè)備描述等,結(jié)果也是一樣。一直都是只進(jìn)入到GET DESCRIPTOR請求的SETUP中斷后就再也沒有出現(xiàn)過任何USB的中斷,而且后面插拔的過程中也沒有進(jìn)入到USB中斷中,包括總線復(fù)位中斷、掛起中斷,因?yàn)橹袛嗵幚砗瘮?shù)中的調(diào)試輸出語句沒有看到。不知道是不是這塊芯片有問題或是硬件連接有問題引起的。