在DM355平台上如何在应用层直接控制GPIO----操作arm的寄存器

本文介绍了一个在DM355平台上通过编写脚本来控制GPIO并产生PWM信号的方法。具体步骤包括加载内核模块、创建设备节点以及设置PWM周期等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Debug 硬件的过程中,如果为了节省时间,提高效率,通常使用一些script,可以起到事半功倍的效果,譬如,一些GPIO的控制问题,包括pwm的设定,都可以采用这种方法,下面的一个script是在dm355平台上如果控制GPIO和如何产生PWM信号的方法。

 

1.产生PWM信号的方法

#!/bin/sh

insmod areg.ko
mknod /dev/areg c 250 250

#setting the pwm0 attribute  clk=24M  Peroid=0xC8/0x3E7
./areg -w /dev/areg 0x01c22008 2
./areg -w /dev/areg 0x01c22014 0x3E7
./areg -w /dev/areg 0x01c22018 0xC8
./areg -w /dev/areg 0x01c22010 0
./areg -w /dev/areg 0x01c22004 1
./areg -w /dev/areg 0x01c22008 2
./areg -w /dev/areg 0x01c2200C 1

2.利用GPIO产生一个Trig信号

./areg -w /dev/areg 0x01c67010 0xbff

#setting the attribute for the output
./areg -w /dev/areg 0x01c6701c 0x400

#set the gpio 10 status for low

./areg -w /dev/areg 0x01c22018 $1

#$1 control the pwm period
./areg -w /dev/areg 0x01c67018 0x400

#set the gpio status 10 for high

<think>我们正在讨论STM32F407ZG微控制器的多层AHB总线矩阵架构和工作原理。根据用户提供的引用[^1],我们可以参考UM1725文档(STM32F4 HAL和底层驱动描述)来获取相关信息。虽然引用链接指向的是该文档,但请注意,实际总线架构的详细描述通常在芯片的参考手册中。不过,UM1725文档中可能包含对总线架构的概述。 由于用户特别提到了AHB总线矩阵,我们将重点放在STM32F407ZG的多层AHB总线矩阵上。STM32F407ZG采用Cortex-M4内核,其内部总线结构基于AMBA(Advanced Microcontroller Bus Architecture)规范,特别是AHB(Advanced High-performance Bus)和APB(Advanced Peripheral Bus)。 ### 多层AHB总线矩阵架构 STM32F407ZG的多层AHB总线矩阵是一个多主多从的互连结构,允许多个主设备同时访问不同的从设备(只要没有访问冲突)。这种架构提高了系统的并行性和整体性能。 #### 主要组件 1. **主设备(Masters)**:能够发起总线传输的设备。在STM32F407ZG中,主设备包括: - Cortex-M4内核(通过I-bus, D-bus, S-bus) - DMA1和DMA2控制- 以太网MAC(当使用DMA时) - USB OTG HS(当使用DMA时) 2. **从设备(Slaves)**:响应主设备访问的设备。包括: - 内部Flash存储器(通过Flash接口) - 内部SRAM(包括112KB的SRAM1和16KB的SRAM2) - AHB到APB桥(连接APB外设) - FSMC(灵活的静态存储器控制器)接口 - 其他AHB外设(如CRC、OTG FS等) #### 总线矩阵结构 总线矩阵由多层AHB组成,每一层都可以独立地连接一个主设备到一个从设备。这样,多个主设备可以同时访问不同的从设备,从而减少总线竞争,提高系统吞吐量。 例如,在STM32F407ZG中,总线矩阵通常有8个输入(来自主设备)和7个输出(到从设备)。每个输入(主设备)可以独立地访问任何输出(从设备),只要该输出没有被其他主设备占用。 #### 工作原理 1. **仲裁机制**:当多个主设备同时请求访问同一个从设备时,总线矩阵中的仲裁器会根据优先级决定哪个主设备获得访问权。优先级通常是固定的,例如Cortex-M4内核的优先级最高,其次是DMA控制器等。 2. **数据传输**:主设备发起传输(读或写),指定目标地址。总线矩阵根据地址将传输路由到相应的从设备。从设备响应后,数据在主设备和从设备之间传输。 3. **并行操作**:由于是多层结构,不同主设备同时访问不同从设备时,可以并行进行。例如: - Cortex-M4内核从Flash读取指令(通过I-bus)。 - DMA1将数据从外设传输到SRAM1(通过D-bus)。 - 这两个操作可以同时进行,因为它们使用不同的主设备端口和不同的从设备端口。 ### 总线矩阵框图(简化) 以下是STM32F407ZG总线矩阵的简化框图: ``` 主设备1(如Cortex-M4 I-bus)----+ | 主设备2(如Cortex-M4 D-bus)----+--> 多层总线矩阵 ---> 从设备1(如Flash) | | 主设备3(如DMA1)---------------+ +--> 从设备2(如SRAM1) | | 主设备4(如DMA2)---------------+ +--> ... ``` ### 性能优势 多层AHB总线矩阵的主要优势在于其并行处理能力。例如,当CPU在Flash中取指令的同时,DMA可以在SRAM中传输数据,而以太网MAC可以通过另一层总线访问另一个SRAM区域。这种并行性大大提高了处理效率。 ### 注意事项 - **访问冲突**:当多个主设备试图同时访问同一个从设备时,仲裁器会根据优先级决定访问顺序,这可能导致低优先级主设备的延迟。 - **内存映射**:每个从设备都有特定的地址范围,主设备通过地址来选择目标从设备。 ### 引用说明 上述信息参考了STM32F4系列参考手册(RM0090)[^2]以及用户提供的UM1725文档[^1]。关于总线矩阵的详细描述,请参考这些文档。 [^1]: UM1725: Description of STM32F4 HAL and low-layer drivers. https://www.st.com/content/ccc/resource/technical/document/user_manual/2f/71/ba/b8/75/54/47/cf/DM00105879.pdf/files/DM00105879.pdf/jcr:content/translations/en.DM00105879.pdf [^2]: STM32F407xx参考手册(RM0090). https://www.st.com/resource/en/reference_manual/dm00031020-stm32f405-415-stm32f407-417-stm32f427-437-and-stm32f429-439-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf §§相关问题§§ 1. STM32F407ZG的总线矩阵支持多少个主设备和从设备? 2. 如何配置DMA以利用多层AHB总线矩阵提高数据传输效率? 3. 在STM32F407ZG中,当多个主设备同时访问同一个从设备时,仲裁优先级是如何设定的? 4. 总线矩阵中的多层AHB与APB总线之间是如何连接的?</think>### STM32F407ZG多层AHB总线矩阵架构与工作原理 #### **1. 总线矩阵架构概述** STM32F407ZG采用**多层AHB总线矩阵**(Multi-layer AHB Bus Matrix)作为核心互连结构,基于**AMBA 3.0规范**(Advanced Microcontroller Bus Architecture)。其核心设计是通过**并行路径**解决多主设备访问冲突,提升系统吞吐量。架构包含: - **8个主设备端口**: - Cortex-M4内核(I-bus, D-bus, S-bus) - DMA1控制- DMA2控制- 以太网MAC(ETH) - USB OTG HS - **7个从设备端口**: - Flash接口(指令/数据访问) - SRAM1(112KB) - SRAM2(16KB) - AHB1外设桥(连接GPIO、定时器等) - AHB2外设桥(连接摄像头接口、加密模块等) - FSMC(外部存储器控制器) - APB桥(连接低速外设) #### **2. 关键工作原理** - **并行访问机制**: - 当不同主设备访问不同从设备时(如CPU读Flash + DMA写SRAM),总线矩阵启用**独立物理通道**,实现零冲突并行传输。 - 例:$$ \text{Throughput} = \sum_{i=1}^{n} \text{Bandwidth}_i \quad (n=\text{并行路径数}) $$ - **仲裁优先级**: - 固定优先级:Cortex-M4内核 > DMA > 外设主设备。 - 当多主设备竞争同一从设备(如同时访问SRAM),仲裁器按优先级分配访问权,低优先级请求被阻塞。 - **地址映射路由**: - 总线矩阵根据**32位地址**自动路由访问请求: - `0x0800 0000 – 0x080F FFFF` → Flash接口 - `0x2000 0000 – 0x2001 BFFF` → SRAM1/SRAM2 - `0x4000 0000 – 0x4002 3FFF` → AHB1外设 - **带宽优化**: - 主端口支持**突发传输**(Burst Transfer),单次操作传输多个数据单元。 - 总线宽度:主设备到矩阵为**32位**,矩阵到存储器为**64位**(提升Flash访问效率)。 #### **3. 性能优势** - **零等待访问**:CPU指令预取通过I-bus独立访问Flash,数据操作通过D-bus访问SRAM,互不阻塞。 - **外设协作**:DMA与CPU并行工作(如ADC采样数据通过DMA存入SRAM,同时CPU处理上一批数据)。 - **延迟统计**: | 主设备 | 访问SRAM延迟 | 访问Flash延迟 | |----------------|--------------|---------------| | Cortex-M4 (I-bus) | 1周期 | 预取缓冲优化 | | DMA | 2周期 | 3周期 | #### **4. 典型应用场景** - **实时信号处理**:Cortex-M4通过D-bus读取SRAM中的传感器数据,同时DMA将新数据写入SRAM另一区域。 - **高速通信**:以太网MAC通过独立端口直接访问SRAM,避免CPU介入。 - **外设扩展**:FSMC连接外部SDRAM,总线矩阵将CPU/DMA访问路由至FSMC端口。 > 参考架构图:[STM32F407 Block Diagram](https://www.st.com/resource/en/datasheet/stm32f407zg.pdf#page=3) [^1] #### **5. 配置注意事项** - **时钟同步**:AHB总线频率最高168MHz(需`HCLK`分频配置)。 - **仲裁策略**:默认固定优先级,可通过`RCC`寄存器调整DMA优先级(需参考参考手册)。 - **内存保护**:使用MPU(Memory Protection Unit)隔离关键内存区域。 > 详细寄存器定义见参考手册:[RM0090](https://www.st.com/resource/en/reference_manual/dm00031020-stm32f405-415-stm32f407-417-stm32f427-437-and-stm32f429-439-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf) [^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值