首页 > 其他分享 >AXI DMA (三)

AXI DMA (三)

时间:2024-11-15 18:17:46浏览次数:3  
标签:DMA 启用 写入 S2MM 寄存器 对齐 AXI

免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。

读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。

本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。

若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。


前言

本章继续介绍AXI DMA的使用。


一、A DMA operation for the S2MM channel is set up and started by the following sequence:

1. 启动 S2MM 通道

  • 步骤 1:通过设置 S2MM_DMACR.RS = 1 来启动 S2MM 通道,表示 DMA 传输开始运行。
    • S2MM_DMACR.RS:这个寄存器位用于启动或停止 DMA 操作。设置为 1 启动 DMA 通道,设置为 0 停止 DMA 操作。
    • DMASR.Halted:这是一个状态位,指示 DMA 是否停止。启动 S2MM 后,Halted 位应该被清除(去assert),表示 DMA 通道已经开始运行。

2. 启用中断(可选)

  • 步骤 2:如果需要启用中断,可以通过写 1 到以下两个寄存器来启用:
    • S2MM_DMACR.IOC_IrqEn:启用传输完成中断。
    • S2MM_DMACR.Err_IrqEn:启用错误中断。
    • 延迟中断延迟计数阈值计数 在启用 Direct Register Mode 时不可用,因此在该模式下,它们的配置无效。

3. 配置目标地址

  • 步骤 3:写入有效的目标地址到 S2MM_DA 寄存器:
    • S2MM_DA:目标地址寄存器,用于指定数据写入的位置。
    • 如果 AXI DMA 配置为 大于 32 位的地址空间,则需要编程 S2MM_DA MSB 寄存器。

4. 对齐要求

  • 步骤 4:如果未启用数据重对齐(DRE),则需要确保目标地址对齐,否则可能导致未定义的结果。对齐要求通常是根据 流数据宽度 来决定的。例如:
    • 如果 Memory Map Data Width 为 32 位(4 字节),那么地址应该是 4 字节对齐的,即 0x0, 0x4, 0x8, 0xC 等。
    • 如果启用 DRE(数据重对齐引擎),并且 流数据宽度小于 128 位,则目标地址可以位于任意字节偏移量,无需对齐。

5. 配置接收缓冲区长度

  • 步骤 5:将接收缓冲区的字节数写入 S2MM_LENGTH 寄存器:
    • S2MM_LENGTH:指定要接收的字节数。必须为非零值才能开始接收,值为零时没有任何效果。
    • 最小接收缓冲区长度:值应该大于或等于最大接收到的数据包大小,才能保证正常接收。小于接收字节数的长度会导致未定义的结果。
    • Micro DMA 模式 下,S2MM_LENGTH 的值必须与从 S2MM AXI4-Stream 接口接收的字节数完全匹配。
    • 写入顺序:所有其他 S2MM 寄存器可以按照任意顺序写入,但 S2MM_LENGTH 必须最后写入。

二、示例工程仿真

1.往0x30寄存器中写入0x7001,启动 S2MM 通道,启用中断;往0x48寄存器中写入0x0000,配置目标地址;往0x58寄存器中写入0x80配置接收缓冲区长度

2.与MM2S类似的AXI操作,通过AXI4 WR往内存中写数据。

3.完成传输后,就会产生中断


标签:DMA,启用,写入,S2MM,寄存器,对齐,AXI
From: https://blog.csdn.net/qq_52538756/article/details/143759870

相关文章

  • AXI DMA (四)
    免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。读者在使用本文信息时,应自行验......
  • Axios 拦截器示例(JWT 登录与自动刷新)
    1.安装axios首先,确保你已经安装了axios:npminstallaxios2.设置Axios拦截器importaxiosfrom'axios';//创建一个axios实例constaxiosInstance=axios.create({baseURL:'http://localhost:8000/',//后端API地址timeout:10000,//设置超时时间......
  • [LeetCode] 2064. Minimized Maximum of Products Distributed to Any Store
    Youaregivenanintegernindicatingtherearenspecialtyretailstores.Therearemproducttypesofvaryingamounts,whicharegivenasa0-indexedintegerarrayquantities,wherequantities[i]representsthenumberofproductsoftheithproducttype......
  • el表达式+axios+vue -2024/11/13
    一个好看的界面<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>首页</title></head><body><divid="app"><el-menu:default-active=......
  • VUE 封装axios
    axios官方介绍:https://www.axios-http.cn/docs/intro node.js安装:npminstallaxios封装一个配置文件constinstance=axios.create({baseURL:'https://some-domain.com/api/',timeout:1000,headers:{'X-Custom-Header':'foobar'}});......
  • 了解Axios:初学者看懂这篇博客就够了
    目录1.引言没有Axios时的HTTP请求使用Axios发送HTTP请求2.什么是Axios?3.安装Axios4.发送GET请求5.发送POST请求6.处理请求和响应7.取消请求8.结论1.引言        在现代Web开发中,与服务器进行数据交换是必不可少的。Axios是一个流行的JavaScript......
  • Educational Codeforces Round 144 (Rated for Div. 2) C. Maximum Set
    我们要选出最长的子序列,使得每一个数都是前一个数的倍数。因此自然我们可以想到选择最小值然后每次乘\(2\)。所以有\(l\times2^k\ler\),即\(k=\left\lfloor\log_2\frac{r}{l}\right\rfloor\)。所以最大的集合大小就是\(k+1\)。然后考虑最大的集合中最小值可能不同,我假设......
  • 实现无感刷新Token技术:.Net Web API与axios的完美结合
    这是我之前分享在星球里面的课程,下面整理下,分享下这个无感刷新Token技术方案。我们都知道Token是有设置有效期的,为了安全都不会设置过长的有效期;但设置有效期太短,又会导致经常需要重新登录。这就需要无感刷新Token的方案,来提升用户体验。目前比较常用的方案是:双token机制。1......
  • STM32CubeMX:使用DAC输出正弦波的三种方法(while,定时器中断,DMA)
    1.DAC概念简介:DAC的工作原理是根据数字输入信号的数值,生成相应的模拟输出电压或电流。它通常接收一个二进制数字输入,该数字代表了一个特定的数值范围。DAC通过将这个数字值转换为模拟信号的电压或电流水平来输出。(功能与ADC相反)2.正弦波输出方式1:简单粗暴while循环输出Cub......
  • 一道题把我气笑了:) 力扣.53 最大子数组和 leetcode maximum-subarray
    数组系列力扣数据结构之数组-00-概览力扣.53最大子数组和maximum-subarray力扣.128最长连续系列longest-consecutive-sequence力扣.1两数之和N种解法two-sum力扣.167两数之和IItwo-sum-ii力扣.170两数之和IIItwo-sum-iii力扣.653两数之和IVtwo-sum-IV力......