|
本帖最后由 yandld 于 2014-3-13 15:13 编辑
最新需要给新板子做个摄像头的demo,选择了智能车常用的OV7620(黑白灰度输出,320*240,16MS一场中断)
关于OV7620:
OV7620 不进行任何I2C配置时的出厂频率
图像分辨率:240*320
场中断(href) 16MS 一次
行中断(vsync) 64US一次
像素中断(pclk) 频率 12.5M
OV7620 行中断,场中断 和 像素中断 时序图
程序目的是为了最大限度的解决CPU处理时,把OV7620的图像打在LCD上显示
基本思路:
1. 行中断触发DMA读取OV7620数据口(8个数据端口接到PORT A7-15上),每次MinorLoop传输320字节,MajorLoop 执行240次,这样仅仅靠DMA就可以完全自动的完成一场数据传输。无需行中断处理。
2. DMA 源地址当然是摄像头数据端口,目的地址是外部SRAM,触发源是OV7620行同步信号,也就是说DMA直接把数据从DMA搬到外部SRAM上。
3. 每当一场采集完成,触发场中断,CPU介入处理,执行用户回调函数,复位DMA,用一个简单的状态等待下一场到来之后,再启动DMA开始传输。
最终效果:
[a
软硬件平台:
硬件: 超核K60 渡鸦 开发板
软件 下载: 代码直接作为超核V2.5开发包的一部分
地址: https://github.com/yandld/CH-K-Lib-V2.5-/archive/master.zip
使用:
在board.h中修改OV7620所对应的BSP配置(端口号引脚好等等)。然后打开串口终端,115200波特率,先输入命令"FLEXBUS"(支持TAB自动补全哦~~)。然后再输入”OV7620“
见视频:
不足:
1. 场中断仍然需要CPU处理,再以后的设计中,看看能不能把场中断也节约掉.比如用DMA中断之类的。其实也差不多。。感觉场中断是省不掉了。。
2. 对LCD实在没啥研究,本来想开窗直接DMA传送到LCD上显示的(不知道会比现在快多少倍。。),但是由于时间所限,就泡汤了。。就算当练习了一下Flexbus 驱动外部SRAM吧。。
3. 对于外部SRAM,没有写内存管理malloc 和 free。 只是简单的直接取地址了。后面争取加上。。
|
|