汇编驱动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使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

Linux编译器--gcc/g++使用方式

《Linux编译器--gcc/g++使用方式》文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念... 目录一、预编译指令1.1预处理功能1.2指令1.3问题扩展二、编译(生成汇编)三、汇编(生成二进制机器语

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li

Linux部署jar包过程

《Linux部署jar包过程》文章介绍了在Linux系统上部署Java(jar)包时需要注意的几个关键点,包括统一JDK版本、添加打包插件、修改数据库密码以及正确执行jar包的方法... 目录linux部署jar包1.统一jdk版本2.打包插件依赖3.修改密码4.执行jar包总结Linux部署jar包部署