裸机开发速记:启动流程|GIC 中断|时钟系统|UART 通信

发布时间:2026/9/30 7:11:44

裸机开发速记:启动流程|GIC 中断|时钟系统|UART 通信 ARM裸机笔记ARM启动代码中做的事Cortex‑A7裸机上电首先执行启动汇编完成硬件、内核模式、栈、缓存初始化最后跳转C语言main函数。设置异常向量表将复位、未定义指令、软中断、预取中止、数据中止、IRQ、FIQ异常的跳转指令放在内存起始处发生异常CPU自动跳转到对应偏移地址执行。异常向量表地址重映射把异常向量表重映射到程序链接地址0x87800000告诉Cortex‑A7内核从此处读取异常向量。为不同处理器工作模式分配栈指针SPARM7/A7有多种工作模式管理模式、IRQ中断模式、FIQ模式、系统模式。每种模式拥有独立SP栈寄存器在汇编里给IRQ模式、System模式设置栈空间中断发生才能正常入栈保存寄存器。ARM默认是满减栈STMFD入栈、LDMFD出栈。使能IRQ内核总中断修改CPSR程序状态寄存器打开内核层面IRQ中断开关注意GIC外设中断还需要单独使能此处只是内核允许接收IRQ。清零BSS段BSS段存放初始化为0/未初始化的全局、静态变量BSS段在bin文件中不占空间汇编需要手动把BSS内存区域全部置0防止随机脏数据。打开I‑CACHE指令缓存关闭D‑CACHE数据缓存CP15协处理器控制CacheI‑Cache指令高速缓存打开CPU取指令速度大幅提升D‑Cache数据高速缓存裸机下关闭避免IO寄存器访问被缓存优化出现异常。跳转到C语言main函数执行使用bl main把返回地址存入LR正式进入C语言裸机业务代码。关键指令补充MRS读取CPSR特殊寄存器到通用寄存器MSR把通用寄存器写回CPSR用来切换工作模式、开关中断。stmfd sp!,{r0‑r12,lr}中断入栈保护现场ldmfd sp!,{r0‑r12,lr}中断出栈恢复现场。中断系统GIC V2IMX6ULLGIC是ARM提供的通用中断控制器Cortex‑A7使用GIC V2IMX6ULL硬件支持160路中断源。GIC中断三大类SPI共享外设中断各类外设产生GPIO、EPIT、GPT、UART、I2C多核之间可以共享处理。PPI私有中断属于单个CPU内核用于核间通信和外部外设无关。SGI软件中断SVC/swi指令软件触发多用于操作系统。IMX6ULL外部中断完整流程以GPIO按键为例外设侧寄存器配置GPIO模块GPIOx_ICR配置中断触发方式上升沿 / 下降沿 / 高电平 / 低电平GPIOx_IMR中断掩码使能该引脚中断GPIOx_ISR中断状态标志位写1清除中断标志。GIC中断控制器配置设置该中断源优先级GIC Distributor层使能对应中断内核响应中断外设产生中断信号送给GICGIC转发给Cortex‑A7内核。CPU进入IRQ异常模式跳转到异常向量表IRQ入口。中断服务处理读C_IAR寄存器获取发生中断的中断号根据中断号调用对应外设中断处理函数处理完成将中断号写入C_EOIR通知GIC本次中断处理完毕恢复寄存器现场返回被打断的程序。中断优先级IMX6ULL共32级优先级0~31数字越小优先级越高。定时器EPIT / GPTEPIT定时器32位自减计数器两种工作模式Free‑Running 自由运行模式计数器到0后自动重装载最大值0xFFFFFFFFSet‑and‑Forget 设置遗忘模式计数到0只重装载一次加载寄存器的值。GPT定时器32位自增计数器输出比较可以输出PWM方波输入捕获测量外部脉冲高/低电平时间测脉冲宽度。按键软件消抖利用定时器延时跳过机械按键抖动时间段再读取IO电平代替硬件RC电容消抖。时钟系统IMX6ULL外部输入晶振24M无源晶振PLL锁相环实现倍频把低频外部晶振提升到高频内核时钟PFD相位分数分频器进一步做倍频、分频Prescale预分频器对时钟做整数分频。IMX6ULL核心时钟配置目标ARM内核时钟528MHzAHB_CLK_ROOT132MHz 高速总线时钟AHB总线高速外设DDR、USBIPG_CLK_ROOT66MHzPERCLK_CLK_ROOT66MHz总线划分AHB高速总线高速外设 DDR、网卡、USBAPB外设总线低速外设 GPIO、UART、定时器、I2C。每个外设都有CCGR时钟门控寄存器使用外设前必须打开时钟否则外设不工作。UART 通用异步收发器UART全双工、串行、异步通信。信号线TXD发送RXD接收RTS_B 请求发送、CTS_B清除发送硬件流控防止接收缓冲区溢出丢数据裸机一般不用。UART通信帧格式空闲状态总线高电平1bit起始位低电平 → 8bit数据位 → 可选校验位 → 1bit停止位高电平常用配置115200‑8‑N‑1波特率1152008数据位无校验1停止位。电气标准对比项目TTLRS232RS485信号单端单端差分A/B电平0~3.3V / 0~5V±3~±15VA‑B压差最大距离5m15m1200m双工全双工全双工半双工节点点对点点对点总线多节点抗干扰弱一般强工业环境芯片IO口MAX232MAX485UART编程要点CCM打开UART外设时钟IOMUXC引脚复用把IO配置成TXD/RXD功能配置电气属性设置波特率寄存器分频、采样因子设置帧格式数据位、停止位、校验使能发送器、接收器两种收发方式轮询模式不断查询发送/接收状态标志寄存器判断是否可以发送、是否收到数据简单CPU占用高中断模式收到数据/发送缓冲区空触发中断在中断服务函数处理收发CPU效率更高。UART异步含义收发双方没有公共时钟信号线依靠预先约定的波特率来采样数据波特率误差不能太大否则乱码。
延伸阅读

更多相关文章

2026/9/30 7:06:44

酒店PMS系统升级难点解析与瑞通系统技术应对方案

酒店在考虑更换PMS(Property Management System,物业管理系统)时,普遍面临数据迁移风险、员工适应成本与业务中断的担忧。针对“酒店PMS系统不敢换怎么办”这一核心问题,北京昆仑瑞祺科技发展有限公司旗下的瑞通酒店管…

2026/9/30 10:02:09

支持向量机从原理到实战:SVM的Python实现与参数调优全解析

简介:一份面向机器学习入门者与Python开发者的支持向量机(SVM)Python实现资源,以精简可运行的代码和配套数据,直观展示SVM从数据到分类模型的学习过程。压缩包共6个文件,其中3个Python源码文件分别承担核心…

2026/9/30 10:02:09

ClickHouse JSON处理实战:从JSON类型到行列转换全解析

搞数据的人一定都有这种感受:业务方扔过来的数据,十个里有八个长着 JSON 的样。ClickHouse 又是出了名的强类型列存,两者一撞,第一个反应就是拿 String 硬存,再掏出 JSONExtract 系列函数一层层剥。我之前在项目里处理…

2026/9/30 10:02:09

视觉惯性组合导航从原理到实践:无人系统开发验证平台搭建指南

如果你最近在搞无人机、机器人或者车载平台,你应该会注意到一个趋势:以前大家做自主定位,首选RTK、激光雷达或者纯视觉方案,但现在越来越多的团队开始把“视觉 惯性”作为标配,也就是视觉惯性组合导航。我做这个方向也…

2026/9/29 11:07:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/29 21:48:03

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 0:01:22

MATLAB+Yalmip+CPLEX实战:综合能源系统优化调度全流程解析

做综合能源系统优化调度这活儿,最痛苦的不是建模本身,而是模型写完之后不知道该怎么求解。看论文里轻飘飘一句“采用Yalmip调用CPLEX求解”,自己上手时却往往卡在环境配置、变量声明、约束写法和求解状态判读上,一耗就是两三天。这…

2026/9/30 0:01:22

I3C比I2C快10倍?RK3576实战:速率、DTS配置与混合总线避坑指南

I3C 比 I2C 快 10 倍?这句话在嵌入式群里传了很久,每次都能吵出一堆截图。前段时间我正好在 RK3576 上调板级 I3C 接口,从控制器寄存器一路摸到 Linux DTS 配置,踩了不少坑,也把这笔速度账彻底算明白了。本文就用 RK35…

2026/9/30 0:01:22

字符串转对象:JSON.parse、new Function与URLSearchParams

“字符串转对象”这几个字,我在技术群里见过的问法至少有十几种:有人拿着一串{a:1,b:2}说 JSON.parse 直接报错,有人要从 URL 里抠出参数,还有人只是想把abc变成能挂属性的东西。js 这门语言里,字符串和对象之间的转换…

2026/9/29 3:53:39

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/29 9:46:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/29 6:36:14

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑