一步步点亮LED3_从零开始手写汇编点亮LED
1、GPxCON、GPxDAT寄存器分析
GPJ0端口一共有8个引脚,分别记作:GPJ0_0 ~ GPJ0_7,相关重要寄存器就是GPJ0CON和GPJ0DAT
GPJ0CON寄存器中设置8个引脚的工作模式(32/8=4,每个引脚可以分到4位,譬如GPJ0_0对应的bit位为0 ~ 3bit,GPJ0_3对应的位为bit12 ~ bit15。工作方法是:给相应的寄存器位写入相应的值,该引脚硬件就会按照相应的模式去工作。譬如给bit12 ~ bit15写入0b0001,GPJ0_3引脚就成为输出模式了)
2、从零开始写代码操作寄存器
需要那些先决条件才能写呢?
(1)、硬件接法和引脚:GPJ0_3、GPJ0_4、GPJ0_5低电平亮/高电平灭
(2)、GPJ0CON 地址(0xE020024)寄存器和GPJ0DAT(0xE0200244)寄存器
(3)、工程管理:Makefile、mkv210_image.c、write2sd、说明。
根据以上分析,我们就知道代码的写法了,代码所要完成的动作就是:把相应的配置数据写入相应的寄存器即可。
注:看数据手册GPJ0CON有8个引脚,每个引脚占4位,这4位可以设置8种模式。其实我们只关心的是第3,4、5这三个引脚。在此根据朱老师讲的设置GPJ0CON时,用十六进制(1位表示4位2进制数)写入的是0x11111111,把8个引脚全部设置为输出模式。
GPJ0DAT查数据手册有8个bit位可设置。对应GPJ0CON的8个引脚。在此根据朱老师设置是把这8个位全部设置为0(即把0x0设置到GPJ0DAT),即输出低电平。
/*
* 文件名:led.S
* 作者: 张军
* 描述: 这是我们一步步点亮LED教程自己写的第一个裸机程序
*/_start: //_start:是标号,以这开头是写汇编的规则//第一步:把0x11111111写入0xE0200240(GPJ0CON)位置ldr r0, =0x11111111 //从后面的=可以看出用的是ldr是伪指令,因为需要编译器来判断这个ldr r1, =0xE0200240 //是否是合法立即数,一搬写代码都用ldr伪指令。ldr既是伪指令又是指令。区分看后面是=还是#号str r0, [r1] //寄存器间接寻址。功能是把r0中的数写入到r1中数为地址的内存中去//第二步:把0x0写入0xE0200244(GPJ0DAT)位置ldr r0, =0x0ldr r1, =0xE0200244str r0, [r1] //把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮flag:b flag //这两行写了一个死循环。因为裸机程序是直接在CPU上运行的,CPU//逐行运行裸机程序直到CPU断电关机。如果我们的程序所有代码都//执行完了CPU就会跑飞(跑飞后是未定义的,所以千万不要让CPU跑飞)//不让CPU跑飞的办法就是在整个程序执行完添加死循环。
一步步点亮LED3_从零开始手写汇编点亮LED相关推荐
- 深蓝学院《从零开始手写VIO》作业七
深蓝学院<从零开始手写VIO>作业七 深蓝学院<从零开始手写VIO>作业七 深蓝学院<从零开始手写VIO>作业七 将第二讲中的仿真数据(视觉特征,imu数据)接入V ...
- 深蓝学院《从零开始手写VIO》作业六
深蓝学院<从零开始手写VIO>作业五 深蓝学院<从零开始手写VIO>作业六 1. 证明题 2. 代码题 深蓝学院<从零开始手写VIO>作业六 1. 证明题 证明Dy ...
- 深蓝学院《从零开始手写VIO》作业五
深蓝学院<从零开始手写VIO>作业五 1. 完成Bundle Adjustment求解器 2. 完成测试函数 3. 论文总结 1. 完成Bundle Adjustment求解器 完成单目 ...
- 深蓝学院《从零开始手写VIO》作业四
深蓝学院<从零开始手写VIO>作业四 深蓝学院<从零开始手写VIO>作业四 1. 信息矩阵分析 2. Bundle Adjustment信息矩阵的计算 深蓝学院<从零开始 ...
- 深蓝学院《从零开始手写VIO》作业三
深蓝学院<从零开始手写VIO>作业三 深蓝学院<从零开始手写VIO>作业三 1. 代码修改 2. 公式推导 3. 公式证明: 深蓝学院<从零开始手写VIO>作业三 ...
- 深蓝学院《从零开始手写VIO》作业一
深蓝学院<从零开始手写VIO>作业一 深蓝学院<从零开始手写VIO>作业一 1. VIO文献阅读 1.1 视觉与IMU进行融合之后有何优势? 1.2 有哪些常见的视觉+IMU融 ...
- druid连接池初始化慢_从零开始手写 mybatis (三)jdbc pool 从零实现数据库连接池
前景回顾 第一节 从零开始手写 mybatis(一)MVP 版本 中我们实现了一个最基本的可以运行的 mybatis. 第二节 从零开始手写 mybatis(二)mybatis interceptor ...
- node怎么把token放到redis_从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化
前言 java从零手写实现redis(一)如何实现固定大小的缓存? java从零手写实现redis(三)redis expire 过期原理 java从零手写实现redis(三)内存数据如何重启不丢失? ...
- 从零开始手写VIO 第二章 IMU传感器
第二章 IMU传感器 课程代码: https://github.com/kahowang/Visual_Internal_Odometry/tree/main/%E7%AC%AC%E4%BA%8C%E ...
最新文章
- 【linux】Valgrind工具集详解(十):SGCheck(检查栈和全局数组溢出)
- Oracle之sqlpluse显示格式
- bzoj3122 [SDOI2013]随机数生成器
- Eclipse Code Review(代码审查)工具介绍
- 微服务架构日志集中化 安装 EFK (Fluentd ElasticSearch Kibana) 采集nginx日志
- oracle语句借书,Oracle SQL题目及其解答(借书卡、图书、借书记录)
- android tv ko,Android TV 键值修改流程
- 下班理财超过上班赚钱
- 融入常识知识的生成式对话摘要
- 谷粒学院(二十一)网关Gateway
- 洛谷OJ P1036 选数
- C 语言 去除字符串中空格函数
- 20140925百度校园招聘一面
- 腾讯+android+hotfix,发布到安卓平台报这个错误,xLua exception : xlua.access, no field __Hotfix0_Update...
- office文件图标显示不正常
- 头盔佩戴检测(行人跟踪技术检测)
- hyperf中的缓存之CacheEvict
- 一个人怎样才算见过世面?
- Python3.7在 Geany下编译出现SyntaxError: Non-UTF-8 code starting with '\xb3'错误及实例化方法时提示没有实参的解决方法。
- 学Java开发到底能做什么工作?
热门文章
- 23种java设计模式之模板模式
- 家里扯了千兆网线网速还是上不去,看看这个对你有没有帮助
- VMware 10设备CentOs 6.5
- Voxgraph: Globally Consistent, Volumetric Mapping Using Signed Distance Function Submaps
- python分布爬虫_大神教你13天搞定Python分布爬虫(3)
- [work] 如何理解泛函以及变分
- 7.3 Uipath UiPath之获取邮件相关信息
- [图像识别]11.OpenCV的角点检测 FAST和OBR算法
- 代码混淆后日志的解读工具-retrace
- java计算机毕业设计企业进销管理系统的设计与实现源代码+数据库+系统+lw文档