admin 管理员组

文章数量: 1184232

一、硬件介绍

1.1 按键硬件结构

  • 按键数量与功能:共 3 个按键(两红一黄),功能分工明确
    • 左侧(on/off):低功耗控制按钮
    • 中间(reset):系统复位按钮
    • 右侧(KEY0):用户独立控制的试验按键<本次实验主要使用KEY0>
  • 电平逻辑:开关断开时,引脚为高电平;开关按下时,引脚为低电平(关键逻辑,代码设计核心依据)

1.2 核心引脚与手册参考

硬件模块 参考文档 核心章节 说明
引脚复用 《IMX6ULL 参考手册.pdf》 Chapter 32(IOMUX Controller) 配置 GPIO 功能复用
GPIO 控制 《IMX6ULL 参考手册.pdf》 Chapter 28(General Purpose Input/Output) GPIO 方向、数据读取
时钟控制 《IMX6ULL 参考手册.pdf》 Chapter 18(Clock Controller Module) 使能 GPIO 时钟
中断控制器 《ARM Generic Interrupt Controller V2.0.pdf》 第 23 页 GIC 中断分发与 CPU 接口
内核控制 《Cortex-A7 Technical Reference Manual.pdf》 Chapter 4(System Control) 协处理器 CP15 配置

二、轮询方式按键实现

2.1 轮询方式原理

通过循环读取 GPIO 引脚电平判断按键状态,适用于业务逻辑简单、无实时性要求的场景。但当主程序存在大量耗时业务时,会出现按键漏检问题(如汽车刹车、工业急停等实时场景禁用)。

2.2 代码实现

步骤 1:初始化配置(4 大核心模块)
(1)引脚复用配置(IOMUXC)
  • 功能:将UART1_CTS_B引脚复用为GPIO1_IO18
  • 关键寄存器:IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B(低 4 位控制复用模式)
(2)电气特性配置(PAD_CTL)
  • 功能:配置引脚的上拉 / 下拉、速度、驱动能力等,确保电平稳定
  • 关键寄存器:IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B

参数拆解(二进制对应位):

  • HYS=0:禁用输入滞回(无需防抖时关闭)
  • PUS=11:22KΩ 上拉(匹配 “断开高电平” 硬件逻辑)<与原理图中KEY0的上拉电阻并联后阻止小于10Ω>
  • PUE=1:选择上拉模式(而非保持模式)
  • PKE=1:使能上拉 / 保持功能
  • ODE=0:禁用漏极开漏(GPIO 输入模式无需开漏)
  • SPEED=10:中等速度(100MHz)
  • DSE=000:禁用输出驱动(输入模式无需驱动)
  • SRE=0:慢压摆率(减少信号干扰)
(3)GPIO 方向配置(GDIR)
  • 功能:设置 GPIO 为输入模式(读取按键电平)
  • 关键寄存器:GPIO1->GDIR(bit18 对应 GPIO1_IO18,0 = 输入,1 = 输出)
(4)GPIO 时钟使能(CCM)
  • 功能:使能 GPIO1 组时钟(默认时钟关闭,不使能则 GPIO 无响应)
  • 关键寄存器:CCM_CCGR1(GPIO1 组共用该时钟门控)
mrc与mcr命令
对比 MRC(Move to ARM Register from Coprocessor)<“读”> MCR(Move from ARM Register to Coprocessor)<“写”>
核心功能 协处理器寄存器的数据读取到ARM 核心通用寄存器 ARM 核心通用寄存器的数据写入到协处理器寄存器
数据流向 协处理器寄存器 → ARM 核心寄存器(读操作) ARM 核心寄存器 → 协处理器寄存器(写操作)
指令格式(ARM 汇编) MRC{<cond>} <coproc>, <opcode1>, <Rd>, <Crn>, <Crm>{, <opcode2>} MCR{<cond>} <coproc>, <opcode1>, <Rd>, <Crn>, <Crm>{, <opcode2>}
关键字段含义 各字段功能与 MCR 完全一致,仅数据流向相反:

本文标签: 按键 工程 MX6ULL