ackyee 发表于 2022-12-10 13:42:51

请教 VDMA三帧缓存, PS端直接对DDR地址写图,只有第一帧被显示

本帖最后由 ackyee 于 2022-12-10 13:47 编辑

如题,不论PS 端 对 2 和3帧所在地址如何进行修改, 图像永远都显示第一个 缓存区的图片,有点纳闷

PS端可以让图像跳下一帧的吗?

初始化的时候也 设置了三帧缓存了
                Xil_Out32((VDMA_BASEADDR + 0x030), 0x108B);// enable circular mode使能循环模式
                Xil_Out32((VDMA_BASEADDR + 0x0AC), VIDEO_BASEADDR1);        // start address
                Xil_Out32((VDMA_BASEADDR + 0x0B0), VIDEO_BASEADDR0);        // start address
                Xil_Out32((VDMA_BASEADDR + 0x0B4), VIDEO_BASEADDR2);        // start address

                Xil_Out32((VDMA_BASEADDR + 0x0A8), (H_STRIDE*3));                // h offset (H_STRIDE* 3) bytes
                Xil_Out32((VDMA_BASEADDR + 0x0A4), (H_ACTIVE*3));                // h size (H_ACTIVE * 3) bytes
                Xil_Out32((VDMA_BASEADDR + 0x0A0), V_ACTIVE);                        // v size (V_ACTIVE)
                        /*****************从DDR读数据设置(MM2S)**********************/
                Xil_Out32((VDMA_BASEADDR + 0x000), 0x8B);                 // enable circular mode
                Xil_Out32((VDMA_BASEADDR + 0x05c), VIDEO_BASEADDR1);         // start address
                Xil_Out32((VDMA_BASEADDR + 0x060), VIDEO_BASEADDR0);         // start address
                Xil_Out32((VDMA_BASEADDR + 0x064), VIDEO_BASEADDR2);         // start address
                Xil_Out32((VDMA_BASEADDR + 0x058), (H_STRIDE*3));                 // h offset (H_STRIDE * 3) bytes
                Xil_Out32((VDMA_BASEADDR + 0x054), (H_ACTIVE*3));                 // h size (H_ACTIVE * 3) bytes
                Xil_Out32((VDMA_BASEADDR + 0x050),V_ACTIVE);                         // v size (V_ACTIVE)

wye11083 发表于 2022-12-10 13:53:08

你vdma要配置成3个buf,然后在中断里指向其它buf才行。它不会自动切换。

ackyee 发表于 2022-12-10 14:00:15

wye11083 发表于 2022-12-10 13:53
你vdma要配置成3个buf,然后在中断里指向其它buf才行。它不会自动切换。
(引用自2楼)

如果是 PL端直接读写的话就不需要 切换buf了对吧, VDMA 我已经配置成3个buf了

我刚百度了好久 都没找到指向buf 的命令,我再找找看。   我这种PS图像刷完直接切换的应该不需要 额外中断了,直接刷完 切换就好,60hz情况下屏幕的撕裂应该还好

wye11083 发表于 2022-12-10 14:03:23

ackyee 发表于 2022-12-10 14:00
如果是 PL端直接读写的话就不需要 切换buf了对吧, VDMA 我已经配置成3个buf了

我刚百度了好久 都没 ...
(引用自3楼)

必须要帧结束中断里切buf。vdma不支持自动增加,或者你找找有没有配置。另外注意vdma的帧序号好像是gray coding,不是0,1,2,0,1,2这种。

ackyee 发表于 2022-12-10 14:14:48

wye11083 发表于 2022-12-10 14:03
必须要帧结束中断里切buf。vdma不支持自动增加,或者你找找有没有配置。另外注意vdma的帧序号好像是gray...
(引用自4楼)

我刚刚查到你说的那种切换顺序 可以在VDMA 模块的 slave 那个选项里修改。   VDMA 的中断我查查怎么触发, 我好像 BLOCKDESIGN 里没有连接VDMA中断

wye11083 发表于 2022-12-10 14:27:03

ackyee 发表于 2022-12-10 14:14
我刚刚查到你说的那种切换顺序 可以在VDMA 模块的 slave 那个选项里修改。   VDMA 的中断我查查怎么触发 ...
(引用自5楼)

输出还好。输入得手搓bd配置把status搞出来。。

ackyee 发表于 2022-12-10 16:46:22

本帖最后由 ackyee 于 2022-12-10 16:49 编辑

wye11083 发表于 2022-12-10 14:27
输出还好。输入得手搓bd配置把status搞出来。。
(引用自6楼)

还有一个问题PS端朝DDR缓存区 写完整的 1080P 图片 需要3秒钟才能完成,这个速度正常吗用的for 循环

wye11083 发表于 2022-12-10 18:02:38

ackyee 发表于 2022-12-10 16:46
还有一个问题PS端朝DDR缓存区 写完整的 1080P 图片 需要3秒钟才能完成,这个速度正常吗用的for 循环 ...
(引用自7楼)

你用o2编译。。。
页: [1]
查看完整版本: 请教 VDMA三帧缓存, PS端直接对DDR地址写图,只有第一帧被显示