首页/新闻资讯/正文详情

RK3506 裸机开发(二):手写 Thumb 汇编实现 LED 闪烁

发布时间:2026/9/27 3:18:09 来源:云帆数科 栏目:资讯中心
RK3506 裸机开发(二):手写 Thumb 汇编实现 LED 闪烁
1 先算好 5 个常数GPIO0_IOC_GPIO0D_CON先算地址textGPIO0_IOC(0xFF950000) 0x0830 0xFF950830参考Rockchip_RK3506_TRM_Part_1_V1.2-20250811.pdf在写任何代码之前先把需要的数值算出来。这一步是“从手册到代码”的桥梁。已知ATK-DLRK3506 嵌入式 Linux 驱动开发指南 V1.2常数怎么算值写允许位1 (16 8) 1 240x01000000输出高点亮0x01000000 | (1 8)0x01000100输出低熄灭0x01000000 | 00x01000000IOMUX 值[17:16]0b11允许写[1:0][1:0]00选 GPIO0x00030000时钟值bit241允许写bit80保持开启0x01000000注意0x00030000的高 16 位是0x0003对应 bit17、bit16 都置 1也就是[17:16]0b11表示允许修改低 16 位的[1:0]。2 骨架伪指令 入口新建文件假设叫led_thumb.s先写头部asm.syntax unified .arch armv7-a .cpu cortex-a7 .thumb /* ★ 关键按 Thumb 生成 */ .global _start .text .thumb_func /* ★ 关键让 _start 地址最低位置 1 */ _start: push {r4, r5, r6, r7, lr}push {r4, r5, r6, r7, lr}为什么必须有AAPCSARM 过程调用标准规定 r4~r8、r10、r11、SP 是被调用者必须原样保存的寄存器。虽然本程序最后是死循环、不返回但这条push让程序有可能安全返回也避免破坏 U-Boot 留下的寄存器状态。养习惯入口先push。3 第 1 步引脚复用 IOMUXasm/* GPIO0_IOC_GPIO0D_CON 0xFF950830 * [17:16] 写允许[1:0] gpio0d0_sel 00选 GPIO0D0 */ ldr r0, 0xFF950830 /* 寄存器地址 */ ldr r1, 0x00030000 /* [17:16]0b11 允许写 [1:0][1:0]00 选 GPIO */ str r1, [r0] /* 写入 */为什么用ldr r0, 0xFF950830而不是movmov的立即数字段装不下 32 位常数。ldr r0, 值是伪指令汇编器会把它变成“一条 PC 相对的ldr2 字节 末尾常量池里的一个 4 字节.word”。这就是为什么反汇编最后会出现 3 个.word见 §10.1。注意写的是0x00030000不是0x00000000低 16 位是选择值0 GPIO高 16 位是写允许掩码。0x0003表示只允许改[1:0]这两位不碰同一寄存器里的其他位。这一步在复位后本来是“已经对”的复位值0x0000072C[1:0]00。保留它的价值是显式化如果 U-Boot 或前级代码动过这个寄存器这段能兜住。4 第 2 步打开时钟门控asm/* CRU_PMU_GATE_CON00 0xFF9B0800 * bit8 pclk_gpio0_en1关0开 */ ldr r0, 0xFF9B0800 ldr r1, 0x01000000 /* bit24写允许bit80 → 时钟保持开启 */ str r1, [r0]两个陷阱§6.5 已讲这个寄存器在CRU_PMU(0xFF9B0000)不在主 CRU极性是反的1 关。同样复位值本来就是 0时钟已开保留是为了显式。5 第 3 步设为输出asm/* GPIO0_SWPORT_DDR_H 0xFF940000 0x0C * bit8 1 → Outputbit24 写允许 */ ldr r0, 0xFF940000 /* 把 GPIO0 基址放进 r0后面复用 */ ldr r1, 0x01000100 /* bit24写允许bit81 → 输出 */ str r1, [r0, #0x0C] /* GPIO_SWPORT_DDR_H */为什么是#0x0C而不是#0x04DDR_H方向偏移是0x0CDR_H数据偏移是0x04。别搞反。为什么是_Hpin 24 ≥ 16§6.3。这里把0xFF940000放进r0是为了下一步复用——省一条ldr。6 第 4 步输出高电平点亮asm/* GPIO0_SWPORT_DR_H 0xFF940000 0x04 * bit8 1 → 高电平 → 点亮 */ ldr r1, 0x01000100 /* bit24写允许bit81 → 高电平 */ str r1, [r0, #0x04] /* GPIO_SWPORT_DR_H */注意这里只重新加载了r1r0还是上一步的0xFF940000。到这一步LED 应该已经常亮了。如果 §7.7 的循环不加程序会一直往下跑然后跑飞。7 第 5 步闪烁循环asmblink: /* 点亮 */ ldr r1, 0x01000100 /* bit24写允许bit81 → 亮 */ str r1, [r0, #0x04] ldr r2, 0x20000000 /* 亮的延时计数 */ delay_on: subs r2, r2, #1 /* 减 1并更新标志位 */ bne delay_on /* 不为 0 → 继续循环 */ /* 熄灭 */ ldr r1, 0x01000000 /* bit24写允许bit80 → 灭 */ str r1, [r0, #0x04] ldr r2, 0x10000000 /* 灭的延时计数 */ delay_off: subs r2, r2, #1 bne delay_off b blink /* 回到开头无限循环 */★subs而不是sub只有subs会更新 Z 标志位bne才有意义。写成sub会变成永不退出的死循环bne永远成立——这是经典坑。为什么用“空转循环”做延时这是最粗暴的延时方式——CPU 就傻数数。真实项目应该用 TIMER。这里够用因为目的只是让闪烁肉眼可见。延时比例亮0x20000000灭0x10000000亮:灭 2:1。所以占空比不是 50%视觉上亮的时间稍长。这是原始源码的值未修改。循环里没有pop程序以b blink结尾是无限循环永不返回。所以go之后 U-Boot 命令行不会再回来要按 RESET 键才能恢复。led_thumb.s源码可见https://github.com/joyful-jogo/rk3506-baremetal/tree/main/1_leds

相关推荐

搞定域名服务器,从零搭建模特公司网站源码实战
搞定域名服务器,从零搭建模特公司网站源码实战

搞定域名服务器,从零搭建模特公司网站源码实战 是不是刚拿到模特公司的建站项目,看着“域名”和“服务器”这两个词就头疼?很多项目经理跟我说,业务需求背得滚瓜烂熟,UI稿也定稿了,可一到配置环境就卡壳,域名解析怎么配?服务器Linux命令敲哪条… · 2026/9/27 3:18:09

STM32调试避坑指南:BOOT0、SWD、Flash与HSE常见问题排查
STM32调试避坑指南:BOOT0、SWD、Flash与HSE常见问题排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 3:18:09

Hadoop伪分布式环境搭建:Win11+VirtualBox+Ubuntu 18.04完整实践
Hadoop伪分布式环境搭建:Win11+VirtualBox+Ubuntu 18.04完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 3:18:09

软件模拟I2C:从时序原理到代码实现与调试优化
软件模拟I2C:从时序原理到代码实现与调试优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 3:53:25

WordPress自动内链哪家好,实测3款插件避坑指南
WordPress自动内链哪家好,实测3款插件避坑指南

WordPress自动内链哪家好,实测3款插件避坑指南 网站被黑挂马不知道怎么办?这是很多站长深夜惊醒时的真实写照。当首页突然跳出博彩广告,或者后台多了陌生的管理员账号,那种无助感真的能把人逼疯。这时候你才意识到, 内链结构混乱… · 2026/9/27 3:53:25

STAR-CCM+ 2020.01从入门到进阶:网格、湍流模型与后处理全流程解析
STAR-CCM+ 2020.01从入门到进阶:网格、湍流模型与后处理全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 3:53:19

二手汽车交易平台
二手汽车交易平台

一、关键词二手汽车交易、二手车买卖、旧车交易、汽车转让、车辆交易平台二、作品包含源码数据库万字设计文档PPT全套环境和工具资源本地部署教程三、项目技术前端技术: Html、Css、Js、Vue3.4、Element-Plus后端技术:Java、SpringBoot3.2.0、MyBatis-Pl… · 2026/9/27 3:53:19

CYUSB3065驱动OG02B10图像传感器实战指南
CYUSB3065驱动OG02B10图像传感器实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 3:53:13

3套漫画网站开发源码对比评测,教你避开被黑挂马坑
3套漫画网站开发源码对比评测,教你避开被黑挂马坑

3套漫画网站开发源码对比评测,教你避开被黑挂马坑 昨晚凌晨三点,我的手机突然疯狂震动。客户老张在群里连发十条消息,语气急促得像是天塌了:“网站打不开了!浏览器提示不安全!后台全是乱码广告!”… · 2026/9/27 3:53:13

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码