您尚未登录。

#1 全志 SOC » T113S3 DMA通道异常怎么恢复 » 2025-06-13 15:21:21

wwwlll
回复: 0

1.在应用中禁用了DMA,然后通过手动写寄存器的方式调用DMA进行收发数据,发现跑一段时间后,DMA通道异常了
配置map如下
       desc_addr = 0x464454A0
      addr |     config |        src |        dst | cnt |        arg |       next |
0x464454A0 | 0x05000500 | 0x46445808 | 0x02501408 |   4 | 0x000000FF | 0x464454C0
0x464454C0 | 0x01130001 | 0x464458A0 | 0x02501400 |   8 | 0x000000FF | 0x464454E0
0x464454E0 | 0x00010113 | 0x02501400 | 0x46445AB0 |   1 | 0x000000FF | 0xFFFFF800

对通道的操作顺序就是
写 DMA_CH_EN=1,DMA_CH_PAUSE=1,暂停
写 DMA_CH_DESC_ADDR = 0x464454A0 ,
写DMA_CH_PAUSE=0,启用,
正常情况下,DMA开启后,这个寄存器写入的值是0x05000500 ,在其他通道验证没问题,

但是在这个通道里跑一段时间异常后,同样的方式操作
读出来寄存器如下
           DMA_IRQ_EN0(0x000):0x00000000, 0000-0000 0000-0000 | 0000-0000 0000-0000
           DMA_IRQ_EN1(0x004):0x00000000, 0000-0000 0000-0000 | 0000-0000 0000-0000
       DMA_IRQ_PEND0(0x010):0x00000000, 0000-0000 0000-0000 | 0000-0000 0000-0000
       DMA_IRQ_PEND1(0x014):0x30700000, 0000-0000 0000-0000 | 0000-0000 0000-0000
       DMA_AUTO_GATE(0x028):0x00000000, 0000-0000 0000-0000 | 0000-0000 0000-0000
            DMA_STATUS(0x030):0x0000C000, 0000-0000 0000-0000 | 1100-0000 0000-0000
DMA CH14:
               DMA_CH_EN(0x100):0x00000001, 0000-0000 0000-0000 | 0000-0000 0000-0001
         DMA_CH_PAUSE(0x104):0x00000000, 0000-0000 0000-0000 | 0000-0000 0000-0000
DMA_CH_DESC_ADDR(0x108):0x464454A0, 0100-0110 0100-0100 | 0101-0100 1010-0000
           DMA_CH_CFG(0x10C):0xFFFFFFFF, 1111-1111 1111-1111 | 1111-1111 1111-1111
          DMA_CH_SRC(0x110):0x46444C18, 0100-0110 0100-0100 | 0100-1100 0001-1000
         DMA_CH_DEST(0x114):0x020000A0, 0000-0010 0000-0000 | 0000-0000 1010-0000
         DMA_CH_LEFT(0x118):0x01FFFFFF, 0000-0001 1111-1111 | 1111-1111 1111-1111
         DMA_CH_PARA(0x11C):0x0000FFFF, 0000-0000 0000-0000 | 1111-1111 1111-1111
         DMA_CH_MODE(0x128):0x00000000, 0000-0000 0000-0000 | 0000-0000 0000-0000
        DMA_CH_FDESC(0x12C):0xFFFFF800, 1111-1111 1111-1111 | 1111-1000 0000-0000
      DMA_CH_PKG_NUM(0x130):0x00000000, 0000-0000 0000-0000 | 0000-0000 0000-0000

问题出在 DMA_CH_CFG 这个寄存器,在这个DMA通道,不能自动把我的配置载入进去,读出来数据是全F,
猜测是不是全志隐藏的复位或者重新开启的寄存器 ,

#2 Re: 全志 SOC » 如何让awboot支持T113-i » 2024-09-20 15:16:36

它们的dram初始化参数不一样,之前测试的时候好像是改一下sunxi_dram_init里的参数就好了,
具体可以试试

.dram_tpr11          = 0x00770000,
.dram_tpr12          = 0x00000002,
.dram_tpr13          = 0x34050100,

#3 Re: 全志 SOC » d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用? » 2024-01-19 17:52:50

@Gentlepig
内核不动,直接修改qlinuxfbscreen.cpp和传递rotation感觉都是一样的,都是在这个文件的底层绘制函数上进行变换,所以非常占cpu

#4 Re: 全志 SOC » d1s/t113s如何旋转屏幕?尝试了g2d,但是需要手动调用接口,但是qt如何调用? » 2024-01-19 10:58:04

刚好前段时间踩坑了
1.QGraphicsScene旋转
需要应用全部修改支持
2.通过QT_QPA_PLATFORM旋转:
export QT_QPA_PLATFORM=$QT_QPA_PLATFORM:tty=/dev/console:rotation=90
注意是rotation
这个方式非常占cpu
3.修改qt fb的底层绘制函数
通过链接修改配置使能G2D
然后给QRegion QLinuxFbScreen::doRedraw()函数返回时添加刷新代码就够了
    fb_var_screeninfo vinfo;
    ioctl(mFbFd, FBIOGET_VSCREENINFO, &vinfo);
    ioctl(mFbFd, FBIOPAN_DISPLAY, &vinfo);
路径在/sdk/platform/framework/qt/qt-everywhere-src-5.12.5/qtbase/src/plugins/platforms/linuxfb/qlinuxfbscreen.cpp
有可能还需要其他修改,但是这是主要的
这个方式也解决了画面撕裂的问题
4.触摸旋转
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=$QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS:rotate=270
这个是rotate

#5 Re: 全志 SOC » t113 drm » 2023-12-15 15:52:33

我也有块创龙的t113的板子,也在瞅drm,,,这画面撕裂的,

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn