当前位置: 首页 > article >正文

第二期: 第四节, 裸机编程 LED 汇编代码。

1 首先是 关于汇编代码的解释。

来看看原理图:

再来看看 GPL2_0 的寄存器地址。

来看看代码:

.globl _start
.arm
_start:
// 这是 GPL2_0 的 CON 寄存器的地址。
        LDR R0,=0x11000100    
        LDR R1,[R0]

//首先是清零,最后4位
        BIC R1,R1,#0x0000000f

//然后是将 最后4位设置成 1  , 也就是 输出模式。
        ORR R1,R1,#0x00000001

//然后写回。
        STR R1,[R0]
loop:

//这是 GPL_0 的data寄存器的地址。
        LDR R0,=0x11000004
        LDR R1,[R0]

//首先是 将 第一位 置一, 也就是输出高电平
        ORR R1,R1,#0x1
        STR R1,[R0]
//然后跳到 延时函数。
        BL delay
//接下来就是  将最后 一位置0 也就是 输出低电平。
//这是在实现闪烁功能。
        LDR R1,[R0]
        BIC R1,R1,#0x1
        STR R1,[R0]
        BL delay
// 然后是循环的闪烁
        B loop
delay:
        LDR R2,=0xfffffff
loop1:
// 这是一个延时函数, 就是从 fffff 不断向下减1, 直到减到0 为止。
        SUB R2,R2,#0x1
        CMP R2,#0x0
        BNE loop1
        MOV PC,LR
.end

2 然后是关于 关于 makefile 的编写。

TARGET=led
all:
        arm-none-linux-gnueabi-gcc -O0 -g -c -o $(TARGET).o $(TARGET).s
        arm-none-linux-gnueabi-ld               $(TARGET).o -Ttext 0x40008000 -N -o $(TARGET).elf
        arm-none-linux-gnueabi-objcopy -O binary -S $(TARGET).elf $(TARGET).bin
clean:
        rm -rf *.o *.elf *.dis *.bin

3 然后就是 编译+烧写+测试。

烧写 ,编译, 程序在板子上的运行都是正常的。


http://www.kler.cn/a/301555.html

相关文章:

  • 自制C++游戏头文件:C++自己的游戏头文件!!!(后续会更新)
  • STL序列式容器之stack
  • 若点集A=B则A必能恒等变换地变为B=A这一几何常识推翻直线(平面)公理
  • 消息中间件分类
  • 整数唯一分解定理
  • 跟我学C++中级篇——RAII
  • TCP/IP模型成功与OSI模型失败的深层原因:技术、理念与市场化路径的比较
  • 【数据结构与算法 | 灵神题单 | 快慢指针(链表)篇】力扣876, 2095, 234
  • git获取最近一次提交的内容(只要message不要hash)
  • 新的Ubuntu服务器如何启用root账号和配置静态ip以及开启ssh服务
  • 第309题|证明函数单调有界的核心思路 |武忠祥老师每日一题
  • erlang学习: Mnesia Erlang数据库4
  • redis基本数据类型和常见命令
  • Vue路由的分类与使用
  • mysql树形结构返回是否叶子节点
  • JAVA数据导出为Excel
  • BERT_
  • ubuntu 20.04 部署standalone dolphinscheduler
  • 【K8S实践笔记】Kubernetes(v1.28)集群搭建部署(1)
  • 爬虫3:re正则表达式获取数据
  • 中英双语共享充电宝投放管理投资理财源码五级分销返利+地图显示模式
  • 微擎忘记后台登录用户名和密码怎么办?解决方法
  • 深入理解 JavaScript 中的 `void` 操作符
  • 水壶问题记录
  • 微服务网关终极进化:设计模式驱动的性能与可用性优化(四)
  • Linux 基础命令-压缩与解压缩