首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rp2040 DMA通道挂起,裸金属

rp2040 DMA通道挂起,裸金属
EN

Stack Overflow用户
提问于 2022-11-07 20:24:55
回答 1查看 42关注 0票数 -1

我试图触发DMA通道来执行SRAM中的内存到内存的传输.通道抛出繁忙的标志,但是传输计数没有改变。

我有以下代码:

代码语言:javascript
复制
    ;reset dma
    ldr r0, *resets_clr ;clear reset
    mov r1, 4
    str r1, (r0, 0)
    
    ldr r0, *resets_rw ;confirm reset clear
*rst_dma
    ldr r2, (r0, 2)
    and r2, r1
    beq *rst_dma
    
    ;start dma channel
    ldr r0, *dma_rw
    adr r1, *var
    str r1, (r0, 0) ;read addr
    
    ldr r1, *sram_addr
    str r1, (r0, 1) ;write addr
    
    mov r1, 8
    str r1, (r0, 2) ;trans count
    
    mov r1, 47 ;incr_write | size_word | high_priority | en
    str r1, (r0, 3) ;ctrl trig
    
    ;wait for transfer marked complete
    mov r2, 1
    lsl r2, r2, 24
*busy_dma
    ldr r1, (r0, 3)
    and r1, r2
    bne *busy_dma
    
    ;test
    ldr r0, *sram_addr
    ldr r1, (r0, 0)
    mov lr, pc
    cmp r1, 7
    beq  *led_on

具有下列字大小的值:

代码语言:javascript
复制
resets_rw 0x4000c000

resets_clr 0x4000f000

var 7

dma_rw 0x50000000

sram_addr 0x20001000

芯片挂在rst_dma循环中,等待通道丢弃其繁忙标志。如果在没有循环的情况下运行,内存测试将失败。通道没有抛出AHB错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-07 20:24:55

我已经把问题打出来了,所以最好还是回答吧。

所述信道控制寄存器具有用于选择传输请求信号(TREQ_SEL)的字段,该字段将所述传输请求信号( DREQ_PIO0_TX0 )重置为第一数据请求信道(DREQ_PIO0_TX0)。如果您没有将DMA与外围设备一起使用,并且不关心传输速度的时间安排,则应该将字段设置为0x3f以进行无节奏的传输。

代码语言:javascript
复制
    mov r1, 63 ;treq_sel unpaced transfer
    lsl r1, r1, 15
    add r1, 47 ;inc_write | size_word | en
    str r1, (r0, 3) ;ctrl trig

没有这个,DMA就会坐在那里,等待一个不存在的信号。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74352534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档