1. ARM DMAC寄存器架构解析
在嵌入式系统开发中,直接内存访问(DMA)技术对于高性能数据传输至关重要。ARM架构中的DMA控制器(DMAC)通过一组精心设计的寄存器提供了灵活的传输控制机制。以PL330 DMAC为例,其寄存器模型可分为三大类:
1.1 全局控制寄存器组
全局寄存器负责管理DMAC的整体运行状态,主要包括:
- DMA Manager Status Register (DSR):32位寄存器,其中关键位域包括:
- [9] DNS位:指示DMA管理器线程的安全状态(0=安全态,1=非安全态)
- [8:4] Wakeup_event:记录DMAWFE指令等待的事件编号(0b00000对应event[0])
- [3:0] DMA status:反映管理器线程的当前状态(0b0000=停止,0b0001=执行中等)
关键技巧:在安全敏感系统中,务必通过boot_manager_ns信号正确初始化DNS位,否则可能导致安全状态异常。
- DMA Program Counter Register (DPC):完整记录DMA管理器线程的PC值,在调试时特别有用。例如当出现指令预取错误时,可通过读取DPC定位故障点。
1.2 通道专用寄存器组
每个DMA通道都有独立的一组寄存器实现细粒度控制:
1.2.1 地址与传输控制
- SARn/DARn寄存器:分别存储源地址和目的地址,支持自动增量模式。例如配置CCRn[0]=1时,执行DMALD后SARn会自动增加传输数据量大小的偏移。
- CCRn寄存器:控制AXI总线传输参数,包含以下关键配置:
c复制// 典型CCRn配置示例(字节传输模式) #define CCR_CONFIG (0 << 31) // reserved | (0x0 << 28) // endian_swap_size=不交换 | (0x7 << 25) // dst_cache_ctrl=可缓存 | (0x6 << 22) // dst_prot_ctrl=非特权安全访问
