重新开一楼好了
使能DCMI->CR的capture位(bit0)
Bit 0 CAPTURE: Capture enable
0: Capture disabled.
1: Capture enabled.
The camera interface waits for the first start of frame, then a DMA request is
generated to transfer the received data into the destination memory.
In snapshot mode, the CAPTURE bit is automatically cleared at the end of the
1st frame received.
In continuous grab mode, if the software clears this bit while a capture is
ongoing, the bit will be effectively cleared after the frame end.
Note: The DMA controller and all DCMI configuration registers should be
programmed correctly before enabling this bit.这一位要等到最后使能!!!
配置JPEG控制位。以及fifo等配置…这里没动原子的程序
还要使能DCMI的帧结束中断。
DMA2Stream1对应进行配置,这个比较常规一点。
虽然支持双缓冲,这里先不折腾,能用就好。
这里修改为正常模式,即非循环模式。通过查询传输完成位确定图像传输完成。进行串口发送
3. 然后问题就来了。。。
这样配置DCMI并不会工作!!!
于是进入了调试,发现在enable DCMI之后
将VSPOL从1点击变为0,DCMI开始正常获取数据
然后就脑洞巨大的在程序中模拟这一过程。。
OV2640_JPEG_Mode(); //JPEG模式
My_DCMI_Init(); //DCMI配置
DCMI_DMA_Init((u32)&jpeg_buf,jpeg_buf_size,DMA_MemoryDataSize_Word,DMA_MemoryInc_Enable);//DCMI DMA配置
OV2640_OutSize_Set(jpeg_img_size_tbl[size][0],jpeg_img_size_tbl[size][1]);//设置输出尺寸
DCMI_Start(); //启动传输
delay_ms(1000);
DCMI->CR &= (~(1<<7));
虽然粗暴了一点,确实可以出数据了,而且看着还算正确……
理论上配置OV2640、DCMI以及DMA,然后坐着等数据就好了。实际上呢,应该也是可以的。只是个人不知道该怎么继续往下调了,在这做个记录吧。 目前只能实现DCMI捕获OV2640输出的一定长度的JPEG数据,通过串口1以115200发送给电脑。然后整个程序就挂掉了,没跑飞但是没有什么动静…有待进一步调试
|