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

系列文章目录

        由于一些特殊原因:

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

        24.RA2E1的 DMAC——数据传输 



前言

        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


风华正茂

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值