yimengxiaoyao 发表于 2022-6-12 12:35:09

调试摄像头的时候,显示总是闪屏画面跳

请问一下,我在调试摄像头HDMI 显示的时候,显示器上的结果一闪一闪的,这是哪里出的问题呢。摄像头通过bayer 转RGB模块后通过vdma 缓存,交给HDMI 模块显示,我在vdma里面把视频4000x3000裁剪成1080p。显示的时候感觉采集不到同一幅画面一样,一直在跳。。请问一下是VDMA 的问题 还是摄像头的问题呢。

wye11083 发表于 2022-6-12 12:53:22

用vdma的上一帧缓冲区去显示。

yimengxiaoyao 发表于 2022-6-12 17:54:19

wye11083 发表于 2022-6-12 12:53
用vdma的上一帧缓冲区去显示。
(引用自2楼)

这个应该配置哪个寄存器呢,我不管怎么配置寄存器都还是这样跳动,而且我用Xilinx 的TPG 模块能够稳定显示测试图案。用摄像头经过的去马赛克视频就跳。。
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x30, 0x83);
    //S2MM Start Address 1
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xAC, FRAME_BASE);
    //S2MM Start Address 2
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xB0, FRAME_BASE+(4000*3000*3));
    //S2MM Start Address 3
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xB4,FRAME_BASE+(4000*3000*3*2));
    //S2MM Frame delay / Stride register
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA8, 4000*3);
    // S2MM HSIZE register
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA4, 4000*3);
    // S2MM VSIZE register
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0xA0, 3000);

    /* Configure the Read interface (MM2S)*/
    // MM2S Control Register
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x00, 0x03);
    // MM2S Start Address 1
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x5C, FRAME_BASE);
    // MM2S Start Address 2
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x60, FRAME_BASE+(4000*3000*3));
    // MM2S Start Address 3
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x64, FRAME_BASE+(4000*3000*3*2));
    // MM2S Frame delay / Stride register
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x58, 4000*3);
    // MM2S HSIZE register
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x54, 1920*3);
    // MM2S VSIZE register
    Xil_Out32(XPAR_AXI_VDMA_0_BASEADDR + 0x50, 1080);

wye11083 发表于 2022-6-12 18:21:09

本帖最后由 wye11083 于 2022-6-12 18:28 编辑

你改那个bd文件,把那个frame pointer寄存器改出来,xilinx把这个东西给调试信号了。。

然后开vdma完成中断,把那个pointer寄存器抓出来,即每次中断保存下一帧地址。剩下的就是直接读上一帧的内容了。

这块确实比较费劲。主要是那个寄存器默认没有,还只能改bd文件手动添加。

          "c_enable_s2mm_sts_reg": {
            "value": "1"
          },

应该是这个STS寄存器,读pointer的。VDMA内部用的是gray code。

yimengxiaoyao 发表于 2022-6-12 19:17:40

wye11083 发表于 2022-6-12 18:21
你改那个bd文件,把那个frame pointer寄存器改出来,xilinx把这个东西给调试信号了。。

然后开vdma完成中 ...
(引用自4楼)

好的,我试一下,另外我想问一下为什么vdma 显示这个摄像头的时候这么麻烦呢,之前用ov5640 这样驱动就直接能正常显示视频了。。

yimengxiaoyao 发表于 2022-6-12 20:44:11

wye11083 发表于 2022-6-12 18:21
你改那个bd文件,把那个frame pointer寄存器改出来,xilinx把这个东西给调试信号了。。

然后开vdma完成中 ...
(引用自4楼)

还有一个问题就是,我的摄像头也没动,为什么VDMA 三帧存储的数据会差这么多呢..我把视频放慢了看这三帧的画面完全不一样啊。。。帧缓存不是为了防止帧撕裂的么。。

wye11083 发表于 2022-6-12 20:51:15

yimengxiaoyao 发表于 2022-6-12 20:44
还有一个问题就是,我的摄像头也没动,为什么VDMA 三帧存储的数据会差这么多呢..我把视频放慢了看这三帧 ...
(引用自6楼)

那你检查是不是数据溢出了?或者哪个信号没处理好。我没有遇到过图像撕裂有情况。只有ddr不稳时会出错。
页: [1]
查看完整版本: 调试摄像头的时候,显示总是闪屏画面跳