当前位置: 首页 > article >正文

【致敬未来的攻城狮计划】— 连续打卡第二十五天:RA2E1的 DTC传输模式

系列文章目录

        由于一些特殊原因:

系列文章链接:(其他系列文章,请点击链接,可以跳转到其他系列文章)

        24.RA2E1的 DMAC——数据传输 


文章目录

系列文章目录

前言

一、DTC是什么?

二、DTC内部寄存器

三、DTC 模块模式

四、正常传输模式

五、重复传输模式

六、块传输模式

七、DMAC和DTC关键特性对比

八、中断

风华正茂



前言

        DTC(Data Transfer Controller)为数据传输控制器,用于在被中断请求激活时传输数据。 DTC 也可以在不占用 CPU 的情况下将数据传输,它的功能与 DMAC 的功能其实是相似的。


一、DTC是什么?


二、DTC内部寄存器

        MRA、MRB、SAR、DAR、CRA 和 CRB 这些都是属于 DTC 内部的寄存器,它们是无法通过 CPU 直接访问的。 这些 DTC 内部寄存器中设置的值作为传输信息放置在 SRAM 区域中。 当生成激活请求时,DTC 从 SRAM 区域读取传输信息,并将其设置在其内部寄存器中。 数据传输结束后,内部寄存器内容作为传输信息写回 SRAM 区域。

三、DTC 模块模式

DTC 模块支持三种操作模式,相对于 DMAC,少了重复-块传输模式。

  • 正常模式: 在正常模式下,DTC每次接收到中断触发时都会传输单个数据单元。数据单元可以是1、2、4字节。 传输的长度(length)可以设置为[0, 65535]。当长度设置为0时,DTC将执行65536传输,而不是0。 在每次传输之后,源地址和目的地址可以单独设置为固定、递增或递减。 每次传输后,16位计数器递减。 当计数器达到 0 时,DTC传输将不再会被中断源触发,CPU可以被中断以通知所有传输已完成。

  • 重复模式: 重复模式的工作方式与正常模式相同,但长度(length)限制为范围 [1, 256] 内的整数。 当传输计数器达到 0 时,计数器被重置为其配置值(length), 重复区域(源或目的地址)被重置为其起始地址,并且传输仍将会被中断触发。

  • 块模式: 在块模式下,每个中断传输的数据单元量可以设置为范围 [1, 256] 内的整数。 还可以将要传输的块数量(num_blocks)配置为16位数字, 即可以设置为[0, 65535]。当长度设置为0时,DTC将执行65536传输,而不是0。 每次块传输后,重复区域(源或目的地址)将重置为原始地址,而另一个地址将递增或递减到下一个块。

四、正常传输模式

        正常传输模式(Normal Transfer Mode)允许在单个激活源上进行1字节(8位)、1半字(16位)、1字(32位)数据传输。 传输计数可以设置为 1 到 65536 (0x10000)。 传送源地址和目的地址也可以独立设置为递增、递减或固定。 该模式允许在指定的计数传输结束时生成对CPU的中断请求。

五、重复传输模式

        重复传输模式(Repeat Transfer Mode)允许在单个激活源上进行1字节(8位)、1半字(16位)或1字(32位)数据传输。 重复区域的传输源或传输目的地必须在MRB.DTS位中指定。 传输计数可以设置为从1到256。 当指定的传输计数完成时,恢复重复区域中指定的地址寄存器的初始值,恢复传输计数器的初始值,并重复传输。 另一地址寄存器连续递增或递减或保持不变。 在重复传输模式下,当传输计数器CRAL递减到0x00时,CRAL值更新为CRAH寄存器中设置的值。 因此,传输计数器不会清0,当MRB.DISEL位设置为0时,将禁用对CPU的中断请求。 当指定的数据传输完成时,会生成对CPU的中断请求。

六、块传输模式

        块传输模式(Block Transfer Mode)允许在单个激活源上进行单块数据传输。 数据块区域的传输源或传输目的地必须在MRB.DTS位中指定。 块大小可以设置为1至256字节、1至256半字(2至512字节)或1至256字(4至1024字节)。 当指定块的传输完成时,恢复块区域中指定的块大小计数器CRAL和地址寄存器 (当MRB.DTS=1时为SAR寄存器或当DTS=0时为DAR寄存器)的初始值。 另一地址寄存器连续递增或递减或保持不变。 传输计数(块计数)可以设置为从 1 到 65536。 该模式允许在指定计数块传输结束时生成对CPU的中断请求。

七、DMAC和DTC关键特性对比

        FSP 库里边的传输 API 可以由 DMAC 或者 DTC 实现, 因此理论上来说我们可以在 DMAC 和 DTC 之间切换使用。 但是 DMAC 和 DTC 还是有一些不同的,因此在它们之间进行选择时,请考虑以下因素:

DMAC

DTC

通道数

  • 8通道或更少

  • 每个中断一个实例

重复模式

  • 可配置重复次数

  • 最大重复大小为 1024 x 4 字节

  • 一直重复

  • 最大重复大小为 256 x 4 字节

块模式

  • 最大块大小为 1024 x 4 字节

  • 最大块大小为 256 x 4 字节

链传输模式

  • 不支持

  • 支持

软件触发

  • 在不使用软件ELC事件时支持软件触发器

  • 支持 TRANSFER_START_MODE_SINGLE

    和 TRANSFER_START_MODE_REPEAT 模式

  • 必须使用软件ELC事件

偏移地址模式

  • 支持

  • 不支持

八、中断

中断

DTC 和 DMAC 的中断行为不同:

  • DTC 使用配置的 IELSR 事件 IRQ 作为中断源

  • 而每个 DMAC 通道都有自己的 IRQ

其他注意事项:

  • DTC 需要一定的 RAM。

  • DTC 将传输信息存储在RAM中,并在每次传输后写回RAM,而 DMAC 将所有传输信息存储在寄存器中。

  • 当为多个激活源配置传输时,DTC 必须在每次中断时从RAM获取传输信息。这可能会导致传输之间的延迟更高。

  • DTC 使用激活源的IRQ中断CPU。每个 DMAC 通道都有自己的IRQ。

另外在传输信息的 transfer_info_t::irq 属性的设置上,根据所选模式的不同,其具体行为也略有不同。

正常模式 (Normal Mode)

中断模式

DMAC

DTC

TRANSFER_IRQ_EACH

N/A

每次传输后中断

TRANSFER_IRQ_END

完成最后一次传输后中断

完成最后一次传输后中断

重复模式 (Repeat Mode)

中断模式

DMAC

DTC

TRANSFER_IRQ_EACH

每次传输后中断

每次传输后中断

TRANSFER_IRQ_END

完成最后一次传输后中断

每次传输后中断

块模式 (Block Mode)

中断模式

DMAC

DTC

TRANSFER_IRQ_EACH

每次传输后中断

每次传输后中断

TRANSFER_IRQ_END

完成最后一次传输后中断

完成最后一次传输后中断

重复-块模式 (Repeat-block Mode)

中断模式

DMAC

DTC

TRANSFER_IRQ_EACH

N/A

N/A

TRANSFER_IRQ_END

完成最后一次传输后中断

N/A


风华正茂


http://www.kler.cn/a/18020.html

相关文章:

  • Java中的不可变集合:性能与安全并重的最佳实践
  • LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略
  • HTMLCSS: 实现可爱的冰墩墩
  • CSP/信奥赛C++语法基础刷题训练(1):洛谷P5715 :三位数排序
  • Django 详细入门介绍
  • 光流法与直接法在SLAM中的应用
  • 深入浅出堆—C语言版【数据结构】
  • 为什么需要使用Docker
  • 掌握这些GitHub搜索技巧,你的开发效率将翻倍!
  • 使用MindSDK的at-server组件开发从机模组
  • ScriptableObject上的prefab内容暂用,ScriptableObject详解
  • random — 伪随机数生成器(史上总结最全)
  • C++学习day--09 字符串比较、运算符
  • 【Java多线程编程】创建线程的基本方式
  • 【Linux】浅谈网络协议栈-网桥br0
  • 分布式锁Redisson对于(不可重入、不可重试、超时释放、主从一致性)四个问题的应对
  • Python人工智能—线性回归
  • C++面试题
  • java8新特性——StreamAPI
  • PyQt5零基础入门(二)——主窗口的显示与退出
  • LInux grep sed awk 命令详解
  • 开关电源基础01:电源变换器基础(3)
  • 数影周报:假冒ChatGPT的恶意软件激增,谷歌开启无密码登录
  • docker-mysql的几个问题
  • 学习HCIP的day.04
  • 【383. 赎金信】