找回密码
 立即注册
查看: 85|回复: 7

STC初始化带FIFo的Mt9V034初始化序列问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-03-08 20:43:15
已绑定手机

4

主题

8

回帖

44

积分

新手上路

积分
44
发表于 2026-3-8 20:43:15 | 显示全部楼层 |阅读模式
<p>目前已经成功初始化DMA,ST7789控制的LCD屏幕,以及摄像头的IIc与串口等,可图像输出的数据任然是乱码,手指摁上去后图像会明显变灰,想请教一下站内的大佬问题出在哪里,如何能获得图像</p>
<p>用的是猪肺的总钻风V2.1,烧入猪肺的例程可以使用但异常卡顿,所以就自己从头开始写</p>
<video controls="controls" src="forum.php?mod=attachment&aid=133257"></video>
<p>压缩包内是全部的代码

template.7z

175.73 KB, 下载次数: 1

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-03-08 20:43:15
已绑定手机

4

主题

8

回帖

44

积分

新手上路

积分
44
发表于 2026-3-8 20:45:44 | 显示全部楼层
调试的相关视频

a35687727d04b4a6e241e3b3222b4767.mp4

2.6 MB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-03-08 20:43:15
已绑定手机

4

主题

8

回帖

44

积分

新手上路

积分
44
发表于 2026-3-8 20:56:23 | 显示全部楼层
void start_get_image(void)
{
    // ============== 第一阶段:捕获一帧 ==============
    P_mtv_WEN = 1;         // 先关闭写使能

    while(P_mtv_VSY == 1); // 等待 VSYNC 变低(进入消隐区)
   
    P_mtv_WRST = 0;        
    Delay10us();
    P_mtv_WRST = 1;        // 复位 FIFO 写指针
   
    while(P_mtv_VSY == 0); // 等待 VSYNC 变高(新的一帧开始)
    P_mtv_WEN = 0;         // 立刻拉低 WEN,允许存数据
   
    while(P_mtv_VSY == 1); // 等待新的一帧结束
    P_mtv_WEN = 1;         // 立刻拉高 WEN,锁定数据

    // ============== 第二阶段:准备读取 ==============
    Delay10us();
    P_mtv_OE = 0;          // 使能 FIFO 输出到 P2 口
    Delay10us();

    P_mtv_RRST = 0;
    P_mtv_RCK = 0; Delay10us();
    P_mtv_RCK = 1; Delay10us(); // 第一个脉冲
    P_mtv_RCK = 0; Delay10us();
    P_mtv_RRST = 1; Delay10us();
    P_mtv_RCK = 1; Delay10us();

    // 【关键修复】手动读丢第一个无效的假字节 (Dummy Byte)
    P_mtv_RCK = 0; Delay10us();
    P_mtv_RCK = 1; Delay10us();

    // ============== 第三阶段:启动 DMA ==============
    // 【关键修复】强制转换必须是 unsigned long,防止指针高位被截断!
    DMA_LCM_RXAH = (unsigned char)(((unsigned long)(&image_dat)) >> 8);
    DMA_LCM_RXAL = (unsigned char)(((unsigned long)(&image_dat)));
    DMA_LCM_AMTH = (unsigned char)(5640 >> 8);
    DMA_LCM_AMT  = (unsigned char)(5640 & 0xFF);

    lcm_done = 1;
    DMA_LCM_CR = 0x89;
    while(lcm_done);

    // ============== 第四阶段:收尾 ==============
    // 【最致命修复】必须关闭 OE 释放总线,否则 TFT 屏幕必定乱码或黑点!
    P_mtv_OE = 1;
}这是DMA部分的代码
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-03-08 20:43:15
已绑定手机

4

主题

8

回帖

44

积分

新手上路

积分
44
发表于 2026-3-8 20:59:57 | 显示全部楼层

关于MTV初始化的问题

最近在尝试自己初始化MTV,<p>目前已经成功初始化DMA,ST7789控制的LCD屏幕,以及摄像头的IIc与串口等,可图像输出的数据任然是乱码,手指摁上去后图像会明显变灰,想请教一下站内的大佬问题出在哪里,如何能获得图像</p>
<p>用的是猪肺的总钻风V2.1,烧入猪肺的例程可以使用但异常卡顿,所以就自己从头开始写</p>


a35687727d04b4a6e241e3b3222b4767.mp4

2.6 MB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-03-08 20:43:15
已绑定手机

4

主题

8

回帖

44

积分

新手上路

积分
44
发表于 2026-3-8 21:00:55 | 显示全部楼层
以下是我全部的代码,希望有大佬能指点迷津

template.7z

175.73 KB, 下载次数: 1

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-03-08 20:43:15
已绑定手机

4

主题

8

回帖

44

积分

新手上路

积分
44
发表于 2026-3-8 21:01:21 | 显示全部楼层
void start_get_image(void)
{
    // ============== 第一阶段:捕获一帧 ==============
    P_mtv_WEN = 1;         // 先关闭写使能

    while(P_mtv_VSY == 1); // 等待 VSYNC 变低(进入消隐区)
   
    P_mtv_WRST = 0;        
    Delay10us();
    P_mtv_WRST = 1;        // 复位 FIFO 写指针
   
    while(P_mtv_VSY == 0); // 等待 VSYNC 变高(新的一帧开始)
    P_mtv_WEN = 0;         // 立刻拉低 WEN,允许存数据
   
    while(P_mtv_VSY == 1); // 等待新的一帧结束
    P_mtv_WEN = 1;         // 立刻拉高 WEN,锁定数据

    // ============== 第二阶段:准备读取 ==============
    Delay10us();
    P_mtv_OE = 0;          // 使能 FIFO 输出到 P2 口
    Delay10us();

    P_mtv_RRST = 0;
    P_mtv_RCK = 0; Delay10us();
    P_mtv_RCK = 1; Delay10us(); // 第一个脉冲
    P_mtv_RCK = 0; Delay10us();
    P_mtv_RRST = 1; Delay10us();
    P_mtv_RCK = 1; Delay10us();

    // 【关键修复】手动读丢第一个无效的假字节 (Dummy Byte)
    P_mtv_RCK = 0; Delay10us();
    P_mtv_RCK = 1; Delay10us();

    // ============== 第三阶段:启动 DMA ==============
    // 【关键修复】强制转换必须是 unsigned long,防止指针高位被截断!
    DMA_LCM_RXAH = (unsigned char)(((unsigned long)(&image_dat)) >> 8);
    DMA_LCM_RXAL = (unsigned char)(((unsigned long)(&image_dat)));
    DMA_LCM_AMTH = (unsigned char)(5640 >> 8);
    DMA_LCM_AMT  = (unsigned char)(5640 & 0xFF);

    lcm_done = 1;
    DMA_LCM_CR = 0x89;
    while(lcm_done);

    // ============== 第四阶段:收尾 ==============
    // 【最致命修复】必须关闭 OE 释放总线,否则 TFT 屏幕必定乱码或黑点!
    P_mtv_OE = 1;
}
这是我代码的DMA部分
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-03-08 20:43:15
已绑定手机

4

主题

8

回帖

44

积分

新手上路

积分
44
发表于 2026-3-8 21:01:57 | 显示全部楼层
#define MT9V034_ADDR_WRITE 0xB8
#define MT9V034_ADDR_READ  0xB9

#define DEVICE_ADDR 0xB8

#define CHIP_ID_ADDR 0x00
#define CHIP_ID_VALUE 0x1324

#define ROW_START_ADDR 0x01
#define ROW_START_VALUE 0x01

#define COL_START_ADDR 0x02
#define COL_START_VALUE 0x04

#define WINDOWS_HEIGHT_ADDR 0x03
#define WINDOWS_HEIGHT_VALUE 120

#define WINDOW_WIDTH_ADDR 0x04
#define WINDOW_WIDTH_VALUE 188

#define HORIZONTAL_BLANKING_ADDR 0x05
#define HORIZONTAL_BLANKING_VALUE 91

#define CHIP_CONTROL_ADDR 0x07
#define CHIP_CONTROL_VALUE 0x188

#define COARSE_SHUTTER_WIDTH_1_ADDR 0x08
#define COARSE_SHUTTER_WIDTH_1_VALUE 0x1BB
#define COARSE_SHUTTER_WIDTH_2_ADDR 0x09
#define COARSE_SHUTTER_WIDTH_2_VALUE 0x1D9
#define COARSE_SHUTTER_WIDTH_3_ADDR 0x0A
#define COARSE_SHUTTER_WIDTH_3_VALUE 0x164
#define COARSE_SHUTTER_WIDTH_TOTAL_ADDR 0x0B
#define COARSE_SHUTTER_WIDTH_TOTAL_VALUE 480 // Related to exposure time

#define VERTICAL_BLANKING_ADDR 0x06
// Value = COARSE_SHUTTER_WIDTH_TOTAL_VALUE-COARSE_SHUTTER_WIDTH_1_ADDR+7

#define READ_MODE_ADDR 0x0D
#define READ_MODE_VALUE 0x3A // 4*4 binning mode & flip row and column

#define SENSOR_TYPE_CONTROL_ADDR 0x0F
#define SENSOR_TYPE_CONTROL_VALUE 0x00 // Linear opeartion & mono sensor

#define ADC_COMPANDING_MODE_ADDR 0x1C
#define ADC_COMPANDING_MODE_VALUE 0x202

#define AEC_AGC_DESIRED_BIN_ADDR 0xA5
#define AEC_AGC_DESIRED_BIN_VALUE 0x3A

#define AEC_LOW_PASS_FILTER_ADDR 0xA8
#define AEC_LOW_PASS_FILTER_VALUE 0x01

#define AGC_LOW_PASS_FILTER_ADDR 0xAA
#define AGC_LOW_PASS_FILTER_VALUE 0x02

#define AGC_AEC_BIN_DIFFERENCE_THRESHOLD_ADDR 0xAE
#define AGC_AEC_BIN_DIFFERENCE_THRESHOLD_VALUE 0x0A

#define AGC_AEC_ENABLE_ADDR 0xAF
#define AGC_AEC_ENABLE_VALUE 0x02 // Enable AGC & disable AEC

这是我MTV初始化的寄存器
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:495
  • 最近打卡:2026-04-04 15:14:23
已绑定手机

104

主题

4237

回帖

9415

积分

荣誉版主

无情的代码机器

积分
9415
发表于 2026-3-9 09:21:01 | 显示全部楼层
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-4 16:07 , Processed in 0.112378 second(s), 74 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表