1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
你好,有人能帮助我如何配置一个DMA块(特别是每个突发的字节数和每个脉冲的请求数)来做这个吗?:
我有一个DFB在FS(3KSPs)输出16位字。 它的EOC在DMA块中发射一个DMA请求 我希望DMA传输第一个低字节(在HOLDAYPTR中可用),然后将高字节(在HalDaMyPtR)转换为一个UART(UARTHAR11TXDATAYPPTR)。 我已经尝试了几个配置,使用一个或两个传输描述符,但我只得到一个字节从UART的每一个EOC。 见我的最后一次尝试(只发送一个字节): Unt8DMA33ChanChan. UIT8 8DMAY3YTD〔1〕; 定义了DMA33YBythyPiulSurb 2 定义dMA33ReavestPipe突发1 定义DMA33SRCKBASE(CyDeVelePurrimBaseBasic) 定义DMA33Y-dSTBASBASE(CyDevs-SrRMyBASE) DMAY3*/*DMA配置 DMA33JAN=DMA33YD-主化(DMAY3YBYTEXPARIORB Burd,DMA33IQuestESTPARYBY突发, Hi16(DMA33SRCB基),Hi16(DMA33YDSTHASBASE); DMA33YTD〔0〕=CydMatalLoad(); CydMatdSt配置(DMAY3YTD〔0〕,1,DMAIN VALIDIDYTD,TDY-IXA SRCYADR); CydMatdStAdvices(DMA33YTD〔0〕,Lo16((UIT32)Fielt1 1HOLDAYTPTR),Lo16((UIT32)UARTHAR11TXDATAYPPTR); CyDmaChSetinitialTd(DMA33JAN,DMAY3YTD〔0〕); CydMaun启用(DMAY3ShanChank,1); 谢谢, 马克西古兹曼 以上来自于百度翻译 以下为原文 Hello, could somebody help me in how to configure one DMA block (specially number of bytes per burst, and number of request per burst) to do this?: I have one DFB outputting 16bit words at Fs (3KSPS) Its EOC fires one DMA request ina DMA block I want the DMA to transfer first Low byte (available in HOLDA_PTR) then HIgh byte (in HOLDAM_PTR) to one UART (UART_1_TXDATA_PTR) I have tryied several configs, using one or two transfer descriptors, but I only get one byte out off the UART for every EOC. See my last attempt (only sends out one byte): uint8 DMA_3_Chan; uint8 DMA_3_TD[1]; #define DMA_3_BYTES_PER_BURST 2 #define DMA_3_REQUEST_PER_BURST 1 #define DMA_3_SRC_BASE (CYDEV_PERIPH_BASE) #define DMA_3_DST_BASE (CYDEV_SRAM_BASE) /* DMA Configuration for DMA_3 */ DMA_3_Chan = DMA_3_DmaInitialize(DMA_3_BYTES_PER_BURST,DMA_3_REQUEST_PER_BURST, HI16(DMA_3_SRC_BASE),HI16(DMA_3_DST_BASE)); DMA_3_TD[0] = CyDmaTdAllocate(); CyDmaTdSetConfiguration(DMA_3_TD[0], 1, DMA_INVALID_TD, TD_INC_SRC_ADR); CyDmaTdSetAddress(DMA_3_TD[0], LO16((uint32)Filter_1_HOLDA_PTR), LO16((uint32)UART_1_TXDATA_PTR)); CyDmaChSetInitialTd(DMA_3_Chan, DMA_3_TD[0]); CyDmaChEnable(DMA_3_Chan, 1); Thanks, Maxi Guzman |
|
相关推荐
1个回答
|
|
嗨,马克西,这里有一些需要在你的代码中改变的东西。
1)UART TX缓冲区大小是多少?如果缓冲区的大小为4或更小,则应该使用最长地址。 定义DMA33Y-dSTBASE(CyDeVelEnguriBaseBASE) 如果缓冲区的大小大于4,则必须具有BeyDevs-SrRMyBASE。 (2)由于只有不一致性,才得到较低字节的主要原因。DFB寄存器寄存器一致性字节应该设置为最后写入的字节。DFB滤波器组件将默认的一致性键设置为高字节。当DMA读或写低字节,然后在寄存器中写入高字节时,应该将其改为中间字节。 参考DFB〔0…0〕- COHER寄存器,以了解更多关于滤波器一致性设置(参见TRM寄存器簿的详细信息)/*滤波器一致性设置到MID字节*/FieldTraceReqRe= 0x55; 以上来自于百度翻译 以下为原文 Hi Maxi, here are a couple of things that needs to be changed in your code. 1) What is the UART TX Buffer size ? If the size of the buffer if 4 or lesser, then the dest address should be #define DMA_3_DST_BASE ( CYDEV_PERIPH_BASE ) if the size of the buffer is greater than 4, it has to be CYDEV_SRAM_BASE. 2) The primary reason why you are getting only the lower byte is becuase of the coherency not set properly. The DFB staging register coherency key byte should be set to the byte that is written last. The DFB Filter component sets the default coherency key as the High byte. It should be changed to middle byte as DMA reads or writes low byte followed by high byte in the staging register. Refer to DFB[0..0]_COHER register to learn more about filter coherency settings (Refer to the TRM register book for details) /*Filter Coherency set to mid byte */ Filter_COHER_REG = 0x55; |
|
|
|
只有小组成员才能发言,加入小组>>
754个成员聚集在这个小组
加入小组2105 浏览 1 评论
1851 浏览 1 评论
3669 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1786 浏览 6 评论
1536 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
569浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
423浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
437浏览 2评论
383浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
915浏览 2评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 13:30 , Processed in 0.867933 second(s), Total 77, Slave 61 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号