嵌入式 - ARM6

一、按键

1. 初始化

key.c

手册C32 - IOMUXC

1. 复用功能配置

IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B: 低四位(0101)
IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0);


SION(信号监控)1:  0 //0 DISABLED — Input Path is determined by functionality
MUX_MODE(复用功能)4:0101 // ALT5 -- Select mux mode: ALT5 mux port:
GPIO1_IO03 of instance:gpio1

2. 电器特性配置

IOMUXC_SW_PAD_CTL_PAD_UART1_CTS_B
IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0xF080);


HYS(压摆率)1:                  0          //0 HYS_0_Hysteresis_Disabled; 输入 不开启 
PUS(上拉或者下拉)2:      11         // PUS_3_22K_Ohm_Pull_Up — 22K Ohm Pull Up
PUE(拉与保持选择)1:      1          //选择拉
PKE(拉或保持使能)1:      1           //使能
ODE(漏极开漏)1:             0          //使能
SPEED(速度)2:             10        //SPEED_2_medium_100MHz_ — medium(100MHz)
DSE(驱动能力)3:             000      //DSE_0_output_driver_disabled_ — output driver disabled; 输出是才有用,所以关闭
SRE()0:                           0          //SRE_0_Slow_Slew_Rate — Slow Slew Rate

3. 引脚方向

Chapter 28:General Purpose Input/Output (GPIO)
GPIOx_GDIR
GPIO1->GDIR &= ~(1 << 18);


0         INPUT     —     GPIO is configured as input.
1         OUTPUT —     GPIO is configured as output.

2. 开关检测

Chapter 28:General Purpose Input/Output (GPIO)
GPIOx_DR:开关断开高电平,开关按下低电平

二、中断

1. GIC介绍

1. 概念

通用目的的中断控制器(Generic Inierrupt Controller)

硬件 -> GIC -> 处理器

中断源 -> 中断控制器GIC -> 中断处理器 内核kernal

手册:裸机 - 中断 - GIC

VFIQ:V:虚拟的

2. GIC内核

GIC手册 - GIC Partitioning

中断源:0-15         SGI        软件中断

              16-31        PPI        私有的外设中断

              32-1019    SPI        可设置的外设中断

2. 中断配置

1. 外设终端

头文件core_ca7.h中

IRQn_Typr:0- 159 外设终端中

C_CTLR

C_IAR                中断通知寄存器

C_EOIR             中断结束寄存器

2.协处理器

cp0 - cp15       主要使用cp10.11.15 coprocessor

手册A7架构参考手册 - 4.System Control

1. c0 - MIDR

2. c1 - SCTLR4

mrc p15,0,r0,c1,c0,0
bic r0, r0, #(1 << 13)
orr r0, r0, #(1 << 12)
mcr p15,0,r0,c1,c0,0

3. c12 - VBAR

配置成0后可以修改该寄存器重新映射到其他地址

头文件MCIMX6Y2.h中

GPIO1_Combined_16_31_IRQn        =99

__get_VBAR(0x87800000);

4. c15 - CBAR

mrc p15, 4, r0, c15, c0, 0

3. 获取GIC基地址

1. MRC / MCR       
MRC<c> <coproc>, <opc1>, <Rt>, <CRn>, <CRm>{, <opc2>}
mrc p15, 4, r0, c15, c0, 0                参数对应cp15内容

异常向量表基地址映射 iche打开

mrc p15, 0, r0, c1, c0, 0                参数对应cp1内容,修改异常向量表映射方式
bic r0, r0, #(1 << 13)                       bit13位为V清零,VBAR配置中断向量基地址
orr r0, r0, #(1 << 12)                       bit12位为I 置一,iche使能位打开
mcr p15, 0, r0, c1, c0, 0

2. 步骤

中断源 -> 中断控制器GIC -> 中断处理器 内核kernal

手册C28(外设) - GPIOx - ICR1 / ICR2 / IMR

1. 中断源

1. 中断触发方式       

        GPIO->ICR2 |= (3 << 4)

2. 中断屏蔽解除

        GPIO->IMR |= (1 << 18)

3. 中断状态寄存器

        if(GPIO1->ISR &= (1 << 18)) != 0)
GPIO1->ISR |= (1 << 18)

2. GIC

1.GIC初始化
GIC_Init();

2.中断使能
GIC_EnablelRQ(GPI01_Combined_16_31_IRQn);

3.GIC基地址获取
mrc p15, 4, r1, c15, c0, 0

4.获取中断号
// C_IAR:Base+0x200C
add r1,r1,#0×2000
[dr r0, [r1, #0x0C]

5.中断标志清理
// C_EOIR:Base+0x2010
str r0, [r1, #0x10]3. 

3. 内核处理器

1.异常向量表基地址和开启ICache
mrc p15, 0, r0, c1, c0, 0
bic r0, r0,#(1 <<13)
orr r0, r0, #(1 <<12)
mcr p15, 0, r0, c1, c0,0
_set_VBAR(0x87800000);

2.中断向量
sub lr, lr,#4
stmfd sp!, {r0-r12, lr)

mrc p15, 4, r1, c15, c0, 0
add r1, r1, #0x2000
ldr r0,[r1, #0x0C]

stmfd sp!, {r0, r1}
cps #0x1F//中断嵌套

stmfd sp!,{lr}
bl system_interrupt_hander
ldmfd sp!, {lr}

cps #0x12
ldmfd sp!, {r0, r1}

str r0,[r1, #0x10]
ldmfd sp!, {r0-r12, pc}^

3.中断总服务函数
void system_interrupt_hander(unsigned int irq)
{
if (irq == GPI01_Combined_16_31_IRQn)
{
if ((GPI01->ISR &= (1 <<18)) != 0)
{
led_flicker();
GPI01->ISR = (1 <<18);
}
}
}

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

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

相关文章

菊水PBZ电源在蓄电池充放电测试中的应用探讨

通过高速双极性电源PBZ系列进行蓄电池恒流&#xff0c;恒压充电的方法 对于仪器厂商来说&#xff0c;要求“请按照使用说明书使用”是产品的使用方针&#xff0c;或者说是正确用法。但是&#xff0c;作为具有代表性的通用产品&#xff0c;直流电源的实际使用方法可谓五花八门&…

Zephyr嵌入式实时操作系统安装配置

Zephyr简介 Zephyr 是一款由 Linux 基金会 托管的开源实时操作系统(RTOS),专为资源受限的嵌入式设备(从微控制器到小型边缘计算节点)设计,广泛应用于物联网(IoT)、工业自动化、消费电子、医疗设备、汽车电子等领域。其核心优势在于轻量级、高可配置性和对多架构硬件的广…

Linux系统 SELinux 安全管理与故障排查

一、SELinux 安全上下文管理1. SELinux 简介SELinux&#xff08;Security-Enhanced Linux&#xff09;是 Linux 内核的强制访问控制&#xff08;MAC&#xff09;安全子系统&#xff0c;通过基于标签的访问控制实现细粒度权限管理&#xff0c;遵循最小权限原则。SELinux 有三种工…

解密完全二叉树顺序存储之堆结构

前言:各位老铁好&#xff0c;在前面博客中&#xff0c;笔者分享了有关二叉树的博客&#xff0c;在那篇博客中&#xff0c;笔者讲到了完全二叉树的存储结构中有两种存储方式&#xff0c;一种是顺序存储&#xff0c;一种是链式存储&#xff0c;链式存储笔者已经带各位老铁实现过了…

通过针刺!鹏辉能源移动电源电池革新之作 Secu 系列:不燃电解液加持,充电宝安全新选择

9月11日&#xff0c;鹏辉能源对外发布新一代移动电源高安全电池Secu系列。该产品通过采用不燃的电解液破解移动电源产品安全难题&#xff0c;直击当下移动电源安全事故频发的行业痛点&#xff0c;为移动电源行业带来更安全、更可靠的半固态电池解决方案。数字化时代&#xff0c…

软件定义汽车(SDV)与区域电子电气架构(Zonal EEA)的技术革新

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

在 Docker Compose 中解决文件权限不足的问题

在使用 Docker 和 Docker Compose 构建应用时&#xff0c;由于容器中的文件权限不足而导致某些容器可能无法访问宿主机上的文件&#xff0c;或者容器内的文件系统无法正确读取或写入文件。问题描述在我的项目中&#xff0c;我使用 Docker Compose 来启动多个服务&#xff0c;并…

认知语义学对人工智能自然语言处理的深层语义分析:理论启示与实践路径

摘要随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为其核心驱动力之一。然而&#xff0c;尽管以大型语言模型&#xff08;LLMs&#xff09;为代表的现代NLP系统在处理语言任务上取得了前所未有的成功&#xf…

React19 中的交互操作

需要安装的库 antd-mobile、use-immer在App.jsx 中引入组件 Actionimport "./App.css" import Action from "./pages/action" function App() {return (<><Action></Action></>) }export default Appaction.jsx 组件import LearnI…

仓颉编程语言青少年基础教程:数组类型

仓颉编程语言青少年基础教程&#xff1a;数组类型 数组本质上是有序、同类型数据的集合容器&#xff0c;其核心作用是高效组织、访问和处理批量数据&#xff0c;同时结合语言特性&#xff0c;为开发者提供简洁、高性能的数据管理方式。例如&#xff1a; main() { let v1: …

C++微基础蓝桥杯之旅9.9-9.12

这里主要还是强制类型转换的使用//打印字符ASCII码值 //输入一个除空格以外的可见字符 //输出其ASCII值--十进制整数 #include <iostream> using namespace std;int main() {char ch;cin >> ch;//字符cout << (int)ch << endl; return 0; }//打印字符…

逻辑漏洞(上)- 突破功能限制漏洞、用户信息泄露(逻辑漏洞入门)

漏洞介绍&#xff1a; 在网络攻防实战中&#xff0c;常会遇到各种前端限制&#xff0c;绕过限制的方法大多是改包或者修改前端代码来实现的。 漏洞环境&#xff1a;docker docker-compose up -d 启动环境后&#xff1a;访问 http://127.0.0.1:8983/web/# 发现查询按钮是无法使用…

tsv文件简介

初步了解tsv文件在很多 OCR&#xff08;光学字符识别&#xff09;项目中&#xff0c;.tsv文件是标准的训练数据标注文件&#xff0c;主要用于存储 “图像路径 - 对应文本标签” 的映射关系&#xff0c;同时可能包含图像尺寸、文本长度等辅助信息&#xff0c;方便模型读取训练数…

apache poi 导出复杂的excel表格

如何导出复杂的excel 表格 如图表格&#xff0c;存在行和列的合并&#xff0c;边框&#xff0c;样式&#xff0c;颜色等。依赖<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><arti…

下载 Eclipse Temurin 的 OpenJDK 提示 “无法访问此网站 github.com 的响应时间过长”

打开 Eclipse Temurin 的 OpenJDK 的官网下载地址&#xff1a; https://adoptium.net/zh-CN/temurin/releases 问 deepseek&#xff1a; 国内网络&#xff0c;打不开github.com网页&#xff0c;提示github.com 的响应时间过长。 国内无法访问 GitHub 或访问缓慢&#xff0c;通…

C/C++类型转换

C/C类型转换 1. C类型转换 C 语言中的类型转换主要分为两种&#xff1a;隐式类型转换 (Implicit Conversion) - 由编译器自动完成。显式类型转换 (Explicit Conversion) - 由程序员强制指定&#xff0c;也称为强制类型转换。1.2 隐式类型转换 编译器在编译时自动进行的转换&…

【Java】Windows切换Java8和Java11

现在有些项目要升级到Java17, 所以需要切换不同的java版本。 如何安装Java8 由于已经安装了jJava8, 之前的安装文章&#xff1a;【Java】jdk8安装——英文版 如何安装Java17 Java17下载地址 https://www.oracle.com/java/technologies/downloads/#java17-windows 下载到电…

SQLite 数据库核心知识与 C 语言编程

一、数据库基础概念1.1 数据库分类根据规模和应用场景&#xff0c;数据库可分为以下几类&#xff1a;大型数据库&#xff1a;Oracle&#xff08;适用于企业级高并发、大容量场景&#xff09;中型数据库&#xff1a;MySQL、MSSQL&#xff08;适用于中小型系统、Web 应用&#xf…

Netty 调优篇:实战配置、性能监控与常见坑

&#x1f680; Netty 调优篇&#xff1a;实战配置、性能监控与常见坑前面我们已经深入了 Netty 的 线程模型、Pipeline、EventLoop、内存池、零拷贝和背压机制。 但在实际工作中&#xff0c;很多人踩坑的地方不是“源码没看懂”&#xff0c;而是 调优没做好。 今天我们就从三个…

Linux Node.js 安装及环境配置详细教程

如果您喜欢此文章&#xff0c;请收藏、点赞、评论&#xff0c;谢谢&#xff0c;祝您快乐每一天。 一、Node.js是什么 Node.js是一个基于Chrome V8引擎的[JavaScript运行环境]。 Node.js使用了一个事件驱动、非阻塞式I/O 的模型。 Node.js是一个让JavaScript运行在服务端的开…