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…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...