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

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

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


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

* Function Name? : DevEP2_IN_Deal

* Description? ? : 端點(diǎn)2數(shù)據(jù)上傳

* Input? ? ? ? ? : l: 上傳數(shù)據(jù)長度(<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;

}

這個(gè)函數(shù)用的就是dma發(fā)送對嗎?
請問一下 有沒有串口的dma示例?


573串口沒有硬件DMA,只有硬件FIFO緩存。

調(diào)用DevEP2_IN_Deal這個(gè)函數(shù)前,如果端點(diǎn)2IN方向DMA對應(yīng)的RAM地址中存放有待上傳的數(shù)據(jù),會(huì)在主機(jī)下發(fā)IN令牌時(shí)自動(dòng)向主機(jī)上傳IN事務(wù)的數(shù)據(jù)包。

從機(jī)向主機(jī)上傳數(shù)據(jù)主要是如下步驟:①向DMA相應(yīng)的RAM中存放數(shù)據(jù)(可以用memcpy,也可以寫個(gè)循環(huán)),②調(diào)用DevEPn_IN_Deal函數(shù)。參考鍵盤上傳的函數(shù)如下。

c3f5426355ba70620387b7cd35e574a.png27aa68a3ff040f7b325876467bc1142.png

aeab617bad79fd519590e9afdad593c.png

1d513d1c66167188690380c66404245.png


1、usb除了 DMA的發(fā)送方式,還有沒有其他發(fā)送方式 比如 類似串口一樣 直接寫usb數(shù)據(jù)寄存器方式,

2、我現(xiàn)在遇到一個(gè)問題就是usb DMA設(shè)置好數(shù)據(jù)后 快速循環(huán)發(fā)送 比如這樣子

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); //需要加延時(shí),否則有概率 接收會(huì)丟包(某些win7)

}

是否有api可以判斷狀態(tài) DMA的數(shù)據(jù)已經(jīng)上報(bào) 完成



您好,只有DMA方式。每個(gè)端點(diǎn)都需要64個(gè)8位寄存器緩存數(shù)據(jù)的話,沒有這么多資源。

若想穩(wěn)定運(yùn)行IN上傳,可以引入一個(gè)全局變量,在調(diào)用DevEPn_IN_Deal前將其置位表示暫未上傳成功,在USB_DevTransProcess()中的?case UIS_TOKEN_IN | 端點(diǎn)號(hào)n: 下清零表示上傳完成。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频