Files
tc264smart/libraries/zf_device/zf_device_mt9v03x_double.h
T
32343 843447835d Initial commit: TC264 smart car project with IPS200 menu system
- IPS200 display menu with real-time status and parameter settings
- Camera image processing and line tracking
- IMU attitude solution and PID control
- WiFi SPI oscilloscope data transmission
2026-05-10 21:38:49 +08:00

186 lines
17 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*********************************************************************************************************************
* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
*
* 本文件是 TC264 开源库的一部分
*
* TC264 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅<https://www.gnu.org/licenses/>
*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
* 文件名称 zf_device_mt9v03x_double
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
* 开发环境 ADS v1.10.2
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
* 日期 作者 备注
* 2025-07-09 pudding first version
********************************************************************************************************************/
#ifndef _zf_device_mt9v03x_double_h_
#define _zf_device_mt9v03x_double_h_
#include "zf_common_typedef.h"
#include "zf_device_type.h"
//================================================定义 MT9V03X 双摄像头 基本配置================================================
#define MT9V03X_1_COF_IIC_DELAY (800) // 总钻风摄像头1 IIC 延时
#define MT9V03X_1_COF_IIC_SCL (P33_13) // 总钻风摄像头1 IIC-SCL 引脚
#define MT9V03X_1_COF_IIC_SDA (P32_4) // 总钻风摄像头1 IIC-SDA 引脚
#define MT9V03X_1_DMA_CH (IfxDma_ChannelId_7)
#define MT9V03X_1_PCLK_PIN (ERU_CH1_REQ10_P14_3) // 总钻风摄像头1 PCLK 触发信号 TIM_ETR 引脚禁止随意修改
#define MT9V03X_1_VSYNC_PIN (ERU_CH4_REQ8_P33_7) // 总钻风摄像头1 场中断引脚
#define MT9V03X_1_DATA_PIN (P00_0) // 总钻风摄像头1 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 P00_0-P00_7
#define MT9V03X_1_DATA_ADD (get_port_in_addr(MT9V03X_1_DATA_PIN))
#define MT9V03X_1_INIT_TIMEOUT (0x0080) // 总钻风摄像头1 默认的摄像头初始化超时时间 毫秒为单位
#define MT9V03X_2_COF_IIC_DELAY (800) // 总钻风摄像头2 IIC 延时
#define MT9V03X_2_COF_IIC_SCL (P13_1) // 总钻风摄像头2 IIC-SCL 引脚
#define MT9V03X_2_COF_IIC_SDA (P13_0) // 总钻风摄像头2 IIC-SDA 引脚
#define MT9V03X_2_DMA_CH (IfxDma_ChannelId_6)
#define MT9V03X_2_PCLK_PIN (ERU_CH2_REQ2_P10_2) // 总钻风摄像头2 PCLK 触发信号 TIM_ETR 引脚禁止随意修改
#define MT9V03X_2_VSYNC_PIN (ERU_CH3_REQ3_P10_3) // 总钻风摄像头2 场中断引脚
#define MT9V03X_2_DATA_PIN (P02_0) // 总钻风摄像头2 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 P00_0-P00_7
#define MT9V03X_2_DATA_ADD (get_port_in_addr(MT9V03X_2_DATA_PIN))
#define MT9V03X_2_INIT_TIMEOUT (0x0080) // 总钻风摄像头2 默认的摄像头初始化超时时间 毫秒为单位
#define MT9V03X_INIT_INTV_DELAY (0) //摄像头初始化间隔延时,调节这个延时可增加高帧率运行时长。范围0-3(单位MS)
//================================================定义 MT9V03X 双摄像头 基本配置================================================
//================================================定义 MT9V03X 双摄像头 参数配置================================================
#define MT9V03X_1_W (140) // 总钻风摄像头1 图像宽度 范围 [1-752]
#define MT9V03X_1_H (80) // 总钻风摄像头1 图像高度 范围 [1-480]
#define MT9V03X_1_IMAGE_SIZE (MT9V03X_1_W * MT9V03X_1_H) // 总钻风摄像头1 整体图像大小不能超过 65535
#define MT9V03X_1_AUTO_EXP_DEF ( 0 ) // 总钻风摄像头1 自动曝光设置 默认不开启自动曝光设置 范围 [0-63] 0为关闭
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X_1_EXP_TIME_DEF ( 250 ) // 总钻风摄像头1 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
#define MT9V03X_1_FPS_DEF ( 50 ) // 总钻风摄像头1 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
#define MT9V03X_1_LR_OFFSET_DEF ( 0 ) // 总钻风摄像头1 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 总钻风摄像头1 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X_1_UD_OFFSET_DEF ( 0 ) // 总钻风摄像头1 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X_1_GAIN_DEF ( 15 ) // 总钻风摄像头1 图像增益 范围 [16-64] 增益可以在曝光时间固定的情况下改变图像亮暗程度
#define MT9V03X_1_PCLK_MODE_DEF ( 0 ) // 总钻风摄像头1 像素时钟模式 范围 [0-1] 默认:0 可选参数为:[0:不输出消隐信号,1:输出消隐信号]
// 通常都设置为0,如果使用CH32V307的DVP接口或STM32的DCMI接口采集需要设置为1
// 仅总钻风 MT9V034 V1.5 以及以上版本支持该命令
#define MT9V03X_2_W (140) // 总钻风摄像头2 图像宽度 范围 [1-752]
#define MT9V03X_2_H (80) // 总钻风摄像头2 图像高度 范围 [1-480]
#define MT9V03X_2_IMAGE_SIZE (MT9V03X_2_W * MT9V03X_2_H) // 总钻风摄像头2 整体图像大小不能超过 65535
#define MT9V03X_2_AUTO_EXP_DEF ( 0 ) // 总钻风摄像头2 自动曝光设置 默认不开启自动曝光设置 范围 [0-63] 0为关闭
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性 光,增加图像稳定性
#define MT9V03X_2_EXP_TIME_DEF ( 512 ) // 总钻风摄像头2 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
#define MT9V03X_2_FPS_DEF ( 50 ) // 总钻风摄像头2 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
#define MT9V03X_2_LR_OFFSET_DEF ( 0 ) // 总钻风摄像头2 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 总钻风摄像头2 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X_2_UD_OFFSET_DEF ( 0 ) // 总钻风摄像头2 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X_2_GAIN_DEF ( 32 ) // 总钻风摄像头2 图像增益 范围 [16-64] 增益可以在曝光时间固定的情况下改变图像亮暗程度
#define MT9V03X_2_PCLK_MODE_DEF ( 0 ) // 总钻风摄像头2 像素时钟模式 范围 [0-1] 默认:0 可选参数为:[0:不输出消隐信号,1:输出消隐信号]
// 通常都设置为0,如果使用CH32V307的DVP接口或STM32的DCMI接口采集需要设置为1
// 仅总钻风 MT9V034 V1.5 以及以上版本支持该命令
//================================================定义 MT9V03X 双摄像头 参数配置================================================
//================================================定义 MT9V03X 双摄像头 参数结构体===============================================
typedef enum
{
MT9V03X_DOUBLE_INIT = 0, // 摄像头初始化命令
MT9V03X_DOUBLE_AUTO_EXP, // 自动曝光命令
MT9V03X_DOUBLE_EXP_TIME, // 曝光时间命令
MT9V03X_DOUBLE_FPS, // 摄像头帧率命令
MT9V03X_DOUBLE_SET_COL, // 图像列命令
MT9V03X_DOUBLE_SET_ROW, // 图像行命令
MT9V03X_DOUBLE_LR_OFFSET, // 图像左右偏移命令
MT9V03X_DOUBLE_UD_OFFSET, // 图像上下偏移命令
MT9V03X_DOUBLE_GAIN, // 图像偏移命令
MT9V03X_DOUBLE_PCLK_MODE, // 像素时钟模式命令(仅总钻风MT9V034 V1.5以及以上版本支持该命令)
MT9V03X_DOUBLE_CONFIG_FINISH, // 非命令位,主要用来占位计数
MT9V03X_DOUBLE_COLOR_GET_WHO_AM_I = 0xEF,
MT9V03X_DOUBLE_SET_EXP_TIME = 0XF0, // 单独设置曝光时间命令
MT9V03X_DOUBLE_GET_STATUS, // 获取摄像头配置命令
MT9V03X_DOUBLE_GET_VERSION, // 固件版本号命令
MT9V03X_DOUBLE_SET_ADDR = 0XFE, // 寄存器地址命令
MT9V03X_DOUBLE_SET_DATA // 寄存器数据命令
}m9v03x_double_cmd_enum;
// 摄像头接口类型枚举
typedef enum
{
mt9v03x_1, // 仅初始化摄像头 1 将仅采集摄像头1
mt9v03x_2, // 仅初始化摄像头 2 将仅采集摄像头2
mt9v03x_double, // 双摄同时初始化 稳定模式 DMA 严格交替 采集两个摄像头
// 注意: DMA只有一个 采集时 若两个摄像头同时输出 将无法保持正常帧率采集双摄数据 整体帧率将除以2
// 注意: 由于摄像头个体差异 双摄像头输出将逐渐重合 较长时间工作时 将导致出现上述情况
// 注意: 双摄高帧率运行时可能重合导致实际帧率减半 可通过双摄初始化之间的延时来进行调节
}m9v03x_double_init_type_enum;
//================================================定义 MT9V03X 双摄像头 参数结构体===============================================
//================================================声明 MT9V03X 全局变量================================================
extern vuint8 mt9v03x_finish_flag_1; // 总钻风摄像头1 单幅图像采集完成标志位
extern vuint8 mt9v03x_finish_flag_2; // 总钻风摄像头2 单幅图像采集完成标志位
extern uint8 mt9v03x_image_1[MT9V03X_1_H][MT9V03X_1_W]; // 总钻风摄像头1 图像数据存储数组
extern uint8 mt9v03x_image_2[MT9V03X_2_H][MT9V03X_2_W]; // 总钻风摄像头2 图像数据存储数组
extern uint32 mt9v03x_fps[2]; // 总钻风摄像头实际采集帧率
extern int16 mt9v03x_set_confing_buffer_1[MT9V03X_DOUBLE_CONFIG_FINISH][2];
extern int16 mt9v03x_set_confing_buffer_2[MT9V03X_DOUBLE_CONFIG_FINISH][2];
//================================================声明 MT9V03X 全局变量================================================
//================================================声明 MT9V03X 基础函数================================================
//-------------------该函数仅用于TC系列 V3.0 双摄主板 摄像头初始化----------------------
//-------------------该函数仅用于TC系列 V3.0 双摄主板 摄像头初始化----------------------
//-------------------该函数仅用于TC系列 V3.0 双摄主板 摄像头初始化----------------------
uint8 mt9v03x_double_init(m9v03x_double_init_type_enum init_mode); // MT9V03X 摄像头初始化
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 mt9v03x单独设置曝光时间
// 参数说明 init_type 选择要设置的摄像头
// 参数说明 light 曝光时间,没有单位,数越大图像越亮
// 返回参数 unsigned char 0:配置成功 1:配置失败
// 使用示例 mt9v03x_set_exposure_time_sccb(mt9v03x_1,100);
//-------------------------------------------------------------------------------------------------------------------
uint8 mt9v03x_set_exposure_time_sccb(m9v03x_double_init_type_enum init_type,unsigned short int light);
//================================================声明 MT9V03X 基础函数================================================
#endif