void?USB_DeviceInit(void) { ????IE_USB?=?0;?//?禁止USB總中斷 ????USB_CTRL?=?0; ????/*USBD0控制器配置,緩沖區(qū)為固定地址(無需配置)*/ ????D0_EP0RES?=?UEP_R_RES_ACK?|?UEP_T_RES_NAK; ????D0_EP1RES?=?bUEP_X_AUTO_TOG?|?UEP_X_RES_ACK; ????D0_EP2RES?=?bUEP_X_AUTO_TOG?|?UEP_X_RES_NAK; ????D0_EP3RES?=?bUEP_X_AUTO_TOG?|?UEP_X_RES_NAK; ????D0_EP_MOD?=?bUX_DEV_EN?|?bUX_EP1O_EN;?//?啟用USBD0子設(shè)備,設(shè)置端點(diǎn)1為OUT,設(shè)置端點(diǎn)2-3為IN,禁用端點(diǎn)4-6 ????D0_ADDR?=?0x00;?//?復(fù)位USBD0設(shè)備地址 ????/*USBD1控制器配置,緩沖區(qū)為固定地址(無需配置)*/ ????D1_EP0RES?=?UEP_R_RES_ACK?|?UEP_T_RES_NAK; ????D1_EP1RES?=?bUEP_X_AUTO_TOG?|?UEP_X_RES_NAK; ????D1_EP2RES?=?bUEP_X_AUTO_TOG?|?UEP_X_RES_NAK; ????D1_EP3RES?=?bUEP_X_AUTO_TOG?|?UEP_X_RES_NAK; ????D1_EP_MOD?=?bUX_DEV_EN;?//?啟用USBD1子設(shè)備,設(shè)置端點(diǎn)1-3為IN,禁用端點(diǎn)4-6 ????D1_ADDR?=?0x00;?//?復(fù)位USBD1設(shè)備地址 ????HB_ADDR?=?0x7F;?//?將收到的數(shù)據(jù)直接轉(zhuǎn)發(fā)到D0 ????USB_IF?=?0xFF;?//?清空USB中斷標(biāo)志寄存器 ????USB_IE?=?bUX_IE_SUSPEND?|?bUX_IE_TRANSFER?|?bUX_IE_BUS_RST;?//?使能<總線掛起&喚醒&復(fù)位,數(shù)據(jù)傳輸完成>中斷 ????USB_CTRL?=?bUX_DP_PU_EN;?//?使能USB復(fù)合設(shè)備,啟用DP內(nèi)部上拉1.5K電阻 ????IE_USB?=?1;?//?使能USB總中斷 }
問題一:
????代碼段中,單獨(dú)注釋掉USBD0或者USBD1,另一個USB子設(shè)備都能正常枚舉成功。如果兩個都保留,則只有USBD1子設(shè)備枚舉成功,USBD0沒有參與通信過程,照理來說應(yīng)該兩個子設(shè)備都能枚舉才對。
問題二:
????HB_ADDR=0x7F; 這句代碼是從官方提供的實(shí)例代碼照抄的,它的作用是什么? USBHUB的地址不需要上位機(jī)分配嗎?