官方是否由 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函数。参考键盘上传的函数如下。
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: 下清零表示上传完成。