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

DMA STM32H7 Domains and space distrubution

DMA这个数据搬运工,对谁都好,任劳任怨,接受雇主设备的数据搬运业务。每天都忙碌着!哈哈哈。

1. DMA 不可能单独工作,必须接收其他雇主的业务,所以数据搬运业务的参与者是DMA本身和业务需求发起者。

2. 一般大体的工作流程是:只要代码配置负责:2.1.给DAM提供时钟源,2.2.配置DMA工作模式和中断,2.3. 需求方设备(比如UART)向DMA发送开始搬运数据的请求信号,就可以开始搬运数据了。2.4 期间UART与DMA的同步方式,通过中断ISR互相关联嵌套。

3. DMA有时候也会遇到问题:比如STM32H743IIT6的BDMA负责LPUART1的发送数据搬运工作。应该会出现 TC 传输错误中断,原因是这个数据搬运工DMA在搬运数据时发现收发地之间没有总线互联,因此无路可走,那就巧妇难为无米之炊了。

所以,当系统复杂起来了,比如从STM32F407到STM32H743的SoC复杂度跨越,需要考虑内部数据总线、指令总线、运行频率等交通主干道的核心配置,达到满足应用目的。

下面附带上图 

下面是一个已经解决的案例:

AMR Keil-MDK 上重新适配了分散散加加载载文文件:

LR_IROM1 0x08000000 0x00200000 {         ; 主Flash区域(根据实际芯片型号调整)ER_IROM1 0x08000000 0x00200000 {       ; 加载地址 = 执行地址*.o (RESET, +First)                   ; 中断向量表*(InRoot$$Sections)                   ; 根段.ANY (+RO)                            ; 所有只读数据(代码、常量)};---------------------------------------------------------; RAM Regions (RM0433-STM32H743-page131/3353-2025年5月27日);---------------------------------------------------------; 128KB DTCM (0x20000000 - 0x2001FFFF)RW_IRAM1 0x20000000 0x00020000 {        ; 最高速度RAM,用于中断/实时数据.ANY (+RW +ZI)                        ; 默认分配未指定区域变量}; 512KB AXI SRAM (0x24000000 - 0x2407FFFF)RW_IRAM2 0x24000000 0x00080000 {        ; 带缓存的大容量RAM*(.RAM_D1)                            ; 手动指定分配到此区域的变量(DMA缓冲区等)}; SRAM1-3 (0x30000000 - 0x30047FFF); SRAM1: 128KB (0x30000000 - 0x3001FFFF); SRAM2: 128KB (0x30020000 - 0x3003FFFF); SRAM3: 32KB  (0x30040000 - 0x30047FFF)RW_IRAM3 0x30000000 0x00048000 {        ; 总288KB,D2域SRAM*(.RAM_D2)                            ; 外设相关数据}; 64KB SRAM4 (0x38000000 - 0x3800FFFF)RW_IRAM4 0x38000000 0x00010000 {        ; D3域低功耗RAM*(.RAM_D3)                            ; 低功耗模式保留数据}; 4KB Backup SRAM (0x38800000 - 0x38800FFF)RW_IRAM5 0x38800000 0x00001000 {        ; 备份域RAM(Vbat供电)*(.RAM_Backup)                        ; RTC/备份寄存器相关数据}
};added by maple. for BDMA and LPUART1 .2025年5月27日 

http://www.lryc.cn/news/2387463.html

相关文章:

  • 洪水危险性评价与风险防控全攻略:从HEC-RAS数值模拟到ArcGIS水文分析,一键式自动化工具实战,助力防洪减灾与应急管理
  • Gemini Pro 2.5 输出
  • SQL Server 和 MySQL 对比
  • Leetcode 3269. 构建两个递增数组
  • 三轴云台之积分分离PID控制算法篇
  • 【Elasticsearch】scripted_upsert
  • uv - 一个现代化的项目+环境管理工具
  • 经典密码学和现代密码学的结构及其主要区别(2)维吉尼亚密码—附py代码
  • Elasticsearch 节点角色详解及协调节点请求策略
  • 视频逐帧提取图片的工具
  • 数据结构第1章编程基础 (竟成)
  • 互联网大厂Java求职面试:AI大模型与云原生架构融合中的挑战
  • msql的乐观锁和幂等性问题解决方案
  • Python 实现桶排序详解
  • 大模型(5)——编码器(Encoder)、解码器(Decoder)
  • Web3怎么本地测试连接以太坊?
  • Vue-02 (使用不同的 Vue CLI 插件)
  • 理解vue-cli 中进行构建优化
  • 理解计算机系统_线程(九):线程安全问题
  • vue3基本类型和对象类型的响应式数据
  • 3.8.4 利用RDD实现分组排行榜
  • python web flask专题-Flask入门指南:从安装到核心功能详解
  • C语言中的“类框架”工具
  • 【HW系列】—web组件漏洞(Strtus2和Apache Log4j2)
  • 第六十八篇 从“超市收银系统崩溃”看JVM性能监控与故障定位实战
  • Debian 11 之使用hostapd与dnsmasq进行AP设置
  • 有铜半孔的设计规范与材料创新
  • 机器学习知识体系:从“找规律”到“做决策”的全过程解析
  • STM32之FreeRTOS移植(重点)
  • 做好测试用例设计工作的关键是什么?