aurix中DMA使用

来源:互联网 发布:think php框架 编辑:程序博客网 时间:2024/05/17 04:04

首先请注意:DMA的源/目标地址必须是64位对齐
这里写图片描述
DMA就是从数据源到DMA控制器,再从DMA控制器到目标源。
DMA硬件请求包括自身的请求或其他的DMA请求通道。
DMA控制器主要由这三部分组成:DMA channel 、 move engine 、 bus switch
设置DMA通道,DMA shadow reg的作用是体现在link DMA使用的时候,指定Shadow Addr,等上一段搬完后,能自动把shadow addr赋值到源或者目标地址,开始搬运下一段。
DMA通道请求控制
这里写图片描述
然而触发dma请求,可以通过硬件或软件
硬件可以由ICU中断单元触发,硬件请求通过TSRz.HTRE.使能或不使能,需要dma转化后,软件reset该位。
软件请求则是直接设置 CHCSRz.SCH位

软件操作模式:
这里写图片描述
软件操作时通过TSRz.HTRE位不使用硬件操作。
硬件操作模式:
ICU中断触发,TSRz.ECH位需要使能硬件模式。
如果要使用硬件中断请求DMA,一定要注意中,中断优先级SRPN的设置!原话
这里写图片描述
说白了,也就是外设的中断如果是向DMA请求,则设置中断优先级一定要等于待处理的DMA的通道ID号,如果不一致,这触发不了该DMA的通道工作。
还有就是,如果要使用硬件中断控制DMA,进行DMA配置的部分一定要在enable interrupt之前。

下面则详细说一下DMA整个控制顺序,如下:
这里写图片描述
Pending的通道通过DMA仲裁后,选择优先级高的active,给move engine去搬运,其中搬运的时候经过SRI总线,有bus switch来转换。
这里写图片描述
其中在bus switch这里的优先级已经确定,Cerberus是作为bus switch的看门狗
这里写图片描述
这是在SRI中优先级,然而对于move engine访问spb资源,则move engine 的优先级则需要设置:
这里写图片描述

0 0
原创粉丝点击