通过使用 2 个 DMA 通道,可以在 CTR 模式下将 N 个明文块加密为 N 个密文块,而无需 CPU 交互。要实现 CTR 加密,请按照下列步骤操作:
- 配置输出 DMA 通道以保存密文:
- 将 DMA 通道触发器选项设置为 AES Trig1
- 将 DMA 通道源地址设置为 DATA_OUT
- 将 DMA 通道目标地址设置为要存储密文的位置(例如,SRAM)
- 将 DMA 通道传输大小设置为 N∗4
- 将 DMA 通道模式设置为单字或单字节传输模式
- 在 AES 事件寄存器中,取消屏蔽 DMA_TRIG_DATAOUT 的 IMASK 寄存器中的 Trig1
- 配置输入 DMA 通道以加载明文:
- 将 DMA 通道触发器选项设置为 AES Trig0
- 将 DMA 通道源地址设置为存储明文的位置(例如,SRAM)
- 将 DMA 通道目标地址设置为 DATA_IN
- 将 DMA 通道传输大小设置为 N∗4
- 将 DMA 通道模式设置为单字或单字节传输模式
- 在 AES 事件寄存器中,取消屏蔽 DMA_TRIG0 的 IMASK 寄存器中的 Trig0
- 为 DMA 控制器中的输出 DMA 通道配置并启用 DMA 中断
- 配置 DMA_HS 以实现基于 DMA 的握手:设置 DMA_HS[DMA_DATA_ACK] = 1
- 按节 10.2.1中所述加载密钥
- 通过写入 IV0、IV1、IV2 和 IV3 寄存器来加载初始化矢量 (IV)
- 配置 CTRL 寄存器以将分组密码加密模式设置为 CTR
- 通过 CTRL[KEY_SIZ] 选择密钥大小
- 通过 CTRL[DIR] = 1 选择加密方向
- 通过设置 CTRL[CTR]=1 选择 CTR 模式
- 通过设置 CTRL[CTR_WIDTH] 选择 CTR 宽度
- 00b -CTR32
- 01b -CTR64
- 10b -CTR96
- 11b -CTR128
- 通过将字节数 N×4 写入 AES C_LENGTH_0 和 C_LENGTH_1 寄存器开始加密
- 等待表示整个操作完成的 DMA 通道中断。密文输出将存储在步骤 1c 中配置的位置