PAGE1
PAGE1
LPC1768DMA直接存储器访问
1.DMA简介
直接存储器访问(DMA,DirectMemoryAccess)是一种数据传输技术,允许外设或存储器之间直接进行数据传输,而不需要CPU的干预。这种技术可以显著提高数据传输效率,释放CPU资源,使其可以执行其他任务。LPC1768单片机内置了强大的DMA控制器,支持多种数据传输模式和多种触发源。
1.1DMA的基本概念
DMA的基本概念是通过一个专用的硬件控制器来管理数据传输,而不是通过CPU。当外设或存储器需要传输大量数据时,可以通过DMA控制器将数据直接从源地址传输到目标地址,而无需CPU逐字节地处理。这样可以减少CPU的负担,提高系统的整体性能。
1.2LPC1768的DMA控制器
LPC1768的DMA控制器具有以下特点:
通道数:LPC1768有8个DMA通道,每个通道可以独立配置。
传输模式:支持多种传输模式,包括块传输、请求传输、单次传输等。
触发源:支持多种触发源,包括定时器、ADC、UART等。
中断支持:DMA传输完成后可以触发中断,通知CPU数据传输已经完成。
灵活的地址配置:支持源地址和目标地址的固定、递增、递减等多种配置方式。
2.DMA控制器的配置
在LPC1768中,DMA控制器的配置主要通过一系列寄存器来实现。这些寄存器包括使能寄存器、配置寄存器、传输计数器寄存器、源地址寄存器、目标地址寄存器等。以下是一些常用的寄存器及其功能:
2.1DMA使能寄存器
DMA使能寄存器(DMAEN)用于启用或禁用DMA通道。每个通道都有一个对应的位来控制其使能状态。
#defineLPC_SC((volatileuint32_t*)0x400FC000)//SystemControlandStatusRegister
#defineLPC_SC_DMAEN(*(volatileuint32_t*)(LPC_SC+0x0C))//DMAEnableRegister
//启用DMA通道0
LPC_SC_DMAEN|=(10);
//禁用DMA通道0
LPC_SC_DMAEN=~(10);
2.2DMA配置寄存器
DMA配置寄存器(DMACfg)用于配置DMA通道的传输模式、触发源、传输方向等。每个通道都有一个对应的配置寄存器。
#defineLPC_DMA((volatileuint32_t*)0//DMAControllerBaseAddress
#defineLPC_DMA_DMACfg(n)(*(volatileuint32_t*)(LPC_DMA+0x000+(n*0x20)))//DMAChannelConfigurationRegister
//配置DMA通道0
LPC_DMA_DMACfg(0)=(124)|(120)|(0x0116)|(0x018)|(0x010);
//解释:
//124:使能通道
//120:源地址递增
//0x0116:目标地址固定
//0x018:传输宽度为8位
//0x010:触发源为定时器0
2.3DMA传输计数器寄存器
DMA传输计数器寄存器(DmaCnt)用于设置传输的数据块大小。
#defineLPC_DMA_DmaCnt(n)(*(volatileuint32_t*)(LPC_DMA+0x004+(n*0x20)))//DMAChannelTransferCountRegister
//设置DMA通道0传输100个字节
LPC_DMA_DmaCnt(0)=100;
2.4DMA源地址寄存器
DMA源地址寄存器(DmaSrc)用于设置数据传输的源地址。
#defineLPC_DMA_DmaSrc(n)(*(volatileuint32_t*)(LPC_DMA+0x008+(n*0x20)))//DMAChannelSourceAddressRegister
//设置DMA通道0的源地址为0
LPC_DMA_DmaSrc(0)=0
2.5DMA目标地址寄存器
DMA目标地址寄存器(DmaDest)用于设置数据传输的目标地址。
#defineLPC_DMA_DmaDest(n)(*(vol