LPC55(S)xx双DMA使用
1引言
LPC55(S)xx是Arm®皮质®-基于M33的微控制器
嵌入式应用程序。这些设备包括:
•高达320 KB的片上SRAM
•高达640 KB的片上闪存
•高速和全速USB主机和设备接口,具有无晶体操作,可实现全速
•五个通用计时器
•一个SCTimer / PWM
•1个RTC /警报计时器
•1个24位多速率计时器(MRT)
•一个窗口看门狗定时器(WWDT)
•八个灵活的串行通信外围设备(每个外围设备可以是USART,SPI,I2C或I2S接口)
•一个16位1.0 Msp ADC
• 温度感应器。
Arm Cortex-M33提供了安全基础,可通过TrustZone®技术提供隔离保护宝贵的IP和数据。除了LPC55(S)xx数据表和用户手册中的可用信息外,本应用笔记提供了基本的引入LPC55(S)xx Dual-DMA,配置为使用指定通道所需的寄存器,配置步骤基于在SDK,硬件平台和程序验证上。
2 LPC55(S)xx DMA简介
2.1 DMA简介
DMA:直接内存访问(DMA)的使用可在内存与内存之间或外设之间进行高速数据传输和记忆。 DMA快速移动数据而无需任何CPU操作。这样可以将CPU资源留给其他操作。
DMA仅提供数据传输功能,其传输效率可能不如MCU Core。
注意 DMA通道:每个DMA通道支持一条DMA请求线和一条触发输入。 示例:USART0_RX和USART0_TX都可以是“请求输入”并产生“请求”信号。 “请求信号”特定外设产生的信号连接到DMA通道。用户应遵循“ DMA请求表”进行配置对应的频道。
可能的DMA使用情况:
2.2双DMA块概述
•DMA控制器:SDMA IP的两个实例,用户可以决定哪个实例是安全的。
•DMA0:22个通道,具有用于22个触发源的多路复用器。 每个Flexcomm接口都提供DMA RX和DMA TX向DMA控制器的请求。 ADC连接到2个不同的DMA请求通道。 SCT和选定的计时器和引脚中断也用作DMA触发器。 此外,从所有DMA通道输出中选择了四个DMA触发触发器。 SHA-2和AES还提供DMA通道和触发接口。
•DMA1:10个通道,带有用于15个触发源的多路复用器。
•用户可以为每个通道选择优先级(最多八个优先级)。
•连续的优先级仲裁。
•支持单笔传输,最多1,024个字。
•地址增量选项允许打包和/或拆包数据。
2.3 DMA模块的基本配置
本节描述了DMA框图。
2.3.1 DMA框图说明
注意 DMA请求直接连接到外围设备。 每个通道支持一条DMA请求线和一条触发输入。 某些DMA请求允许选择请求源。 DMA触发器选自众多可能的输入源。 2.3.2 DMA请求和触发多路复用器
DMA请求旨在加快传输速度以匹配外设(如果有的话,包括其FIFO)可以执行的操作,然后进行DMA触发器开始传输,用户可以根据设计要求选择软件触发器或硬件触发器。
DMA0请求和触发器多路复用器表中显示了DMA0和DMA1的请求和触发器多路复用器。
3 DMA配置API
本节列出了DMA配置API并提供了数据API示例。
3.1 DMA配置API列表
DMA寄存器分为DMA控制,中断和状态寄存器以及DMA通道寄存器。 每次DMA传输通道由一组寄存器控制,包括CFG [0:29],CTRLSTAT [0:29]和XFERCFG [0:29]。 两个DMA控制器是存在:DMA0和DMA1(安全)。
本章介绍如何在不更改SDK驱动程序的情况下使用API配置相关寄存器,并让用户使用DMA可以轻松实现功能,主要功能原型显示在DMA API调用表中。
3.2数据API示例
本节列出了以下数据API示例:
•内存到内存
•内存到外设
•外围存储
3.2.1内存到内存
1. DMA_Init:
初始步骤包括启用DMA时钟,设置描述符表和启用DMA外设。
- /** Peripheral DMA0 base address */
- #define DMA0_BASE_NS (0x40082000u)
- /** Peripheral DMA0 base pointer */
- #define DMA0_NS ((DMA_Type *)DMA0_BASE_NS)
- volatile DMA_Type *DMA0_NS_Base = (DMA_Type *)DMA0_NS;
- DMA_Init(DMA0);
复制代码 2. DMA_CreateHandle
- DMA_CreateHandle(&g_DMA_Handle, DMA0, 0);
复制代码注意 用户可以使用DMA1。 例如,“ DMA_CreateHandle(&g_DMA_Handle,DMA1,0)”表示DMA1_Channel0为 选择作为通道传输数据。 3. DMA_EnableChannel:
此功能启用DMA通道。 要启用所选通道,将使用在步骤2中选择的DMA0_Channel0进行调用API。
- DMA_EnableChannel(DMA0, 0);
复制代码 4. DMA_EnableChannel:
在DMA IRQ处理程序中调用此回调。 用户可以获取中断A或B标志,并监视它是否由中断设置。使用以下API的软件。
- DMA_SetCallback(&g_DMA_Handle, DMA_Callback, NULL);
复制代码 5. DMA_PrepareTransfer:
此功能根据用户输入准备传输配置结构。 以下代码表示用户可以配置DMA传输源地址,目标地址,DMA传输类型和自定义描述符
根据数据传输要求。
- DMA_PrepareTransfer(&transferConfig,srcAddr,destAddr,sizeof(srcAddr[0]),sizeof(srcAddr),
- kDMA_MemoryToMemory,NULL);
复制代码注意 第六个参数确定源地址和目标地址是否应该增加。例如,源地址和目标地址都应增加以在存储器之间复制数据为了。
- config->xfercfg.srcInc = 1;
- config->xfercfg.dstInc = 1;
- config->isPeriph = false;
复制代码 未完还有很多内容,管管就先不给大家翻译了
详情请点击下载>>>>
|