汇编驱动LED闪烁—正点原子Linux阿尔法开发板

2024-03-02 21:32

本文主要是介绍汇编驱动LED闪烁—正点原子Linux阿尔法开发板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. I.MX6ULL IO初始化流程:

①、使能时钟:CCGR0~CCGR6这7个寄存器控制着6ULL所有外设时钟的使能

②、IO复用:寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03控制着GPIO1_IO03口复用

③、配置电气属性:寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03是设置GPIO1_IO03的电气属性

④、配置GPIO功能,设置输入输出:设置GPIO1_DR寄存器bit3控制着GPIO1_IO03口输出高低电平,为1表示输出高电平,为0表示输出低电平。

2.汇编语言程序代码

.global _start @全局标号_start:/*使能所有外设时钟 */ldr r0, =0x020c4068 @CCGR0ldr r1, =0xffffffff @要写入CCGR0的数据str r1, [r0]        @将0xffffffff写入到CCGR0中ldr r0, =0x020c406c @CCGR1str r1, [r0]        @将0xffffffff写入到CCGR1中ldr r0, =0x020c4070 @CCGR2str r1, [r0]        @将0xffffffff写入到CCGR2中ldr r0, =0x020c4074 @CCGR3str r1, [r0]        @将0xffffffff写入到CCGR3中ldr r0, =0x020c4078 @CCGR4str r1, [r0]        @将0xffffffff写入到CCGR4中ldr r0, =0x020c407c @CCGR5str r1, [r0]        @将0xffffffff写入到CCGR5中ldr r0, =0x020c4080 @CCGR6str r1, [r0]        @将0xffffffff写入到CCGR6中/*设置GPIO1_IO03 PIN的复用为GPIO 也就是设置IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03=5IOMUXC_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_IO03的电气属性 也就是寄存器:IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03寄存器地址为0x020e02f4bit0:     0 低速率bit5:3    110   R0/6驱动能力 bit7:6    10   100MHz速度bit11     0    关闭开路输出bit12     1    使能pull/kepperbit13     0    kepperbit5:14   00   100K下拉bit16     0    关闭hys*/ldr r0, =0x020e02f4ldr r1, =0x10b0str r1, [r0]/*设置GPIO设置GPIO1_GDIR,设置GPIO1_IO03为输出GPIO1_GDIR寄存器地址为0x0209c004,设置GPIO1_GDIR寄存器bit3为1也就是设置GPIO1_IO03为输出*/ldr r0, =0x0209c004ldr r1, =0x8 str r1, [r0]/*先使LED处于熄灭状态,也就是设置GPIO_DR寄存器的bit3为1进入延时然后打开LED,设置GPIO_DR寄存器的bit3为0GPIO_DR寄存器地址为0x0209c000*/LED:ldr r0, =0x0209c000ldr r1, =0x8str r1, [r0]bl delayldr r1, =0str r1, [r0]bl delayb LED             @循环指令,无限循环LED函数b .               @死循环,防止CPU跑飞/*延时函数*/delay:ldr r2, =1000000ldr r3, =0
delay_loop:sub r2, r2, #1    @r2=r2-1cmp r2, r3        @cmp 比较r2 r3 如果相等Z为1bne delay_loop    @bne 为当Z为1时执行跳转mov pc, lr        @函数调用返回

3.编译程序

Makefile文件编写

led.bin : led.sarm-linux-gnueabihf-gcc -g -c led.s -o led.oarm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elfarm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin arm-linux-gnueabihf-objdump -D led.elf > led.dis
clean:rm -rf *.o led.bin led.elf led.dis

在终端中进入保存文件的文件夹之后,make生成.bin文件后,并不能直接将该文件烧入开发板中,使用官方提供的imxdownlaod文件,拷贝到该文件夹后,在终端中输入:

./imxdownload <.bin file> <SD Card>

:插入读卡器之后,将读卡器与虚拟机进行连接,即可通过以下代码查看SD卡位置:

ls /dev/sd*

拔插读卡器,对比前后区别,确定读卡器在虚拟机中的位置。
烧录完成后,将SD卡插入开发板中,确保开发板拨位开关在SD卡所对应的位置上,如图:
在这里插入图片描述
设置好以后,通电按一下复位,即可观察到LED灯在闪烁。

这篇关于汇编驱动LED闪烁—正点原子Linux阿尔法开发板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/767483

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了

Linux 下的Vim命令宝贝

vim 命令详解(转自:https://www.cnblogs.com/usergaojie/p/4583796.html) vi: Visual Interface 可视化接口 vim: VI iMproved VI增强版 全屏编辑器,模式化编辑器 vim模式: 编辑模式(命令模式)输入模式末行模式 模式转换: 编辑-->输入: i: 在当前光标所在字符的前面,转为输入模式

Linux和Mac分卷压缩

使用 zip 命令压缩文件 使用 zip 命令压缩文件,并结合 split 命令来分卷: zip - largefile | split -b 500k 举例: zip - ./tomcat.dmg |split -b 500k 上述命令将文件 largefile 压缩成 zip 包并分卷成不超过 500k 的文件,分解后文件名默认是 x* ,后缀为 2 位a-z 字母,如 aa、ab。

Linux文本三剑客sed

sed和awk grep就是查找文本当中的内容,最强大的功能就是使用扩展正则表达式 sed sed是一种流编辑器,一次处理一行内容。 如果只是展示,会放在缓冲区(模式空间),展示结束后,会从模式空间把结果删除 一行行处理,处理完当前行,才会处理下一行。直到文件的末尾。 sed的命令格式和操作选项: sed -e '操作符 ' -e '操作符' 文件1 文件2 -e表示可以跟多个操作

WDF驱动开发-WDF总线枚举(一)

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间,总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚