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,
猜测是不是全志隐藏的复位或者重新开启的寄存器 ,
离线