DMA裸板驱动使用说明
1 DMA简要说明1.1 GDP812的dmac812 dmac在4个subsys中集成分别是sysctrl、safety、mem、audiodmac的apb slv memmap要根据各subsys 在SOC分配的地址空间决定dmac的axi master能访问到的memmap 同样的需要去根据各subsys访问能力子系统内L2 noc matrix和mainnoc matrix决定dmac 本身是支持44bit地址全SOC访问1.2 DMA-330的使用DMA-330采用MicroCode的方式实现DMA的独立控制可以理解为该DMA Controller为ARM的一个Coprocessor。按照MicroCode的指令集规则编写指令存放到指定地址的内存中ARM处理器只需要告诉DMA Controller汇编指令的起始地址DMA Controller就可以执行内存中存放的汇编指令实现独立于处理器的数据搬运工作。2 裸驱代码使用介绍目前是第一版裸驱代码在rk-3588开发板平台验证过Mem2MemMem2Uart_Tx和Uart_Rx2Mem三种情况在GDP812平台仅验证过Mem2Mem的情形。若实际调试过程中遇到DMA相关问题请及时沟通。该裸驱代码共有3个文件dma-hw.h 用于存放和硬件相关的配置信息dma-330.h 与硬件无关的驱动代码头文件dma-330.c 与硬件无关的驱动代码文件从裸驱代码的使用角度有如下需要修改的几个地方2.1 硬件相关的配置信息/** * dma-hw.h */ /* DMAC寄存器的Base Address对于不同的Subsystem这个值是不同的 */ #define PL330_BASE_ADDR DMA0_NS_BASE_ADDR /* MicroCode指令放置的内存地址 */ #define MCODE_CPU_ADDR 0x08001000 /* cpu access desc addr */ #define MCODE_BUS_ADDR 0x08001000 /* bus access desc addr */ /* 数据搬运的源地址和目的地址 */ #define MEM_SRC_ADDR 0x80000000 #define MEM_DST_ADDR 0x800100002.2 SoftReset和Clock配置需要在测试代码中自行实现软复位和时钟的配置如下示例给出了sysctrl DMA的软复位和时钟配置static void sys_init(void) { /* sysctrl dma */ writel(0x1, (void*)0x49800104); writel(0x1, (void*)0x49800100); }2.3 配置结构体的填充需要在测试代码中自行实现配置结构体的填充2.3.1 配置结构体的成员说明/* 传输配置结构体 */ struct pl330_trans_cfg { unsigned int src_phy_addr; unsigned int dst_phy_addr; enum __tfr_type tfr_type; int trans_len; unsigned char privileged; unsigned char nonsecure; enum burst_cfg user_cfg_bst; unsigned int tfr_data_width; unsigned int tfr_data_len; unsigned int peri_num; };src_phy_addr 数据传输的源地址dst_phy_addr 数据传输的目的地址tfr_type 数据传输的类型有以下三种可选类型DMAC_TFR_TYPE_M2M适用于Mem to Mem的数据传输Src和Dst地址都递增的情形DMAC_TFR_TYPE_M2P 适用于Mem to Peri的数据传输Src地址递增Dst地址固定的情形DMAC_TFR_TYPE_P2M 适用于Peri to Mem的数据传输Src地址固定Dst地址递增的情形trans_len 数据传输的总长度privileged AXI总线特权访问配置位0非特权访问AXI总线1特权访问用于高权限操作nonsecure AXI总线安全访问配置位0安全访问用于安全模式下的数据访问1非安全访问user_cfg_bst 目前只支持两种配置选择USE_AXI_MAX_CAP 以硬件配置的AXI总线位宽进行数据传输Mem to Mem的数据传输时使用USE_DEFINED 以用户自定义的burst_size和burst_len进行数据传输M2P和P2M时使用tfr_data_width用户自定义的burst_sizetfr_data_len 用户自定义的burst_lenperi_num Mem2Mem时无效用于配置DMAC与硬件握手时的握手编号2.3.2 配置结构体的配置示例针对配置结构体的成员说明以Mem2PeriUART_TX为例提供如下示例static void transfer_cfg(struct pl330_trans_cfg *cfg) { cfg-dst_phy_addr MEM_SRC_ADDR; cfg-src_phy_addr MEM_DST_ADDR; cfg-tfr_type DMAC_TFR_TYPE_M2P; cfg-trans_len 8; /* 数据传输的总长度 8-byte */ cfg-privileged 0; /* 非特权访问 */ cfg-nonsecure 1; /* 非安全访问 */ /** * 以Mem2Uart_Tx为例 * 一个burst内Memory向UartTx buffer发送1-Byte数据并等待Uart做出回应后再进行下一次数据发送。 * * 1 burst的数据量大小 burst_size * burst_len因此tfr_data_width和tfr_data_len都为1。 */ cfg-user_cfg_bst USE_DEFINED; cfg-tfr_data_width 1; /* 用户自定义的burst_size */ cfg-tfr_data_len 1; /* 用户自定义的burst_len */ cfg-peri_num UART_TX; /* UART2_TX的设备编号 */ }3 GDP-812与DMA相关的配置3.1 DMAC Base Address如下图所示有些Subsystem中用于DMA IP配置的基地址相对于Memory Map提供的Base Address存在4K的偏移。3.1.1 SysCtrlMemory Map中的地址dmac apb_slv_NS0x4a002000dmac apb_slv_S 0x4a005000实际使用的地址DAMC_BASE_ADDR(ns) 0x4a003000即dmac apb_slv_NS(0x4a002000) 0x1000DMAC_BASE_ADDR(s) 0x4a006000即dmac apb_slv_S(0x4a005000) 0x10003.1.2 safetyMemory Map中的地址Safety DMA sec apb0x4a800000Safety DMA apb 0x4ac00000实际使用的地址是否偏移0x1000需要IP Owner确认DMAC_BASE_ADDR(sec apb) : 0x4a801000DMAC_BASE_ADDR(non-sec) : 0x4ac010003.1.3 MemoryMemory Map中的地址noc2damc_apb_slv(ns) 0x52628000noc2dmac_sec_apb_slv0x52638000实际使用的地址是否偏移0x1000需要IP Owner确认DMAC_BASE_ADDR(non-sec) : 0x52629000DMAC_BASE_ADDR(sec) : 0x526390003.1.4 AudioMemory Map中的地址DMAC_0audio_noc2dmac0_s_apb_slv 0x5cc50000audio_noc2dmac0_ns_apb_slv0x5cc60000DMAC_1audio_noc2dmac1_ns_apb_slv0x5cd10000audio_noc2dmac0_s_apb_slv 0x5cd20000实际使用的地址是否偏移0x1000需要IP Owner确认DMAC_0DMAC_BASE_ADDR(sec) 0x5cc51000DMAC_BASE_ADDR(ns) 0x5cc61000DMAC_1DMAC_BASE_ADDR(ns) 0x5cd11000DMAC_BASE_ADDR(sec) 0x5cd210003.2 Periphal Num根据各Subsystem的Design Spec的描述在dma-hw.h中列出各Subsystem的DMAC握手信号的Peripheral Number不保证正确请各IP Owner自行确认如下3.2.1 SysCtrl/** * Sysctrl Subsystem DMA-Peripheral Handshake */ enum { SYSCTRL_QSPI_FLASH_TX, SYSCTRL_QSPI_FLASH_RX, SYSCTRL_USI0_TX, SYSCTRL_USI1_TX, SYSCTRL_USI2_TX, SYSCTRL_USI3_TX, SYSCTRL_USI4_TX, SYSCTRL_USI5_TX, SYSCTRL_USI6_TX, SYSCTRL_USI7_TX, SYSCTRL_USI0_RX, SYSCTRL_USI1_RX, SYSCTRL_USI2_RX, SYSCTRL_USI3_RX, SYSCTRL_USI4_RX, SYSCTRL_USI5_RX, SYSCTRL_USI6_RX, SYSCTRL_USI7_RX, };3.2.2 safety3.2.3 Memory3.2.4 Audio3.3 软复位和Clock配置3.3.1 SysCtrl0x49800100 0x10x49800104 0x13.3.2 safety软复位和时钟配置需要IP Owner确认3.3.3 Memory软复位和时钟配置需要IP Owner确认3.3.4 Audio软复位和时钟配置需要IP Owner确认DMAC_0DMAC_1

相关新闻

丹摩平台 | 如何在丹摩平台创建一个自己的GPU云实例

丹摩平台 | 如何在丹摩平台创建一个自己的GPU云实例

丹摩平台介绍与说明 丹摩平台,特别是其丹摩智算(DAMODEL)平台,是一个专为AI打造的智算云平台。以下是对丹摩平台的详细介绍及其主要功能的概述: 1、平台介绍 丹摩智算平台致力于提供丰富的算力资源与基础设施&#xff…

2026/7/23 18:41:37 阅读更多 →
揭秘 GitHub 最火的开源 Skills 仓库,夯爆了!30 秒带你用上,让 AI 效率起飞

揭秘 GitHub 最火的开源 Skills 仓库,夯爆了!30 秒带你用上,让 AI 效率起飞

大家好,我是程序员鱼皮。 如今的 GitHub 真是太魔幻了,有个 AI 相关的项目,几乎全是 Markdown 文本文件,但是不到半年就拿到了 18 万 Star! 这个仓库叫 skills,作者 Matt Pocock 是前端 TypeScript 领域很…

2026/7/23 18:41:37 阅读更多 →
非接触式激光雪深监测站,气象积雪观测新方案

非接触式激光雪深监测站,气象积雪观测新方案

积雪观测是气象生.态监测、冰雪灾害预警、交通与农林安全生产的重要基础工作。传统积雪观测普遍采用雪尺、测杆人工接触式测量,不仅观测效率低、人力投入大,且低温暴雪天气下人工作业风险高,同时容易因触碰积雪造成表层扰动,产生测…

2026/7/23 18:41:37 阅读更多 →

最新新闻

【Rust自学】10.5. 生命周期 Pt.1:生命周期的定义与意义、借用检查器与泛型生命周期

【Rust自学】10.5. 生命周期 Pt.1:生命周期的定义与意义、借用检查器与泛型生命周期

10.5 生命周期 Pt.1:生命周期的定义与意义、借用检查器与泛型生命周期 10.5.1. 什么是生命周期 Rust 中的每个引用都有自己的生命周期。生命周期的作用是让引用保持有效;换句话说,它就是引用保持有效的作用域。 在大多数情况下&#xff0c…

2026/7/23 18:51:42 阅读更多 →
OpenClaw框架中的Self-Improving技能:AI Agent自主进化技术解析

OpenClaw框架中的Self-Improving技能:AI Agent自主进化技术解析

1. OpenClaw与Self-Improving技能概述OpenClaw作为新一代AI Agent开发框架,其核心价值在于提供了模块化的技能(Skill)体系。Self-Improving正是其中最引人注目的高级技能之一,它使AI Agent具备了持续进化的能力。不同于传统AI模型的静态表现,…

2026/7/23 18:51:42 阅读更多 →
FlexRay FIFO与消息处理机制深度解析:从双缓冲到实战配置

FlexRay FIFO与消息处理机制深度解析:从双缓冲到实战配置

1. 项目概述:为什么需要深入理解FlexRay的FIFO与消息处理? 在汽车电子和工业控制领域,当工程师们谈论高可靠性的实时通信时,FlexRay协议是一个绕不开的名字。它被设计用来满足下一代汽车网络对带宽、确定性和容错性的苛刻要求&…

2026/7/23 18:51:42 阅读更多 →
【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子

【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子

10.6 生命周期 Pt.2:生命周期的语法与例子 10.6.1. 生命周期标注语法 标注生命周期并不会改变引用存活多久。如果某个函数指定了泛型生命周期参数,那么它可以接收带有任何生命周期的引用。生命周期标注主要用于描述多个引用的生命周期之间的关系&#…

2026/7/23 18:51:42 阅读更多 →
手把手教你搞定研0第一次组会

手把手教你搞定研0第一次组会

家人们,研0第一次组会是不是紧张到抠手?怕文献读不对,PPT做不好,一开口就挨批?我当时也是。后来回头想,组会其实没那么可怕,只是因为没人提前告诉我该准备什么。今天就手把手教你搞定研0第一次组…

2026/7/23 18:51:42 阅读更多 →
做照明工程前一定要搞懂的三个实际问题

做照明工程前一定要搞懂的三个实际问题

很多业主在启动照明相关项目前,总会被几个共性问题卡住:不知道项目周期怎么排,预算摸不准,改造成本能不能赚回来也没谱。这些问题没有统一答案,得结合项目实际情况拆解开来看。很多人问泛光照明工程从设计到施工要多久…

2026/7/23 18:50:41 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻