求CH573 usb或者uart dma的示例程序

官方是否由 DMA的示例程序, usb或者 uart的可以

官方EVT中USB例程里使用了DMA,可供参考。


/*******************************************************************************

* Function Name  : DevEP2_IN_Deal

* Description    : 端点2数据上传

* Input          : l: 上传数据长度(<64B)   

* Return         : None

*******************************************************************************/

void DevEP2_IN_Deal( UINT8 l )

{

    R8_UEP2_T_LEN = l;

    R8_UEP2_CTRL = (R8_UEP2_CTRL & ~MASK_UEP_T_RES)| UEP_T_RES_ACK;

}

这个函数用的就是dma发送对吗?
请问一下 有没有串口的dma示例?


573串口没有硬件DMA,只有硬件FIFO缓存。

调用DevEP2_IN_Deal这个函数前,如果端点2IN方向DMA对应的RAM地址中存放有待上传的数据,会在主机下发IN令牌时自动向主机上传IN事务的数据包。

从机向主机上传数据主要是如下步骤:①向DMA相应的RAM中存放数据(可以用memcpy,也可以写个循环),②调用DevEPn_IN_Deal函数。参考键盘上传的函数如下。

c3f5426355ba70620387b7cd35e574a.png27aa68a3ff040f7b325876467bc1142.png

aeab617bad79fd519590e9afdad593c.png

1d513d1c66167188690380c66404245.png


1、usb除了 DMA的发送方式,还有没有其他发送方式 比如 类似串口一样 直接写usb数据寄存器方式,

2、我现在遇到一个问题就是usb DMA设置好数据后 快速循环发送 比如这样子

while (uart0_buffer_count = app_drv_fifo_length(&uart0_rx_fifo)) {

if (uart0_buffer_count > 64) uart0_buffer_count = 64;

app_drv_fifo_read(&uart0_rx_fifo, send_buffer, &uart0_buffer_count);

memcpy(pEP2_IN_DataBuf, send_buffer, uart0_buffer_count);

DevEP2_IN_Deal(uart0_buffer_count);

DelayMs(10); //需要加延时,否则有概率 接收会丢包(某些win7)

}

是否有api可以判断状态 DMA的数据已经上报 完成



您好,只有DMA方式。每个端点都需要64个8位寄存器缓存数据的话,没有这么多资源。

若想稳定运行IN上传,可以引入一个全局变量,在调用DevEPn_IN_Deal前将其置位表示暂未上传成功,在USB_DevTransProcess()中的?case UIS_TOKEN_IN | 端点号n: 下清零表示上传完成。


只有登录才能回复,可以选择微信账号登录