请选择 进入手机版 | 继续访问电脑版
查看: 1608|回复: 1

[分享] LPC55(S)xx双DMA使用

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32000
    最后登录
    2024-4-9
    发表于 2020-11-5 17:51:00 | 显示全部楼层 |阅读模式
    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使用情况:
    1.png
    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框图说明
    2.png
    注意
    DMA请求直接连接到外围设备。 每个通道支持一条DMA请求线和一条触发输入。 某些DMA请求允许选择请求源。 DMA触发器选自众多可能的输入源。
    2.3.2 DMA请求和触发多路复用器
    DMA请求旨在加快传输速度以匹配外设(如果有的话,包括其FIFO)可以执行的操作,然后进行DMA触发器开始传输,用户可以根据设计要求选择软件触发器或硬件触发器。

    DMA0请求和触发器多路复用器表中显示了DMA0和DMA1的请求和触发器多路复用器。
    3.png
    4.png
    5.png
    6.png
    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外设。
    1. /** Peripheral DMA0 base address */
    2. #define DMA0_BASE_NS (0x40082000u)
    3. /** Peripheral DMA0 base pointer */
    4. #define DMA0_NS ((DMA_Type *)DMA0_BASE_NS)
    5. volatile DMA_Type *DMA0_NS_Base = (DMA_Type *)DMA0_NS;
    6. DMA_Init(DMA0);
    复制代码
    2. DMA_CreateHandle
    1. 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。
    1. DMA_EnableChannel(DMA0, 0);
    复制代码
    4. DMA_EnableChannel:
    在DMA IRQ处理程序中调用此回调。 用户可以获取中断A或B标志,并监视它是否由中断设置。使用以下API的软件。
    1. DMA_SetCallback(&g_DMA_Handle, DMA_Callback, NULL);
    复制代码
    5. DMA_PrepareTransfer:
    此功能根据用户输入准备传输配置结构。 以下代码表示用户可以配置DMA传输源地址,目标地址,DMA传输类型和自定义描述符
    根据数据传输要求。
    1. DMA_PrepareTransfer(&transferConfig,srcAddr,destAddr,sizeof(srcAddr[0]),sizeof(srcAddr),
    2. kDMA_MemoryToMemory,NULL);
    复制代码
    注意
    第六个参数确定源地址和目标地址是否应该增加。例如,源地址和目标地址都应增加以在存储器之间复制数据为了。

    1. config->xfercfg.srcInc = 1;
    2. config->xfercfg.dstInc = 1;
    3. config->isPeriph = false;
    复制代码
    未完还有很多内容,管管就先不给大家翻译了


    详情请点击下载>>>>


    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2020-11-6 09:19:22 | 显示全部楼层
    平时能用DMA的地方,几乎都用得是DMA方式。
    由于系统的负载不高,也没有能体验出来其强大的优点。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-18 13:02 , Processed in 0.115143 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表