SoC系列(3)下

318 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天!

数据传送方式

  • 程序控制下的数据传送——通过CPU执行程序中的I/O指令来完成传送,又分为:查询传送、中断传送
  • 直接存储器存取(DMA)——传送请求由外设向DMA控制器(DMAC)提出,后者向CPU申请总线,最后DMAC利用系统总线来完成外设和存储器的数据传送

查询传送的两个环节

(1) 查询环节

  • 寻址状态口
  • 读取状态寄存器的标志位
  • 若不就绪就继续查询,直至就绪 (2) 传送环节
  • 寻址数据口
  • 是输入,通过输入指令从数据端口读入数据
  • 是输出,通过输出指令向数据端口输出数据

中断传送方式

CPU在执行程序中,被内部或外部的事件所打断,转去执行一段预先安排好的中断服务程序;服务结束后,又返回原来的断点,继续执行原来的程序。

DMAC

  • 数据传送的方式
    • 查询传送:简单实用,效率较低
    • 中断传送:每次传送需要大量额外时间开销
    • DMA传送:DMA数据传送是一种完全由硬件执行数据交换的工作方式;数据交换不经过CPU而直接在存储器之间一级存储器和外设之间进行。实现了一个memcpy的功能和赋值的功能;DMA方式一般用于高速传送成组的数据。

DMAC的作用

  • DMA控制器在获得总线仲裁器或CPU授权占用总线后
    • 向内存和外设发出地址和控制信号,修改地址,对传送的字的个数计数
    • 以中断的方式向CPU报告传送操作的结束。

SoC芯片中各模块的DMA需求

  • 需要使用DMA的高带宽高速度的模块
    • LCD控制器和USB
  • 需要使用DMA的低带宽低速度的模块
    • AC97控制器、PWM、SPI和UART
  • 使用DMA的存储控制模块
    • 存储控制器和CF卡控制器
  • 不需要使用DMA的模块
    • RTC、Timer、GPIO等。

DMAC进行传输操作

  1. 判断所有通道的优先级,选取通道进行DMA传输
  2. 向AHB Arbiter发送DMA请求,申请使用总线,直到得到总线许可;
  3. 根据CPU的配置发送一个成组(Burst)传输;
  4. 如果传输过程中发生错误,则发送错误中断,否则继续传输;
  5. 如果一个Burstd的数据传输完毕,判断是否该通道所有要求的数据都传输完成;
  6. 如果所有的数据都传输完毕,则发送传输完成中断;
  7. 否则挂起该通道,转而为其他通道服务,,直到再次优先级轮转到该通道最高时,继续为其服务。

DMA控制器的功能模块

1 、 DMAC AHB Slave模块

  • DMAC的编程配置接口,用于CPU进行编程配置,内部设有控制寄存器堆和通道寄存器堆; 2、 DMAC AHB Master模块,包括3个子模块
  • AHB Master接口
  • DMA 引擎模块
  • DMAC FIFO 3、 通道管理模块
  • DMA 通道的管理与调度,包含有通道优先级判别器和通道管理寄存器; 4、中断请求模块
  • 在每个DMA流传输完成,或是当传输中发生错误的情况下,DMA控制器根据配置决定是否发出中断信号给中断控制器,交由CPU处理

DMA通道

  • 由于有较多的请求源,包括外设使用和存储器使用,因而需要一定数量的DMA通道数。通道数过少,会导致通道使用繁忙而引发竞争,可能使得外设的DMA请求得不到及时地处理、通道数过多会导致面积地不优化,使得芯片成本提高。
  • 对于各种DMA传输地数据量,实时性要求等不同,各个DMA传输地紧迫性是不一样的,因此需要引入通道的优先级,既要保证高带宽的外设优先享受DMA服务,同时也要确保低带宽的外设也能适时享受DMA服务