|
一:遇到問題
1:usb-cdc協議移植出現 SET_LINE_CODING命令響應返回bufferover錯誤
2: usb傳輸速率過快出現單片機死機,程序停止在 while((USBDevIntSt & CDFULL) == 0); /* 等待DEVINTS寄存器的CDFULL位置
3:uip移植出現下載程序運行不起來
解決問題
問題一解決添加紅色代碼
else if (bEPPflags.bits.control_state == USB_RECEIVE)
{ /* 如果當前為接收狀態 if it is receive status */
i = USB_ReadEndpoint(0, EP0_PACKET_SIZE,
ControlData.dataBuffer + ControlData.wCount); /* 從端點 0 讀取數據 read from endpoint 0 */
if((ControlData.DeviceRequest.bRequest==SET_LINE_CODING)&&(ControlData.DeviceRequest.bmRequestType==0x21))
{
for(i=0;i<7;i++)
LineCoding[ i] = ControlData.dataBuffer[ i];
single_transmit(0,0 );
}
ControlData.wCount += i;
if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength)
{ /* 完成接收數據 finish receiving data */
bEPPflags.bits.setup_packet = 1; /* 通知contorl_handler()處理SETUP包 inform control_handler() to process SETUP packet */
bEPPflags.bits.control_state = USB_IDLE;
}
}
if((ControlData.DeviceRequest.bRequest==SET_LINE_CODING)&&(ControlData.DeviceRequest.bmRequestType==0x21))
{
bEPPflags.bits.control_state = USB_RECEIVE;
}
else
bEPPflags.bits.control_state = USB_IDLE;
問題二解決:
由于單片機內部總線速率在15Mhz沒有及時響應中斷出現寄存器數據別覆蓋,
//系統時鐘
#define Fosc 12000000UL //晶振時鐘 【Hz】
#define Fcclk (Fosc * 5) //系統頻率,必須為Fosc的整數倍(1~32),且<=60MHZ
#define Fcco (Fcclk * 4) //CCO頻率,必須為Fcclk的2、4、8、16倍,范圍為156MHz~320MHz
#define Fpclk (Fcclk / 4) * 2 //VPB時鐘頻率,提升到30Mhz 提到60Mhz rtc 寄存器無法讀取?????
#define FUSBclk (Fosc * 4) //48MHz
#define FUSBcco (FUSBclk * 4) //usb CCO頻率,必須為FUSBclk的2、4、8、16倍,范圍為156MHz~320MHz
問題三解決:
刪除程序中調試輸出printf調用
  |
|