1、简介 i.MX RT 跨界嵌入式处理器系列采用了恩智浦对 Cortex-M7 内核的高级实现。该处理器家族有一些发展,到目前为止,它从低端部分到高端部分衍生了几个 部分。摄像头接口等高级功能通常仅集成在高端部件中。高端部件(例如i.MX RT117x)具有并行和 MIPI CSI 接口。中端部件(例如 i.MX RT105x 和RT106x)仅具有并行摄像头接口。低端部件(例如 i.MX RT101x 和 RT102x)没有专用的摄 像头接口。但是,有些应用需要具有低性能和低成本要求的摄像头接口。在这种情况下,FlexIO模块是满足此要求的最佳选择。FlexIO 是来自恩智浦的高度可配置的 IP 外设,可以用来模拟 CSI,I2C,SPI,PWM 等外设。
2、FlexIO 概述 FlexIO是高度可配置的, 它允许您实现各种功能,包括:
3、FlexIO摄像头接口的操作原理 您可以将 FlexIO 配置为以不同的方式模拟并行摄像头接口,例如使用不同的数据总线宽度,串联的移位器数量以及所使用的特定 移位器,引脚和计时器。 多拍子传输用于支持较大的传输大小。 在此,拍子是指变速操作。 一个传输序列需要计时器生成多个移位时钟。 每一个传输序 列的节拍数与串联的移位器数和总线宽度有关。 一个移位器具有 32 位。 一个移位器支持 8 位总线的一次 4 节拍传输。 两个移位器 可支持 8 拍,依此类推。 在此应用中,全部使用了 8 个移位器。 因此,对于 8 位总线,支持 32 个节拍。 下 图显示了 FlexIO 资源的并行摄像头接口组织。 在组织中,所有 8 个移位器都连接在一起。 TIMER0 用于控制变速杆的变速。 TIMER1 用于生成 XCLK(此应用中为 24MHz)。 D0-D7,HREF 和XCLK 基于 FlexIO 引脚。 另一个 GPIO 引脚用于接收 VSYNC 信号。 SHIFTER0 状态标志用于触发DMA请求。 转移过程如下:
这是捕获一帧的过程。 仅要求CPU在VSYNC ISR中重新定向DMA目标地址。 捕获帧的所有其他操作由FlexIO和eDMA完成。 在 VSYNC ISR中也设置了显示DMA源地址配置。
4、用于并行摄像机接口的FlexIO配置 摄像头接口的FlexIO配置主要包括移位器和计时器配置。 以下代码是从API 驱动程序 fsl_flexio_camera.c \ FLEXIO_CAMERA_Init() 中剪切下来的,实现了 shifter 配置。 ![]() 以下代码是从 API 驱动程序 fsl_flexio_camera.c \ FLEXIO_CAMERA_Init() 中剪切下来的,实现了移位计时器的配置。 5、FlexRAM配置 使用 FlexRAM 功能,可以将 RT1010 的 128 KB 内部 RAM 配置为ITCM,DTCM 或 OCRAM。 默认情况下,128 KB RAM 分为 32KB ITCM,32 KB DTCM 和 64 KB OCRAM。 另一方面,此应用程序中的一个完整帧占用 160 x 120 x 2 = 38.4 KB。 可以将一帧缓冲区放入 OCRAM。 但是,如果通过乒乓 缓冲方式使用两个帧缓冲区,则默认的 RAM 分配将不适用。 以下代码是从 startup_MIMXRT1011.s 剪切而来的,它说明了如何 为应用程序重新分配 RAM。 之所以在启动程序集文件中实现此配置,是为了确保在重新分配之前不执行任何堆叠操作。 堆栈地址可以在重新分配期间进行更新。 128 KB RAM分为32 KB ITCM和96 KB OCRAM。 此外,必须更新链接描述文件以匹配新的RAM空间。 下面的代码显示了IAR 链接程序脚本文件的更新部分。 定义了一个名为 DATA2_region 的区域来表示 96 KB OCRAM。 块RW,ZI,HEAP,NCACHE_VAR和CSTACK 都放置在该区域中。 帧缓冲区是在 NCACHE_VAR 块中定义的,其中的以下代码从 flexion_ov7670.c 中裁剪而来。 6、结论 本应用笔记介绍了如何使用 FlexIO 仿真 i.MX RT1010 处理器的并行摄像头接口。 该演示应用程序使用 OV7670 摄像机模块,该模块配置为输出QQVGA 帧。 帧速率最高为 30fps。 通过此示例,您可以在应用程序中使用低成本 RT1010 处理器以及备用并行摄像头接口。
7、参考资料 i.MX RT1010参考手册(文档 IMXRT1010RM) 将FlexIO用于并行摄像机接口(文档 AN5275) |