PAGE1
PAGE1
LPC15xx系列DMA控制器
1.引言
直接存储器访问(DMA)控制器是LPC15xx系列微控制器中的一个重要组件,它允许数据在存储器和外设之间高效传输,而无需CPU的干预。这种传输方式可以显著提高系统的整体性能,减少CPU的负担,特别是在需要大量数据传输的应用中。本节将详细介绍LPC15xx系列微控制器中的DMA控制器的原理和使用方法,并通过具体的代码示例来展示如何配置和使用DMA。
2.DMA控制器概述
LPC15xx系列微控制器集成了一个灵活的DMA控制器,支持多种传输模式和触发源。DMA控制器的主要功能包括:
数据传输:可以在存储器和外设之间进行数据传输。
通道管理:支持多个DMA通道,每个通道可以独立配置和管理。
中断处理:可以在数据传输完成或传输错误时生成中断。
优先级控制:支持固定和动态优先级管理,确保高优先级任务优先完成。
2.1DMA控制器的主要特性
多通道支持:LPC15xx系列DMA控制器支持多个DMA通道,每个通道可以独立配置。
灵活的触发源:支持多种外设和定时器作为触发源。
多种传输模式:支持单次传输、块传输和单次循环传输等模式。
中断支持:可以在传输完成或错误时生成中断,方便进行错误处理和状态检查。
优先级管理:支持固定和动态优先级管理,确保高优先级任务优先完成。
3.DMA控制器的结构
LPC15xx系列DMA控制器的内部结构包括以下几个主要部分:
DMA控制器寄存器:用于配置和控制DMA通道。
DMA通道:每个通道包括源地址寄存器、目的地址寄存器、传输计数器等。
DMA请求源:可以是外设、定时器等,用于触发DMA传输。
DMA中断:用于在传输完成或错误时通知CPU。
3.1DMA控制器寄存器
DMA控制器寄存器是配置和控制DMA传输的关键。以下是一些主要的DMA控制器寄存器:
DMAControlRegister(DMACR):用于使能和禁用DMA控制器。
DMAConfigurationRegister(DMACR):用于配置DMA通道的基本参数。
DMASourceAddressRegister(DMASADDR):用于设置DMA传输的源地址。
DMADestinationAddressRegister(DMADADDR):用于设置DMA传输的目的地址。
DMATransferCountRegister(DMATCOUNT):用于设置DMA传输的数据量。
DMARequestSelectRegister(DMAREQSEL):用于选择DMA请求源。
DMAStatusRegister(DMASR):用于检查DMA传输的状态。
DMAInterruptStatusRegister(DMAISR):用于检查DMA中断状态。
4.DMA通道配置
配置DMA通道涉及多个步骤,包括选择触发源、设置源地址和目的地址、配置传输计数器等。以下是一个详细的配置流程:
4.1选择触发源
DMA传输可以由多种外设或定时器触发。通过配置DMAREQSEL寄存器选择触发源。例如,选择SPI0作为触发源:
//选择SPI0作为DMA触发源
LPC_DMA-DMAREQSEL[0]=DMA_REQUESTSOURCE_SPI0;
4.2设置源地址和目的地址
源地址和目的地址分别通过DMASADDR和DMADADDR寄存器设置。例如,将数据从一个缓冲区传输到另一个缓冲区:
//设置源地址
LPC_DMA-DMASADDR[0]=(uint32_t)sourceBuffer;
//设置目的地址
LPC_DMA-DMADADDR[0]=(uint32_t)destinationBuffer;
4.3配置传输计数器
传输计数器用于设置要传输的数据量。通过DMATCOUNT寄存器进行配置。例如,传输100个字节:
//设置传输计数器
LPC_DMA-DMATCOUNT[0]=100;
4.4配置传输模式
DMA控制器支持多种传输模式,包括单次传输、块传输和单次循环传输。通过DMACR寄存器进行配置。例如,配置为块传输模式:
//配置为块传输模式
LPC_DMA-DMACR[0]=DMA_MODE_BLOCK;
4.5使能DMA通道
最后,使能DMA通道以开始传输。通过DMACR寄存器的使能位进行配置:
//使能DMA通道0
LPC_DMA-DMACR[0]|=DMA_CHANNEL_ENABLE;
5.DMA中断处理
DMA控制器可以在传输完成或发生错误时生成中断。通过配置中断使能寄存器DMAISR和DMACR,可以启用这些中断。以下是一个DMA