STM32/GD32的以太网DMA描述符

继续梳理以太网的DMA描述符。

以太网DAM描述符的结构

有两种结构,链式结构和环形结构。

常用的是链式结构。

标准库中,关于DMA描述符的数据结构

以gd32f4xx_enet.c为例。

先说发送描述符。

系统分配了5个发送描述符。每个描述符对应的缓冲区大小为1524字节。

#define ENET_TXBUF_NUM                   5U                                     /*!< ethernet Tx DMA descriptor number */#define ENET_MAX_FRAME_SIZE                       1524U                                         /*!< header + frame_extra + payload + CRC */    #define ENET_TXBUF_SIZE                  ENET_MAX_FRAME_SIZE                    /*!< ethernet transmit buffer size */enet_descriptors_struct  txdesc_tab[ENET_TXBUF_NUM];        /*!< ENET TxDMA descriptor */uint8_t tx_buff[ENET_TXBUF_NUM][ENET_TXBUF_SIZE];           /*!< ENET transmit buffer */

注意,这里有一个5个元素的结构体数组:txdesc_tab,这就是发送描述符表;还有一个2维数组tx_buff,是5*1524个字节,这就是发送缓冲区;后面要说怎么用。

描述符初始化

调用以下函数初始化发送DMA描述符为链式结构:

    enet_descriptors_chain_init(ENET_DMA_TX);

初始化完成之后的效果:(借用网上的图)

这张图也挺好:

初始化后内存中的数据和DMA寄存器

5个描述符的地址分别为0x20000134、0x20000144...0x20000174。

并且,第一个描述符的next_desc_addr指向第二个描述符。

同样的,第二个的next指向第三个。。。最后一个的next指向第一个:

再看缓冲区的地址:

分别为0x20001F48、0x2000253C、0x20002B30、0x20003124、0x20003718。

描述符中的buffer1_addr分别指向各自的缓冲区:

DMA组的发送描述符表寄存器DMA_TDTADDR中保存的是第1个描述符的地址0x20000134

使能ENET后,当前的发送和接收描述符级缓冲区地址也已更新(只读寄存器):

验证运行过程中的状态

测试条件及方法:

查看当前的寄存器。

当前接收描述符地址:0x200000F4(描述符1);

当前接收缓冲区地址:0x20000778(缓冲区1);

看看缓冲区里面的数据:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/785137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四川古力未来科技抖音小店:把握电商新风口,前景无限广阔

在数字化浪潮席卷全球的今天&#xff0c;电商行业以其独特的魅力和无限潜力&#xff0c;成为了众多创业者和投资者关注的焦点。四川古力未来科技抖音小店&#xff0c;正是站在这一风口浪尖上的新兴力量&#xff0c;其前景之广阔&#xff0c;令人瞩目。 抖音&#xff0c;作为一款…

mac上添加路由配置

前言 特殊场景下&#xff0c;需要添加网络的路由 操作 在 Mac 上,可以使用 route 命令来添加静态路由。命令格式如下: sudo route add -net [目标网络] -netmask [子网掩码] -interface [网络接口] -gateway [网关IP]例如在linux服务器上 添加 路由配置 ip route add 10.2…

在Debian 11上安装GCC

GCC&#xff08;GNU Compiler Collection&#xff09;是一个功能强大的工具集合&#xff0c;可用于将不同编程语言的源代码编译成可执行文件或库。它支持多种编程语言&#xff0c;包括C、C、Java、Objective-C、Go、Fortran、Ada等。在Debian 11上安装GCC非常简单&#xff0c;以…

echarts 曲线,自定义显示的平均值,与在坐标中的位置

series: [{name:工单完成率,type:line,data:g,itemStyle : { normal: {label : {show: true}}},markPoint: {label:{position: "insideTop",distance: 7,formatter: function (data){return data.value%;}},data: [{type: max, name: 最大值},{type: min, name: 最小…

每日一题 --- 反转字符串 II[力扣][Go]

反转字符串 II 题目&#xff1a;541. 反转字符串 II 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于…

【AI+音乐】利用Suno A​I、Suno BI快速制作音乐MV

上周写过一篇 【人工智能】Suno AI让普通人也可以创作音乐 &#xff0c; Suno AI可以让我们普通人可以快速创造一首属于自己的音乐。 普通人是不是有制作MV的梦想&#xff0c; 这里介绍一个网站 Suno BI 。 官方地址&#xff1a; https://app.suno.bi/song 单击可创建具…

WIN10系统下误删除了用户重启无法登录

WIN10系统下误删除了用户重启无法登录 不小心在控制面板的用户组里面删除了当前的用户&#xff0c;在电脑重启后无论怎么输入密码都提示不正确不能登录。 在选择登录的界面同时点击 shift 和重启按钮&#xff1b;在进入的界面选择“疑难问题”&#xff1b;选择进入安全模式&…

java学习2

ArratList 集合入门 ArratList 类属于java.util包里面的使用前需要在代码开头添加一下代码 import java.util.ArrayList; 1.集合的长度是可变的&#xff0c;不像数组一样是固定的 2.泛型&#xff1a;限定集合中存储数据的类型 3.集合不能直接存基本数据类型&#xff0c;如…

发票是扫码验真好,还是OCR后进行验真好?

随着科技的进步&#xff0c;电子发票的普及使得发票的验真方式也在不断演进。目前&#xff0c;我们常见的发票验真方式主要有两种&#xff1a;一种是扫描发票上的二维码进行验真&#xff0c;另一种是通过OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别…

国内ip怎么来回切换:操作指南与注意事项

在数字化时代&#xff0c;互联网已经成为我们日常生活、学习和工作中不可或缺的一部分。然而&#xff0c;随着网络应用的不断深化&#xff0c;用户对于网络环境的稳定性和安全性要求也越来越高。其中&#xff0c;IP地址作为网络中的关键标识&#xff0c;其切换与管理显得尤为重…

3.变量和常量【go】

在Go中&#xff0c;你可以使用var关键字来声明变量&#xff0c;也可以使用短变量声明语法&#xff08;:&#xff09;来声明和初始化变量。常量则使用const关键字来声明&#xff0c;并且必须在声明时赋值。 package mainimport "fmt"func main() {// 使用var声明变量…

Vue3中如何挂载全局属性

问题描述 Vue3想挂载全局属性&#xff0c;发现采用Vue2的写法已经不行。 我们在Vue2 挂载全局属性一般是Vue.prototype.xxx xxx 去挂载&#xff0c;但是Vue3&#xff0c;已经不支持这种写法&#xff1a; import Vue from vue Vue.prototype.xxx xxx Vue3写法&#xff1a; 使…

RDGCN阅读笔记

Relation-Aware Entity Alignment for Heterogeneous Knowledge Graphs 面向异质知识图谱的关系感知实体对齐 Abstract 实体对齐是从不同的知识图(KGs)中链接具有相同真实世界实体的任务&#xff0c;最近被基于嵌入的方法所主导。这种方法通过学习KG表示来工作&#xff0c;以…

基于Spring Boot 3 + Spring Security6 + JWT + Redis实现接口资源鉴权

紧接上一篇文章&#xff0c;基于Spring Boot 3 Spring Security6 JWT Redis实现接口资源鉴权 系列文章指路&#x1f449; 系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类 项目源码&#x1f449; /shijizhe/boot-test 文章目录 1. 修改 UserDetailsServic…

C++进阶编程 --- 2.初始STL

文章目录 第二章&#xff1a;2.STL2.1 STL诞生2.2 STL基本概念2.3 STL六大组件2.4 STL容器、算法、迭代器2.5 容器算法迭代器2.5.1 vector存放内置数据类型2.5.2 vector存放自定义数据类型2.5.3 vector容器嵌套容器 第二章&#xff1a; 2.STL 2.1 STL诞生 对了建立数据结构和…

使用hexo框架快速在github上搭建静态博客

今天来说一下使用hexo框架搭建静态博客&#xff0c;玩玩还不错。 我的操作系统 文章目录 一、部署到本地二、新建博客三、更换主题四、部署到github五、其他 一、部署到本地 首先下载好nodejs和git工具&#xff0c;建议直接去清华镜像源下载 node.js git 这中间环境变量的配置…

【精品方案】智慧金融大数据分析平台总体架构方案

以下是部分PPT内容&#xff0c;请您参阅。如需下载完整PPTX文件&#xff0c;请前往星球获取&#xff1a; 1.实现数据共享 通过数据平台实现数据集中&#xff0c;确保金融集团各级部门均可在保证数据隐私和安全的前提下使用数据&#xff0c;充分发挥数据作为企业重要资产的业务价…

linux期末知识点总结

Linux操作系统不仅是技术爱好者的热门选择&#xff0c;也是许多IT专业人士必备的技能。随着期末的临近&#xff0c;了解并掌握Linux的关键知识点对于顺利通过考试至关重要。本文将对Linux操作系统的主要知识点进行总结&#xff0c;帮助你巩固学习成果&#xff0c;顺利应对期末考…

milvus knowhere源码编译测试

简介 Knowhere 是 Milvus 的核心向量执行引擎&#xff0c;集成了Faiss、Hnswlib和Annoy等多个向量相似度搜索库。 编译环境 操作系统: Ubuntu 22.04.4 gcc/g:11.4.0 cmake: 3.27.7 安装依赖 apt install build-essential libopenblas-dev libaio-dev python3-dev python…