2. DMA基础概念:DMA控制器工作原理、源地址与目的地址、传输宽度与突发传输、DMA请求与响应
2.1 DMA控制器工作原理
DMA(Direct Memory Access,直接存储器访问)是一种允许外设与存储器之间直接交换数据的技术,无需CPU逐字节干预。在单片机驱动LCD TFT屏的场景中,DMA是提升帧率、降低CPU负载的核心手段。
DMA控制器的工作原理可概括为:“CPU配置,DMA执行,总线仲裁,中断通知”。CPU只需初始化DMA通道(设置源地址、目的地址、传输长度等),随后DMA控制器接管总线控制权,自动完成数据搬运,传输完成后通过中断或标志位通知CPU。
核心优势: 一次DMA传输可搬运数千字节,CPU仅在配置和完成阶段介入,中间过程完全独立运行,传输效率比CPU逐字节搬运提升10~50倍。
2.2 源地址与目的地址
DMA传输的核心是“从哪来,到哪去”。源地址与目的地址决定了数据流动的方向和路径。在LCD TFT驱动中,常见的地址配置如下:
| 地址类型 | 典型配置 | LCD驱动场景示例 |
|---|---|---|
| 源地址 | 存储器地址(SRAM/Flash) | 帧缓冲区基地址(如 0x2000_0000) |
| 目的地址 | 外设数据寄存器地址 | LCD控制器数据寄存器(如 0x6000_0000) |
| 地址递增模式 | 递增/固定 | 源地址递增(连续读取像素),目的地址固定(写入同一寄存器) |
| 地址对齐要求 | 按传输宽度对齐 | 32位传输时地址需4字节对齐 |
优化要点: 在LCD驱动中,源地址通常设置为递增模式(从帧缓冲区顺序读取像素数据),目的地址设置为固定模式(指向LCD控制器的数据寄存器)。这种“源递增+目的固定”的组合是DMA驱动LCD的标准配置。
2.3 传输宽度与突发传输
传输宽度指DMA每次总线访问搬运的数据位数,常见配置为8位、16位、32位。传输宽度必须与源/目的设备的数据总线宽度匹配。
突发传输(Burst Transfer)是DMA在一次总线仲裁中获得连续多次传输的能力,无需每次传输都重新请求总线。突发传输可大幅减少总线仲裁开销,提升有效带宽。
| 参数 | 说明 | LCD驱动推荐值 |
|---|---|---|
| 传输宽度 | 单次总线访问的数据位数 | 16位(RGB565)或32位(RGB888) |
| 突发长度 | 一次突发中连续传输的次数 | 4、8、16(取决于LCD控制器FIFO深度) |
| 突发大小 | 突发长度 × 传输宽度 | 64字节(16位×4次)或128字节(32位×4次) |
| 总线利用率 | 有效数据时间 / 总线占用总时间 | 突发传输可达80%~95%,非突发仅30%~50% |
2.4 DMA请求与响应
DMA传输的启动依赖于DMA请求信号。外设(如LCD控制器、定时器、ADC)在需要数据传输时,向DMA控制器发送请求信号,DMA控制器响应后执行传输。
DMA请求与响应的典型流程如下:
- 外设就绪: LCD控制器FIFO非满(可写入数据)时,硬件自动置位DMA请求信号。
- DMA控制器仲裁: 多个DMA通道同时请求时,按优先级仲裁。
- 总线访问: DMA控制器获得总线控制权,执行一次或突发传输。
- 请求撤销: 传输完成后,DMA请求信号自动撤销。
- 循环或单次: 循环模式下,请求持续产生直至传输计数归零。
常见问题: 若LCD控制器的DMA请求信号未正确配置(如极性错误、电平触发与边沿触发混淆),会导致DMA无法启动或传输数据错位。务必查阅LCD控制器数据手册中的DMA接口时序要求。
2.5 DMA关键参数速查表
| 参数 | 描述 | LCD驱动典型值 | 性能影响 |
|---|---|---|---|
| 传输宽度 | 单次总线访问位数 | 16位 / 32位 | 宽度越大,单次吞吐越高 |
| 突发长度 | 连续传输次数 | 4 / 8 | 突发越大,总线利用率越高 |
| 地址递增模式 | 源/目的地址是否递增 | 源递增,目的固定 | 匹配LCD寄存器写入方式 |
| 循环模式 | 传输完成后是否自动重载 | 单次模式(帧传输) | 循环模式适合持续刷新 |
| 优先级 | 多通道DMA的优先级 | 高优先级(LCD实时性要求高) | 避免LCD传输被低优先级DMA打断 |
总结: DMA控制器通过源地址与目的地址定义数据流向,传输宽度与突发传输决定单次搬运效率,DMA请求与响应机制实现外设与DMA的协同工作。在LCD TFT驱动中,合理配置这些参数是发挥DMA性能的关键。