尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
裸机开发速记:启动流程|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异步含义收发双方没有公共时钟信号线依靠预先约定的波特率来采样数据波特率误差不能太大否则乱码。
RELATED

相关推荐

YOLOv13改进策略【卷积层篇】| CVPR2024 UniRepLKNet Block,大核感受野的可重参数化卷积

YOLOv13改进策略【卷积层篇】| CVPR2024 UniRepLKNet Block,大核感受野的可重参数化卷积

本文基于 YOLOv13 官方仓库(iMoonLab/yolov13,ultralytics 8.3.63 fork) 实测整理,Windows/CPU 全程可跑。UniRepLKNet(Ding et al., CVPR 2024《UniRepLKNet: A Universal Perception Large-Kernel ConvNet》,官方源码 github.com/AILab-CVC/UniRepLKNet)给"大核卷…

📅 2026/9/30 7:06:50
YOLOv13改进策略【卷积层篇】| CVPR2023 DCNv3 可变形卷积,采样点第三次进化

YOLOv13改进策略【卷积层篇】| CVPR2023 DCNv3 可变形卷积,采样点第三次进化

本文基于 YOLOv13 官方仓库(iMoonLab/yolov13,ultralytics 8.3.63 fork) 实测整理,Windows/CPU 全程可跑。DCNv3(Wang et al., CVPR 2023《InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Convolutions》,官方源码 github.com/OpenGVLab/…

📅 2026/9/30 7:06:50
YOLOv13改进策略【卷积层篇】| 2024 MobileNetV4 UIB 万能倒残差,一块卷积通吃轻量微结构

YOLOv13改进策略【卷积层篇】| 2024 MobileNetV4 UIB 万能倒残差,一块卷积通吃轻量微结构

本文基于 YOLOv13 官方仓库(iMoonLab/yolov13,ultralytics 8.3.63 fork) 实测整理,Windows/CPU 全程可跑。MobileNetV4(Qin et al., CVPR 2024 Workshop,《MobileNetV4: Universal Models for the Mobile Ecosystem》,arXiv 2404.10518;官方实现为 TensorFlow,无官方 …

📅 2026/9/30 7:06:50
MORE NEWS

更多资讯

📰

段式内存管理地址变换与越界检查:课堂练习4.1复盘

课堂练习4.1 的题目发下来的时候,我第一反应是这题应该不难——段式内存管理翻来覆去就那几个公式:拆地址、查段表、做检查、加基址。结果真拿起笔算第一道小题,还是卡了两分钟。卡的点不在于公式本身,而在于题干给的那组数字里藏…

📰

基于YOLOv8的舰船目标检测系统:从数据集标注到PyQt5界面集成

舰船目标检测这个方向,我前后折腾过三套方案,从最早的 YOLOv5 改配置文件,到后来用 YOLOv8 重新搭一套带界面的完整系统,中间踩的坑足够写一本小册子。很多人第一次接触这类项目,会觉得"不就是拿个预训练权重跑一…

📰

JMeter实战入门:以飞致云平台为靶标快速掌握接口测试核心技能

1. 为什么飞致云平台成了JMeter入门的“黄金练兵场”很多人第一次打开JMeter,面对空白的测试计划树和密密麻麻的线程组、HTTP请求、断言、监听器,第一反应是:这玩意儿到底在测什么?测谁?测完又怎么知道对不对&#xff…

📰

Mac读写NTFS移动硬盘的三种实用方案:从驱动到exFAT

朋友抱着一块移动硬盘来找我:“这个盘在Windows上拷满了资料,插到你Mac上试试能不能读?”我接过硬盘插上去,系统确实认出了分区,可当我试着往盘里拖新文件夹时,Mac直接弹窗拒绝。这块盘是NTFS格式&#xff…

📰

逐行拆解one-skill-to-rule-them-all的bash脚本:ID推导、归档扫描,以及你必须防住的三种静默失败

逐行拆解one-skill-to-rule-them-all的bash脚本:ID推导、归档扫描,以及你必须防住的三种静默失败 【免费下载链接】one-skill-to-rule-them-all The meta-skill that builds and improves all your skills, including itself. Watches your work session…

📰

银河麒麟v10 SP1安装Docker:前置问题、内核参数与离线部署指南

简介:银河麒麟V10 SP1 Server上安装Docker的实操手册,面向国产化服务器环境下的运维与开发人员,专门解决官方源未收录Docker服务端软件包、直接yum安装失败的问题。资料包含一个docx格式文档,压缩包体积仅17KB,篇幅短小…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬