新手入门
- 积分
- 6
- 金钱
- 6
- 注册时间
- 2020-8-28
- 在线时间
- 1 小时
|
1金钱
本帖最后由 YBwisdom 于 2020-11-12 18:58 编辑
问题:串口使用DMA发送,发送没反应,既不提示发送失败,也不提示发送成功。
分析:
另一块板子SDRAM用的是H57V2562GTR,开发板用的是W9825G6KH,都是16位数据总线的SDRAM,同样的串口DMA发送程序,能够正常执行。说明程序是没问题的。
最新的板子SDRAM用的是MT48LC4M32B2,32位数据总线。DMA发送怎么都没反应。。。。做了个实验,将SDRAM换成片内的RAM,DMA又正常了。


 - //DMA初始化
- alt_u8 dmaReady()
- {
- if((txchan=alt_dma_txchan_open(DMA_0_NAME))!=NULL)
- {
- if((ret=alt_dma_txchan_ioctl(txchan,ALT_DMA_SET_MODE_8,NULL))>=0)
- {
- if((ret=alt_dma_txchan_ioctl(txchan,ALT_DMA_TX_ONLY_ON,(void *)(UART_0_BASE+2)))>=0)
- {
- //printf("OPEN DMA SUCCEED!!\r\n");
- return TRUE;
- }
- }
- else
- {
- return FALSE;
- }
- }
- return FALSE;
- }
- /*
- *函数功能:uart发送字符串
- * */
- void uart_printf(const char *const TxData, ...)
- {
- unsigned short n;
- va_list ap; //定义了一个数组名为ap的指针数组,该数组只含有一个元素
- va_start(ap,TxData); //ap指向可变参数函数....号前的最后一个参数
- while (!tx_done);
- n=vsnprintf(string,txd_data_size,TxData,ap); //用于向string指定的串缓冲区写入以data_chars为格式化,以ap为参数首址的数据
- tx_done=0;
- ret=alt_dma_txchan_send(txchan,string,n,(void*)dma_done,NULL);
- // if(!(ret=alt_dma_txchan_send(txchan,string,n,(void*)dma_done,NULL)))
- // printf("DMA transmit!!\r\n");
- // else
- // printf ("Error: failed to post transmit request\n");
- va_end(ap);
- }
复制代码
|
|