DMA:mem-to-mem mem-to-device device-to-mem

本文探讨了高性能单片机在汽车行业的应用,并深入分析了Direct Memory Access (DMA)的工作原理及其在内存与外设间高效数据传输中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    换了工作,算是步入汽车行业了。汽车不同于消费类电子,使用的是"高性能单片机",尽管物理通讯方式为:can lin spi 这些相对与消费类电子比较慢速的外设,但是AutoSar规范定义的比较详细。
    刚开始接触"高性能单片机"。不知道怎么定义这样的芯片,有着200MHz的主频(甚至是多核)但是没有MMU。作为单片机类型的,所以称之为:高性能单片机。(不知道怎么描述,这些芯片多数用于汽车行业)

    既然做底层驱动免不了和DMA打交道。之前有意识无意识的也使用DMA。但是没有真的体会到一个DMA的属性

    Mem to Mem 
    Device to Mem
    Mem to Device
  同样作为DMA搬移数据,搬移的过程还要考虑一个问题。数据不光是从哪里来,到哪里去,而且还要考虑数据从什么设备来,到什么设备去的问题。
内存到内存这不用多说了,配置好DMA的目的地址,源地址,搬移大小,然后使能。但是到了内存和设备交互的时候,DMA为什还要再定义这两种属性呢?

原因在于到底是谁触发了DMA的搬移动作。从内存搬移数据到外设的应用中,外设如何触发DMA。应为DMA的触发源可以和设备的缓存以及外设收发数据的状态决定DMA到底需不需要搬移数据。这样的应用中完全不要CPU的干预,CPU只需要DMA的搬运结束后的收尾工作。
比如:
一个硬件的接受缓存状态为不满,满。芯片内部会有DMA的触发源选择,把这个硬件的缓存和DMA的触发源“链接”起来。所谓链接指的是寄存器中可以具体把触发源设置为“Enable”的状态。同时也可以通过寄存器把触发源的ID写如DMA的控制寄存器。又或者是DMA的触发源固定为某个硬件类型的触发源。
比如:
DMA channel 0         UART 1 
DMA channel 1         UART 2
DMA channel 2         ADC

外设缓存为空或者满的时候出自动触发DMA进行搬移,而不是软件触发。

文章中出现错误,欢迎指正。
谢谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值