历史上的今天
返回首页

历史上的今天

今天是:2024年10月13日(星期日)

正在发生

2018年10月13日 | stm32f4 DMA任意长度buffer无停顿传输

2018-10-13 来源:eefocus

最近闲来无事,玩起了之前自己打的一块f407开发板,做一些VGA分辨率下的模式识别.
我的板上外扩有2兆的SRAM,之前一直用QVGA作图像源,算法能跑到15帧,还算不错.
我的方式是dcmi数据DMA到外扩SRAM,SRAM中处理,结果拷贝到LCD.改到VGA分辨率后问题来了.
 
图像错乱,但局部图像可以看出摄像头正确的输出 ,整个画面像一张位置错乱的拼图。
据此排除了摄像头输出格式的问题,那么很有可能是显示遮盖造成的。到底是什么原因呢?
几经排查,发现当我修改DMA的buffer size 时,画面会呈现截然不同的组合,难道是DMA的问题?
查阅资料才发现,自己之前对于buffer size的认识是错误的。在地址自增模式下,buffer size实际决定了一次传输中操作内存区块的大小。
但是问题又来了,我一帧图像需要传输307200*16bit的数据,而buffer size最大为65535,实际映射的内存为65536*4byte,不够我一帧存储的!
于是想到了DMA传输完成中断,中断中改目标地址,这样就可以一段一段地传输整帧图像了。
但是这种方式并不完美,DMA完成中断时如果处理不当很容易造成图像停顿,运动情况下会导致撕裂。
有没有更好的方案呢?
这时候我注意到f407新增的double buffer模式,一般这种模式用来很方便的实现乒乓传输。
但粗略一算,即便是double buffer也刚好不够我传输一帧图像,还差一点。怎么办呢?
这时候我又想到了中断......
于是故事的结局相信大家也都猜到了
double buffer模式, DMA开传输完成中断,中断中检测当前访问区块,然后更改另一区块内存基址.
由于double buffer模式是不需要关闭DMA就可以重新配置非active区块的,所以整个过程无停顿!
完美解决!特此记录!

推荐阅读

史海拾趣

胜利(VICTOR)公司的发展小趣事

进入21世纪,胜利公司加大了对技术研发的投入,不断推出具有创新性的产品。例如,公司研发的碳纤维羽毛球拍,不仅轻盈耐用,而且性能卓越,迅速成为市场上的热销产品。此外,公司还积极引入新材料、新工艺,不断提升产品的品质和性能。

Avalon Photonics公司的发展小趣事

Avalon Photonics深知技术创新是公司发展的核心动力。因此,公司每年都将大量资金投入研发领域,不断推动技术创新。公司研发团队积极探索新技术、新材料,在光子学领域取得了多项重要突破。这些技术创新不仅提升了Avalon产品的竞争力,也为公司在市场上赢得了良好的声誉。

Box Enclosures公司的发展小趣事

Box Enclosures公司自创立之初,就明确了自己的定位——专注于为电子行业提供高品质的机箱和外壳产品。公司始终坚持严格的质量控制标准,从原材料采购到生产工艺,每一个环节都力求精益求精。这种对品质的执着追求,使得Box Enclosures的产品在市场上赢得了良好的口碑,逐渐在电子行业中占据了一席之地。

Baneasa SA公司的发展小趣事

面对日益增长的市场需求,Baneasa SA意识到必须提升产能以满足客户的需求。于是,公司投入大量资金对生产线进行升级改造,引进了先进的生产设备和技术。这些举措使得Baneasa SA的产能得到了大幅提升,同时也保证了产品质量的稳定性和可靠性。

Cypress(赛普拉斯)公司的发展小趣事

Cypress公司成立于1982年,总部设在美国加州的San Jose。创业之初,公司专注于高速CMOS SRAM、EEPROM、PAL器件和TTL逻辑器件的设计和开发。这一时期,Cypress通过引入创新的技术和产品设计,在竞争激烈的电子芯片市场中逐渐崭露头角。公司凭借对技术的持续投入和积累,为未来的发展奠定了坚实的基础。

CTS公司的发展小趣事

进入20世纪90年代,CTS公司迎来了重要的技术突破。随着Motorola通讯零件事业部的加入,CTS在无线通讯领域取得了显著进展,成为该领域的领先者。此外,CTS还积极投入研发,不断推出创新产品,进一步巩固了其在电子行业的地位。

问答坊 | AI 解惑

关于鉴相芯片

请问大家都用什么鉴相芯片,我做锁相环一直用的是ADF---系列的,现在想找一种能用于小数分频的,请推荐一下哈,要是有可能最好附上器件资料什么的,先谢过喽…

查看全部问答>

protel拼板.rar

本帖最后由 paulhyde 于 2014-9-15 03:01 编辑 protel拼板.rar  …

查看全部问答>

高精度频率基准----OCXO恒温晶振

这个是拆机的OCXO恒温晶振,具有很好的短期稳定性,拆机的东西,很便宜,才38元一个,内部工艺很考究。新的估计要上千元。 …

查看全部问答>

谁做过驱动啊?告诉我什么得什么样的流程啊,我假如我对scsi进行编程怎么办?

谁做过驱动啊?告诉我什么得什么样的流程啊,我假如我对scsi进行编程怎么办? PCI有13个关于scsi的针脚,怎么样的过程或流程给我说下被,如何编写?但是寄存器的首地址无法确定 该怎么做呢?…

查看全部问答>

求助:WinCE StandardSDK Emulator启动后死机

Downloading files Downloading file d:\\wince\\test.exe. Finished downloading. 之后在StandardSDK Emulator打开My Computer 窗口里只有cemgrc, Control Panel 没有test.exe, windows, program files等 并且emulator死机了 有朋友碰过这 ...…

查看全部问答>

Linux下CAN驱动问题(HMs30c7202) c_candrv-1.2.0

目前接手一项目,头有点大,CAN在运行过程中,会出现不能收发的情况,从新上电后正常 使用的是c_candrv-1.2.0驱动程序,个人感觉可能是使用方法不对 #define can0file \"/dev/can0\" #define can1file \"/dev/can1\" #define can2file \"/dev/can ...…

查看全部问答>

有没有人用过 LoadAnimatedCursor 这个API啊?

环境 evc4, Standard SDK for wince 5.0 我在 resource.h 下这么定义 #define IDB_BITMAP1                     MAKEINTRESOURCE(104) #define IDB_BITMAP2    ...…

查看全部问答>

申请MSP-EXP430G2学习

感谢论坛提供这次机会!~…

查看全部问答>

两个F149之间的通信

两个F149之间的通信 你好,我现在正在做两个F149之间的通信,要求是:发送和接受全用中断,而且当接受正确时,给对方一个应答信号!!!急用!!!谢谢!!! 能给我个例子好吗? 我是一个新手,7月份才毕业,现在在公司是试用期,所以我特别的 ...…

查看全部问答>