DCMI的DMA函数DMA_SetCurrDataCounter

2019-07-21 01:25发布

参考探索者板子上的摄像头试验做的修改

外挂了一个和探索者板子同型号的1M字节的外部SRAM
将摄像头的数据开在外部SRAM中

问题出在jpeg_buf_size上

#define jpeg_buf_size 31*1024   
__align(4) u32 jpeg_buf[jpeg_buf_size];

我为了输出640*480的RGB565图片将这里的jpeg_buf_size修改为160*1024
这样就导致了程序中调用这个函数
DMA_SetCurrDataCounter(DMA2_Stream1,jpeg_buf_size )
时出现了整形转换的警告

这是因为
void DMA_SetCurrDataCounter(DMA_Stream_TypeDef* DMAy_Streamx, uint16_t Counter)
第二个参数Counter是16位的,这样就使得jpeg_buf_size 要小于65535

我尝试将Counter这个参数修改为32位的,但不能正常传输,估计这个参数和DMA的底层机制有关联。

请教大家我要怎么处理这种情况?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
tuzihog
1楼-- · 2019-07-21 17:23
回复【6楼】正点原子:
---------------------------------
参考你在这个帖子中的回复,http://www.openedv.com/posts/list/29064.htm

这里DMA仅仅负责搬运。 
不停的将DCMI->DR的数据,搬运到目标地址,一次搬运长度是1. 
如果你用外部SRAM,确实应该用目标地址自增,这个忘记了。。。 
LCD是可以自己地址自增的。。。SRAM得你设置地址自增才行。 
然后传输完一帧要中断,重新设置传输量。 
中断你可以采用DCMI的帧中断,到里面再次去设置DMA。

DCMI的帧中断里面怎么设置DMA?
DMA2_Stream1->M0AR = (u32)&YUV422_buf_CAM;
这样可以?YUV422_buf_CAM是开在外部SRAM的数组。
正点原子
2楼-- · 2019-07-21 17:58
 精彩回答 2  元偷偷看……
tuzihog
3楼-- · 2019-07-21 23:11
回复【8楼】正点原子:
---------------------------------
试验过,不成功。
lvehe
4楼-- · 2019-07-22 03:45
回复【9楼】tuzihog:
---------------------------------
发个例程上来看看
tuzihog
5楼-- · 2019-07-22 09:18
 640*480 DMA双缓冲的例程
tuzihog
6楼-- · 2019-07-22 15:09
 精彩回答 2  元偷偷看……

一周热门 更多>