PAGE1
PAGE1
LPC1100系列的DMA控制器
1.DMA控制器概述
DMA(DirectMemoryAccess,直接存储器访问)控制器是一种用于在不同存储器之间或存储器与外设之间传输数据的硬件模块。它可以在不占用CPU资源的情况下完成数据传输,从而提高系统的整体性能和效率。LPC1100系列的DMA控制器支持多种数据传输模式,包括存储器到存储器、存储器到外设和外设到存储器的传输。
1.1DMA控制器的主要功能
数据传输:在存储器和外设之间高效传输数据,减轻CPU的负担。
多通道支持:LPC1100系列的DMA控制器支持多个DMA通道,每个通道可以独立配置和操作。
灵活的触发源:DMA传输可以由多种外设事件触发,如USART、SPI、I2C等。
数据宽度支持:支持字节、半字和字的数据传输。
链表模式:支持链表模式的DMA传输,可以实现复杂的传输任务。
中断支持:DMA传输完成后可以产生中断,通知CPU进行后续处理。
1.2DMA控制器的基本结构
LPC1100系列的DMA控制器主要由以下部分组成:
DMA通道:每个DMA通道可以独立配置和控制数据传输。
DMA请求源:外设事件或CPU可以触发DMA请求。
DMA控制寄存器:用于配置和控制DMA通道的传输参数。
DMA状态寄存器:用于监控DMA通道的状态。
DMA中断寄存器:用于配置和管理DMA中断。
2.DMA控制器的配置和初始化
在使用DMA控制器之前,需要对其进行配置和初始化。以下是配置和初始化DMA控制器的步骤:
2.1使能DMA控制器
首先,需要在系统设置中使能DMA控制器。这通常通过设置电源和时钟控制寄存器(PWRCLK)来完成。
//使能DMA控制器
LPC_SYSCON-SYSAHBCLKCTRL|=(17);//使能DMA控制器时钟
LPC_SYSCON-PRESETCTRL|=(17);//使能DMA控制器复位
2.2配置DMA通道
LPC1100系列的DMA控制器支持多个DMA通道。每个通道的配置包括源地址、目标地址、传输大小、数据宽度等参数。
//配置DMA通道
voidDMA_ConfigChannel(uint8_tchannel,uint32_tsrcAddr,uint32_tdstAddr,uint16_ttransferSize,uint8_tdataWidth,uint8_ttriggerSource){
LPC_DMA-CHANNEL[channel].SRC=srcAddr;//设置源地址
LPC_DMA-CHANNEL[channel].DST=dstAddr;//设置目标地址
LPC_DMA-CHANNEL[channel].XFERCFG=(transferSize-1)|(dataWidth9)|(triggerSource12);//配置传输大小、数据宽度和触发源
}
2.3启动DMA传输
配置完成后,可以通过设置相应的控制寄存器来启动DMA传输。
//启动DMA传输
voidDMA_StartTransfer(uint8_tchannel){
LPC_DMA-CHANNEL[channel].CFG=(10);//使能DMA通道
}
2.4停止DMA传输
如果需要停止DMA传输,可以通过清空相应的控制寄存器来实现。
//停止DMA传输
voidDMA_StopTransfer(uint8_tchannel){
LPC_DMA-CHANNEL[channel].CFG=0;//禁用DMA通道
}
3.DMA控制器的工作模式
LPC1100系列的DMA控制器支持多种工作模式,包括单次传输、块传输和链表模式。这些模式可以根据具体的应用需求进行选择。
3.1单次传输模式
在单次传输模式下,DMA控制器一次传输一个数据块,传输完成后自动停止。
//配置单次传输模式
voidDMA_ConfigSingleTransfer(uint8_tchannel,uint32_tsrcAddr,uint32_tdstAddr,uint16_ttransferSize,uint8_tdataWidth,uint8_ttriggerSource){
DMA_ConfigChannel(channel,srcAddr,dstAddr,transferSize,dataWidth,triggerSource);