完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用PSoC5LP,我试图通过USB UBART W/DMA向USB发送一个ADC数据流。目前,我有以下几点:
UsBuAtgLooLoIPEP(UBUTARTHARCCDYDATAYNIN EP,ADCX样本,62);//DMA端点,用于从PSoC发送ADC数据-& PC PC UBUARTARI RealouTeP(UsBuTARTHCDCdDATAOUTUEP EP,RDPASSFER,RDFUBER大小);//DMA端点,用于从PC读取USPUART数据-& gt;PSoC。用户SDESAA命令从PC到PSOC5LPUBUARTVIAL RADEUTEP功能开始采样。然后PC机通过加载功能自动将ADC数据流到PC机。采样将无限期地持续下去。 作为示例,我正在采样具有0~100的数字值的线性电压扫描。每次我从PC触发命令,我们将采样线性扫描。我们可以把每个扫描称为“框架”。 现在,我将数据传送到PC,但我不知道何时开始“框架”。这导致未对准的数据。所以,我认为我需要把ADC数据打包成一个简单的通信协议,它用字节串来标记“开始帧”和“结束帧”。 问题是,我不知道正确的方法来添加数据到ADC DMA,因为它都自动发生。 我现在有2个想法,但我不确定这是不是正确的方法。 每当我从PC接收启动命令时,运行这个函数:UsBuAttupPosiScript(StestFrimeByter)。然后,启动DMA。创建一个新的端点,链接到String StistFrimeByth[],然后一旦成功地发送了String框架字节,就交换回原来的ADC DMA端点。如有任何帮助,将不胜感激。 |
|
相关推荐
11个回答
|
|
你见过这些(AN6102可能会帮助,不确定)
http://www.cypress.com/documentation/application-notes/an52705-psoc-3-and-psoc-5lp-getting-started-dma an52705开始使用DMA http://www.cypress.com/documentation/application-notes/an84810-psoc-3-and-psoc-5lp-advanced-dma-topics an84810 PSoC 3和PSoC®5lp先进的DMA的话题 http://www.cypress.com/documentation/application-notes/an61102-psoc-3-and-psoc-5lp-adc-data-buffering-using-dma an61102 PSoC®三和PSoC 5lp ADC DMA数据缓冲 http://video.cypress.com/video-library/search/dma/视频DMA HTTPS://www. Youtube?COM/结果?在DMA上搜索SkyCHQue= DMA+PSoC视频(一些重叠) HTTP://www. nras.NET/UTILS/UBS.DEVICES.VIEW.HTML HTTP://www. CyPress?COM/?= 70131 an82072摆脱PSoC 3和PSoC 5lp -®USB通用数据传输标准HID驱动程序 HTTP://www. CyPress?COM/?= 39553 an56377摆脱PSoC 3和PSoC 5lp -®来实现USB数据传输的介绍 HTTP://www. CyPress?COM/?摆脱= 39404 an57473 - USB HID基础与PSoC 3和PSoC 5lp® HTTP://www. CyPress?COM/?= 39327 an57294摆脱USB 101通用串行总线2引言 HTTP://www. CyPress?COM/?摆脱= 40103 an58726 - PSoC®三/ PSoC 5lp USB HID中间(键盘和复合装置) http://www.element14.com/community/docs/doc-48266/l/cypress-ce60246--application-note-on-u***uart-for-psoc-3-psoc-5 USBUART 问候,Dana。 |
|
|
|
嗨,Dana,
谢谢你的回复。我实际使用AN6102作为我的项目的开始。我读过你联系的前几篇文章,但不是最后一对。 这些看起来像是一般的概述,我相信我的问题可能更具体一些。 |
|
|
|
只需跟踪这个帖子,使用UsBuTARToPuxString()命令和UsBoAtdioLoad in()函数就可以将所有的DMA数据都传送到PC。PutString()命令似乎起作用,因为我看到了我的“帧头”字符串,但在我发送的数据之后。DMA是垃圾。
|
|
|
|
如果…怎么办。。。
您定义了一个结构,该结构具有一个序言(StaskFFrm)初始化,一个缓冲区保存您的数据和一个可选的EndoFrm。 你的ADC-DMA进入数据区,当完成(甚至更早一点,尝试一下),你用DMA将整个结构传输到你的USB。 由于您可以使用多于两个TDS与一个用于DMA传输的PSoC5,您可以交替地使用一个单独的TD用于StasFFrm和EndoFrand指示器和一个第三TD,用于将数据从ADC传输到USB。 鲍勃 |
|
|
|
嘿,鲍伯,
谢谢你的提示! 我可以通过重新配置Load in()函数来发送标题信息和ADC DMA数据,如下所示: 空sEndotter(空){if(UsBuTARJ.CDCaseRead)()!= 0U)/*检查USB准备就绪。*/ { u***uart_loadinep(u***uart_cdc_data_in_ep,标题,6);// DMA端点从PSoC发送ADC数据——>;PC u***uart_loadinep(u***uart_cdc_data_in_ep,0, 6);// DMA端点从PSoC发送ADC数据——>;PC二= 1;//布尔} }然后复位的新框架,在主回路,如果newfra我= = 1,我重新loadinep()回到adc_sample缓冲: 如果(二= = 1){ configure_dma_adc2mem();/ /复位端点转换?u***uart_loadinep(u***uart_cdc_data_in_ep,adc_sample,62);// DMA端点从PSoC发送ADC数据——>;PC二= 0;}这看起来像我的页眉和页脚信息,在开始和结束每一个“框架”。然而,它看起来像我有时有一些数据留在DMA从以前的ADC samplingbefore我甚至解析头。 我想,剩下的ADC样本被保存到下一个DMA缓冲区,将被发送。我怎么能空的ADC的内存缓冲区,以确保从上一帧的数据不再是DMA? |
|
|
|
您只能中止DMA。你有没有检查过TD没有保存数据并重新开始?
在单个设备上混合不同的IO访问总是危险的,开始的DMA几乎无法控制,那么为什么不使用DMA来传输头和页脚呢?每个有一个自己的TD和所有三链正确。 鲍勃 |
|
|
|
贾斯廷,也许你把它弄得太复杂了。回到原来的问题,有同步帧,你可以传输数据包,每一个都是数据和包ID的结构(开始,停止,数字,时间戳等)。你必须在PC端删除包,但这应该没问题。奥迪赛1
|
|
|
|
我现在看到,我必须实现一个包结构,以便发送我的数据每帧。感谢在这方面的提示,因为我将不得不发送多个ADC通道在1包为未来的一部分,这个项目。
我仍然对切换端点有点困惑。假设我必须发送一个64字节的我的ADC数据包。n不是常数。如何将ADC端点发送到帧开始/结束端点?在我的例子中,帧启动/结束是由GPIO上的上升沿中断触发的。 |
|
|
|
|
|
|
|
这只是张贴在另一个线程上的ADC和DMA-
如何在启用具有排队事务请求的DMA信道之后防止不必要的DMA事务。 摘要:如果一个禁用的DMA信道接收到一个执行传输的请求,请求将被排队为类似于 未决中断。当启用信道时,将执行挂起的传输请求,导致 可能不需要的事务。解决办法是排队“终止通道”请求。这个请求 优先于传输请求。一旦启用信道,执行终止请求。 代替传输请求。这将清除挂起的传输请求并禁用信道。渠道 之后必须重新启用以实现预期的功能。 细节:当ADC转换结束(EOC)连接到DMA请求(DRQ)时发现了这个问题。 DMA信道的终端。DMA通道仅在一个简短的高速采样窗口中真正需要。 ADC将在其他时间正常使用,软件请求开始转换和“转换”。 完成“位被CPU轮询,以确定何时转换完成”。 观察到当ADC被禁用并且DMA信道被打开(启用)时,样本将 神秘地出现在公羊身上。即使保证了EOC信号未被断言,这种情况也在发生。 当通道启用时。 确定当ADC正常使用时,EOC断言DMA的DRQ失效。 通道。这个请求被DMA信道记住,即使DMA信道被禁用了。 当通道被启用时,这个“记住”的DRQ立即被执行,导致一个 意外的DMA传输。解决方案是断言CPU请求在启用通道之前终止链。 通过这样做,两个请求(传输请求和终止请求)将在DMA中排队。 通道,等待信道启用。当通道被启用时,终止请求将被接受。 传输请求和DMA信道的优先级将立即终止,删除挂起的请求。 传输请求。自终止以来第一次启用该信道后,需要重新启用该信道。 请求也将禁用信道。 下面是示例代码,演示如何在启用信道之前终止请求: //您的DMA配置代码到这里/ /或…//lt;-//端DMA配置码 //为了清除不想要的传输请求(DRQ),发出CPU终止链请求CyDMACHSETIVE请求(DMAX信道,CPU Tym MyLink); //启用DMA信道,这使得杀死虚假DMA事务,如果存在一个/和禁用信道,则必须重新启用CydMaMeund(DMAI信道,1); //重新启用DMA信道CydMaun启用(DMAX信道,1); 问候,Dana。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
752个成员聚集在这个小组
加入小组2069 浏览 1 评论
1826 浏览 1 评论
3634 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1760 浏览 6 评论
1510 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
507浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
357浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
410浏览 2评论
357浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
854浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:39 , Processed in 0.960645 second(s), Total 95, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号