页次: 1
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,
猜测是不是全志隐藏的复位或者重新开启的寄存器 ,
刚好前段时间踩坑了
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
页次: 1