参考探索者板子上的摄像头试验做的修改
外挂了一个和探索者板子同型号的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的底层机制有关联。
请教大家我要怎么处理这种情况?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
参考你在这个帖子中的回复,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的数组。
---------------------------------
试验过,不成功。
---------------------------------
发个例程上来看看
一周热门 更多>