现在的位置: 首页 > 综合 > 正文

ARM PL330 DMA控制器开发(1)

2012年12月25日 ⁄ 综合 ⁄ 共 1161字 ⁄ 字号 评论关闭

一、DMA介绍

DMA作为一种CPU与外设传输数据的技术,现在广泛用于各种计算机架构中,它最大的优点就是无需CPU干涉下,完成数据从内存到外设的传递。本文讲解一下S5PC100中的DMA控制器的操作方法。文中例举的代码都是在FS_S5PC100平台上经过验证的。在华清远见的FS_S5PC100平台上通过PL330 DMA控制器实现了内存到内存、内存到串口、串口到串口等多种DMA传输方式。
首先简单介绍下什么是DMAC,DMAC 是一个自适应先进的微控制器总线体系的控制器,它由ARM公司设计并基于PrimeCell技术标准,DMAC提供了一个AXI接口用来执行DMA传输,以及两个APB接口用来控制这个操作,DMAC在安全模式技术下用一个APB接口执行TrustZone技术,其他操作则在非安全模式下执行。DMAC包括了一个小型的指令集,用来提供一些灵活便捷的操作,为了缩小内存需求,DMAC则使用了变长指令。
不同于ARM11以及以前系列的芯片,S5PC100使用了基于PrimeCell技术标准的PL330(DMA控制器核心)有了很大的变化,从编程方式上看,它提供了灵活的指令集,使得你有更多的组合方式用来操作DMA,从硬件上看,它实现了硬件上的多线程管理,一次编写代码即可让它正常的完成所需的工作,因此这个DMA的开发是有一定困难的。

二、PL330简述

      DMAC包含了一个执行指令的模块,并且控制了数据的传输,DMAC通过AXI接口来存取这些存储在了内存中的指令,DMAC还可以将一些临时的指令存放在Cache中,我们能够配置行宽度以及深度。
当然,DMAC的8个通道都是可配置的,且每个都可支持单个并发线程的操作,除此之外,还有一个管理线程专门用来初始化DMA通道的线程。它是用来确保每个线程都在正常工作,它使用了round-robin来处理当选择执行下一个活动期的DMA通道。
DMAC使用了变长指令集,范围在1到6字节之间,并还为每个通道提供了单独的PC寄存器,当一个线程需要执行一条指令时,将先从Cache中搜索,如果匹配上则立刻供给数据,另外,线程停止的话,DMAC将使用AXI接口来执行一次Cache线填充。
当一个DMA通道线程执行一次load/store指令,DMAC将添加指令到有关的读队列和写队列中,DMAC使用这些队列作为一个指令存储区,它用来优先执行存储在其中的指令,DMAC还有包含了一个MFIFO数据缓存区,它用来存储DMA传输中读/写的数据。

DMAC还提供多个中断输出,在微处理器的不干扰下,外设的request接口还有内存到外设和外设到内存的传输能力,双APB接口支持安全以及非安全两种模式,编程时,可通过APB接口来访问状态寄存器和直接执行DMAC指令。

 
图1 S5PC100中的DMA模块图

抱歉!评论已关闭.