汇编驱动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下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决