Linux之ARM(MX6U)裸机篇----2.汇编LED驱动实验
一,alpha的LED灯硬件原理分析
STM32 IO初始化流程
①,使能GPIO时钟
②,设置IO复用,复用为GPIO
③,配置GPIO的电气属性推挽,上拉下拉
④,使用GPIO,输出高/低电平
MX6ULL IO初始化
①,使能时钟,CCGR0-CCGR6这7个寄存器控制着6ULL所有外设时钟的使能,为了简单,设置CCGR0-CCGR6这7个寄存器全部为0XFFFFFFF,相当于使能所有外设时钟。
②,IO复用,将寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO_IO03的bit3~0设置为0101=5,这样GPIO1_IO03就复用为GPIO。
③,寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO_IO03是设置GPIO1_IO03的电气属性。包括压摆率,速度,驱动能力,开漏,上下拉等。
④,配置GPIO功能,设置输入输出,设置GPIO1_DR寄存器bit3为1,也就是设置为输出模式。设置GPIO1_DR寄存器的bit3,为1表示输出高电平,为0表示输出低电平
二,汇编基础
_start:是汇编起始标志
LDR指令
将地址立即数加载到寄存器Rx中,@是注释符
比如LMX6UL有个寄存器GPIO1_GDIR,其地址为0x0209C004
示例:LDR R0,=0x0209C004 @将寄存器地址0x0209C004加载到R0中
示例:LDR R1,[R0] @读取地址0x0209C004中的数据到R1寄存器中
上述示例将寄存器GPIO1_GDIR中的值,读取到的寄存器值保存在R1寄存器中
STR指令
将一个存储器中数据写入另一个存储器Rx中
比如LMX6UL寄存器GPIO1_GDIR的值为0x20000002
示例:LDR R0,=0x0209C004 @将寄存器地址0x0209C004加载到R0中
示例:LDR R1, =0x20000002 @R1保存要写入到寄存器的值,R1=0x20000002
示例:STR R1, [R0] @将R1的值写入到R0中所保存的地址中
@用汇编实现int a,b a=b 假设a地址为0x20,b地址为0x30
LDR R0, =0X30 @读取b的值到R0中
LDR R1, [R0] @读取R0的值到R1中
LDR R0, =0X20 @读取a的值到R0中
STR R1, [R0] @将R1的值写到R0中
可以用小写,ldr,str等
三,编译程序
①,将.c .s文件变为.o文件
②,将所有.o文件连接为.elf格式的可执行文件
③,将.elf文件转化为bin文件
④,将.elf文件转为汇编,反汇编
链接:要设置链接的起始地址,也就是代码保存的起始地址。
对于 6ULL 来说,链接起始地址应该指向 RAM 地址。RAM 分为内部 RAM 和外部 RAM,
也就是 DDR。6ULL内部 RAM 地址范围 0X900000~0X91FFFF。也可以放到外部 DDR 中
对于I.MX6U-ALPHA开发板,512MB字节DDR版本的核心板,DDR范围就是
0X80000000~0X9FFFFFFF。对于256MB的DDR来说,那就是0X80000000~0X8FFFFFFF
本系列视频,裸机代码的链接起始地址为 0X87800000。要使用DDR,那么必须要
初始化 DDR,对于 I.MX 来说 bin 文件不能直接运行,需要添加一个头部,这个头部信
息包含了 DDR 的初始化参数,I.MX系列SOC内部bootrom会从SD卡,EMMC 等外
置存储中读取头部信息,然后初始化 DDR,并且将 bi 文件拷贝到指定的地方。“
Bin 的运行地址一定要和链接起始地址一致。位置无关代码除外。
点灯实验链接起始地址为0X87800000
第①步指令 arm-linux-gnueabihf-gcc -g -c led.s -o led.o
第②步指令 arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
第③步指令 arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin
第④步指令 arm-linux-gnueabihf-objdump -D led.elf > led.dis //.dis文件用于分析调试代码
可以编写makefile执行全部指令

点灯程序如下:
.global _start @全局标号_start:/*使能所有外设时钟*/ldr r0, =0x020c4068 @CCGR0ldr r1, =0xffffffff @要向CCGR0写入的数据str r1, [r0] @将0xfff写入到CCGR0中ldr r0, =0x020c406c @CCGR1str r1, [r0] @将0xfff写入到CCGR1中ldr r0, =0x020c4070 @CCGR2str r1, [r0] @将0xfff写入到CCGR2中ldr r0, =0x020c4074 @CCGR3str r1, [r0] @将0xfff写入到CCGR3中ldr r0, =0x020c4078 @CCGR4str r1, [r0] @将0xfff写入到CCGR4中ldr r0, =0x020c407c @CCGR5str r1, [r0] @将0xfff写入到CCGR5中ldr r0, =0x020c4080 @CCGR6str r1, [r0] @将0xfff写入到CCGR6中/* 配置GPIO1_IO03_PIN的复用为GPIO,也就是设置* IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03=5* IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03寄存器的地址为0x020E0068*/ldr r0, =0x020E0068 @IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03ldr r1, =0x5 @要写入的数据str r1, [r0] @将5写入到IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03中/* 配置GPIO1 I003的电气属性 也就是寄存器:* IOMUXC SW PAD CTL PAD GPIO1 IO03* IOMUXC SW PAD CTL PAD GPIO1 I003寄存器地址为0x020e02f4* bit0:0 低速率* bit5:3: 110 RO/6驱动能力* bit7:6: 10 100MHz速度* bit11: 0 关闭开路输出* bit12: 1 使能pull/kepper* bit13: 0 kepper* bit15:14:00 100K下拉* bit16: 0 关闭hys*/ldr r0, =0x020e02f4ldr r1, =0x10b0str r1, [r0]/* 设置GPIO* 设置GPIO1_GDIR寄存器,设置GPI01_GPI003为输出* GPI01_GDIR寄存器地址为0x0209c004,设置GPI01 GDIR寄存器bit3为1,* 也就是设置GPIO1 I003为输出。*/ldr r0, =0x0209c004ldr r1, =0x8str r1, [r0]/* 打开LED,也就是设置GPIO1_IO03为0* GPIO1_DR寄存器地址为0x0209c000*/ldr r0, =0x0209c000ldr r1, =0str r1, [r0]loop: @死循环b loop @b是跳转,该句是跳转得到loop@要多空几行,避免报错
四,烧写bin文件
STM32 烧写到内部 FLASH。
6ULL支持 SD 卡、EMMC、NAND、nor、SPlflash 等等启动。裸机例程选择烧写到 SD(tf卡)卡里面
sd卡要格式化,能支持FAT32格式

在 ubuntu 下向 SD 卡烧写裸机 bin 文件。烧写不是将 bin 文件拷贝到 SD 卡中,而是将
bin 文件烧写到 SD 卡绝对地址上。而且对于1.MX而言,不能直接烧写 bin 文件,比如先在
bin 文件前面添加头部。
该实验中将官方ddr初始化文件和点灯程序一起编译,用dd指令就能烧录
指令:sudo dd main.bin /dev/sdf
相关文章:
Linux之ARM(MX6U)裸机篇----2.汇编LED驱动实验
一,alpha的LED灯硬件原理分析 STM32 IO初始化流程 ①,使能GPIO时钟 ②,设置IO复用,复用为GPIO ③,配置GPIO的电气属性推挽,上拉下拉 ④,使用GPIO,输出高/低电平 MX6ULL IO初始化…...
e3 1220lv3 cpu-z分数
e3 1220lv3 双核四线程,1.1G频率,最低可在800MHZ运行,TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。...
HTML5适配手机
要使 HTML5 网站适配手机设备,您可以遵循以下几个步骤和最佳实践: 1. 使用视口(Viewport) 在 HTML 文档的 <head> 部分添加视口元标签,以确保页面在移动设备上正确缩放和显示: <meta name"…...
C# 中使用 MassTransit
在生产环境中使用 MassTransit 时,通常需要进行详细的配置,包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例,展示了如何在 ASP.NET Core 应用程序中配置 MassTransit,包括请求/响应模式和…...
网络编程 实现联网 b+Tree
网络编程是客户端和服务器之间通信的基础,也是现代应用开发中不可或缺的技能。在 Unity 中实现网络功能,需要结合计算机网络原理、数据结构与算法,以及网络协议的实际应用。以下是对这一块内容的详细介绍,包括每个涉及到的知识点&…...
zentao ubuntu上安装
#下载ZenTaoPMS-21.2-zbox_amd64.tar.gz(https://www.zentao.net/downloads.html) https://dl.zentao.net/zentao/21.2/ZenTaoPMS-21.2-zbox_amd64.tar.gzcd /opt tar -zxvf ZenTaoPMS-21.2-zbox_amd64.tar.gz#启动 /opt/zbox/zbox start /opt/zbox/zbox…...
Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON
这里是Themberfue 在学习完简单的网络编程后,我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时,我们通过一个线程处理连接的申请,随后通过多线程或者线程…...
Bash Shell知识合集
1. chmod命令 创建一个bash shell脚本 hello.sh ~script $ touch hello.sh脚本创建完成后并不能直接执行,我们要用chmod命令授予它可执行的权限: ~script $ chmod 755 hello.sh授权后的脚本可以直接执行: ~script $ ./hello.sh2.指定运行…...
从0入门自主空中机器人-1【课程介绍】
关于本课程: 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让…...
Doris使用注意点
自己学习过程中整理,非官方 dws等最后用于查询的表可以考虑使用row存储加快查询,即用空间换时间duplicate key的选择要考虑最常查询使用适当使用bloomfilter 加速查询适当使用aggregate 模式降低max,avg,min之类的计算并加快查询…...
Mybatis插件better-mybatis-generator的下载与使用
1.下载 找到设置 插件 搜索better-mybatis-generator 下载并且重启IDEA 2.连接数据库 点击测试连接 连接成功如下图 3.使用插件 选择对应的表 右击选择 注意:mysql8.0驱动一定要勾上mysql_8 其他地方不要动 然后实体类 mapper xml就都生成好了 mapper里有默认增删…...
uniapp小程序实现弹幕不重叠
uniapp小程序实现弹幕不重叠 1、在父组件中引入弹幕组件 <template><!-- 弹幕 --><barrage ref"barrage" class"barrage-content" reloadDanmu"reloadDanmu"></barrage> </template> <script>import barr…...
快速排序学习优化
首先,上图。 ‘’’ cpp int partSort(int *a ,int left,int right) {int keyi left; //做左侧基准while(left<right){while(left<right && a[right]>a[keyi]){right--;}while(left<right && a[left]<a[keyi]){left;}swap(a[left…...
微信流量主挑战:三天25用户!功能未完善?(新纪元4)
🎉【小程序上线第三天!突破25用户大关!】🎉 嘿,大家好!今天是我们小程序上线的第三天,我们的用户量已经突破了25个!昨天还是16个,今天一觉醒来竟然有25个!这涨…...
jetson 无显示器配置WIFI
我使用的 jetpack 版本是 6.1,发现自带 NetworkManager 软件包,此软件包包含一个守护程序、一个命令行界面(nmcli)和一个基于 curses 的界面(nmtui)。 可以使用 nmcli 命令配置wifi,nmcli 示例…...
SpringCloudAlibaba实战入门之路由网关Gateway断言(十二)
上一节课中我们初步讲解了网关的基本概念、基本功能,并且带大家实战体验了一下网关的初步效果,这节课我们继续学习关于网关的一些更高级有用功能,比如本篇文章的断言。 一、网关主要组成部分 上图中是核心的流程图,最主要的就是Route、Predicates 和 Filters 作用于特定路…...
【ES6复习笔记】ES6的模块化(18)
模块化的概念 模块化是指将一个复杂的系统分解为多个模块,每个模块完成一个特定的功能,模块之间通过接口进行通信。模块化的目的是提高代码的可读性、可维护性和可重用性。 模块化规范产品, ES6 之前的模块化规范有: CommonJS …...
兰亭妙微:专注医疗 UI 设计,点亮数字化医疗新视界
医疗行业界面解决方案以医患使用者为中心,遵循行业使用习惯和表达方式,优化使用流程、设计简洁、人性化的操作界面,采用插画、三维动画、微动效的创作方法,让用户感受到愉悦易用美观的使用体验。蓝蓝设计与知名企业合作项目有&…...
c# 线程 AutoResetEvent 的Set()函数多次调用
本文部分内容摘自ChatGPT 在 C# 中,AutoResetEvent 是一种用于线程同步的机制,它的行为类似于一个信号量,主要用于在多线程环境中发出信号并控制线程的执行。AutoResetEvent 的主要特点是每当调用 Set() 方法时,信号会被设置&…...
汽车行业的MES系统方案(附案例资料合集)
针对汽车行业的MES系统方案,以下是一些关键点和实施案例: 核心功能: 实时监控:MES系统通过传感器和物联网技术实时监控生产线上的每一个环节,确保信息的及时传递。数据分析:系统对收集的数据进行深度分析&a…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...
基于django+vue的健身房管理系统-vue
开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat12开发软件:PyCharm 系统展示 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 摘要 健身房管理…...
npm install 相关命令
npm install 相关命令 基本安装命令 # 安装 package.json 中列出的所有依赖 npm install npm i # 简写形式# 安装特定包 npm install <package-name># 安装特定版本 npm install <package-name><version>依赖类型选项 # 安装为生产依赖(默认&…...
