完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前期通过客服拿到了CH567的例程,但是由于内容不完整,只有SETUP控制传输的部分内容,并有一些写法存在问题。目前经过查阅文档,依然无法实现设备端的端点批量传输、IN数据至上位机(上位机OUT数据能够正常接收)。希望能够提供批量传输较为完整的例程,谢谢。
主要的代码如下: __attribute__ ((aligned(4)))UINT8 Ep1Buffer[512*2] ; // EP1 IN+OUT, must 4字节对齐 #define U***Ep1OUTBuf ((PUINT8)&Ep1Buffer[0]) #define U***Ep1INBuf ((PUINT8)&Ep1Buffer[512]) void USB1DeviceInit( ){ R8_USB1_CTRL = bUC_CLR_ALL; //清空中断标志和FIFO R8_USB1_CTRL = UCST_HS | bUC_INT_BUSY |bUC_DMA_EN; //设备模式,高速, R8_USB1_SUSPEND = 0; //不挂起 R8_USB1_DEV_AD = 0x00; //设备地址0 R8_USB1_INT_FG = 0xff; //清除中断标志 R8_USB1_INT_EN = bUIE_FIFO_OV | bUIE_SUSPEND | bUIE_TRANSFER | bUIE_BUS_RST; //中断使能 R8_UEP1_TX_CTRL1 = UEP_T_RES_NAK | bUEP_AUTO_TOG; R8_UEP1_RX_CTRL1 = UEP_R_RES_ACK| bUEP_AUTO_TOG; R8_UEP4_1_MOD1 |= bUEP1_TX_EN | bUEP1_RX_EN; R16_UEP1_MAX_LEN1 = 512; R16_UEP1_DMA1 = (UINT16)(UINT32)Ep1Buffer; } void xxxx(){ .......... R16_UEP1_DMA1 = (UINT16)(UINT32)U***Ep1INBuf; R16_UEP1_T_LEN1 = len; R8_UEP1_TX_CTRL1 = (R8_UEP1_TX_CTRL1 & ~ MASK_UEP_T_RES) | UEP_T_RES_ACK; //通过HUS HOUND发现,U***Ep1INBuf数据未能发送至上位机 } |
|
相关推荐
1个回答
|
|
在单片机执行xxx()函数之后,CTRL寄存器中TX的状态就变成ACK了,这个时候只要主机下发IN令牌,芯片就会将数据包上传。但是要注意一点,首先BUSHOUND是差不多在协议层的,有些包不显示,包括错误的包,其次有一些错误状态也无法显示。如果有条件用硬件抓包工具进行抓包.
|
|
|
|
只有小组成员才能发言,加入小组>>
254 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2735 浏览 2 评论
2250 浏览 1 评论
请问一下CH573的PA9引脚用作TMR0功能可以做输入捕获用来进行红外解码吗?
1278浏览 7评论
BLE-Dongle与CH9141-A核心板进行双向透传,无法接收到串口数据怎么解决?
485浏览 7评论
221浏览 4评论
主机NRF52832从机ch9141,ch9141断电后无法发送数据怎么解决?
403浏览 3评论
292浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 08:55 , Processed in 0.890026 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号