新手上路
- 积分
- 42
- 金钱
- 42
- 注册时间
- 2018-12-6
- 在线时间
- 11 小时
|
1金钱
[mw_shl_code=c,true]//处理JPEG数据
//当采集完一帧JPEG数据后,调用此函数,切换JPEG BUF.开始下一帧采集.
void jpeg_data_process(void)
{
if(ov2640_mode)//只有在JPEG格式下,才需要做处理.
{
if(jpeg_data_ok==0) //jpeg数据还未采集完?
{
DMA_Cmd(DMA2_Stream1, DISABLE);//停止当前传输
while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//等待DMA2_Stream1可配置
jpeg_data_len=jpeg_buf_size-DMA_GetCurrDataCounter(DMA2_Stream1);//得到此次数据传输的长度
jpeg_data_ok=1; //标记JPEG数据采集完按成,等待其他函数处理
printf("log1.\r\n");
}
if(jpeg_data_ok==2) //上一次的jpeg数据已经被处理了
{
DMA2_Stream1->NDTR=jpeg_buf_size;
DMA_SetCurrDataCounter(DMA2_Stream1,jpeg_buf_size);//传输长度为jpeg_buf_size*4字节
DMA_Cmd(DMA2_Stream1, ENABLE); //重新传输
jpeg_data_ok=0; //标记数据未采集
printf("log2.\r\n");
}
}
} [/mw_shl_code]
STM32F407驱动OV2640,DCMI采用连续模式。 因为不是每一帧的数据我都需要,而DCMI接收4个完整字节就会触发一次DMA请求,所以有个问题,上一帧的数据最后四个字节,在我一使能DMA时就会通过DMA传到内存中去,但是这4个字节是上一帧的数据,是不需要的数据,请问这个怎么避免?
|
最佳答案
查看完整内容[请看2#楼]
你可以以帧中断来同步。
你需要的帧就存储数据,不需要的帧,你直接丢弃即可。
至于4字节问题,JPEG数据流在头尾有很多无意义的数据,大部分是0,直接丢弃即可。
所以4字节完全不是问题
|