以下是论坛里找到的沁恒厂商提供的CH579与BLE外设混合使用的例程DEMO
打开工程编译不过,发现缺少源文件,也是醉了,重新移植,看了这坨祖传的代码,看得真是心累,这是厂家雇大一学生写的吗?各种莫名其妙。不能规范一点么,为了节省成本真是不要face
原工程链接见附件:
Peripheral_usb_host_work_with_spug.rar
言归正传!!!!!---------------------------------------------->
1. 同步标志位为什么要做反转,
2.这个数据收发的DEMO写得有什么问题没,为什么移植到目标芯片上就只收发成功了一次,后边全乱了套了。
/*发送数据长度*/
uint8_t UsbOut( uint8_t *pBuf,uint8_t len ) // 中断端点3发送
{
uint8_t TxCnt,s,endp;
endp = ThisUsbDev.GpVar[1];
while ( len ) {
//mDelayuS( 200 );
R8_UH_TX_LEN = len >= 32 ? 32 : len;
for ( TxCnt = 0; TxCnt != R8_UH_TX_LEN; TxCnt ++ ) {
TxBuffer[ TxCnt ] = *pBuf;
pBuf ++;
}
s = USBHostTransact( USB_PID_OUT << 4 |( endp & 0x7F), endp & 0x80 ? RB_UH_R_TOG | RB_UH_T_TOG : 0, 0 ); // OUT数据
if ( s == ERR_SUCCESS ) {
len -= R8_UH_TX_LEN;
endp ^= 0x80; // 同步标志翻转
ThisUsbDev.GpVar[1] = endp; // 保存同步标志位
}
else return( s );
}
return ERR_SUCCESS;
}
/*返回数据接收长度,数据存放RxBuffer*/
uint8_t UsbBulkIn( void )
{
uint8_t i,s,len,endp = ThisUsbDev.GpVar[0];
s = USBHostTransact( USB_PID_IN << 4 | (endp & 0x7F), endp & 0x80 ? RB_UH_R_TOG | RB_UH_T_TOG : 0, 0 );
if ( s == ERR_SUCCESS ) {
endp ^= 0x80; // 同步标志翻转
ThisUsbDev.GpVar[0] = endp; // 保存同步标志位
//tmos_memcpy(RX_BUF,RxBuffer,11);
len = sizeof(RX_BUF); // 接收到的数据长度
if ( len ) {
if(m_handlers)
{
usb_host_app_event_t event;
event.type = USB_HOST_APP_DATA_IN;
event.data.p_data = RxBuffer;
//tmos_memcpy(event.data.p_data,RxBuffer,len);
event.data.bytes = len;
m_handlers(&event);
}
// USB_LOG("CH579 In data: \n");
// for ( i = 0; i < len; i ++ ) USB_LOG("%02X ",(UINT16)(RxBuffer[i]) );
// USB_LOG("\n");
}
return len;
}
else if ( s != ( USB_PID_NAK | ERR_USB_TRANSFER ) ) USB_LOG(" error %02x\n",(UINT16)s); // 可能是断开了
return 0;
}