ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

嵌入式Linux 笔记基于(OK6410开发板)-----------6.使用汇编伪指令点亮LED

2019-09-08 17:01:28  阅读:327  来源: 互联网

标签:LED R1 点亮 伪指令 开发板 R0 寄存器 r0


如果要点亮OK6410 ARM板上的LED也不是一个简单的事情,之前我们学习51、stm32点亮一个LED是一件很简单的事情,今天我们就来体验一下ARM11的特别之处。

点亮LED的第一步:查看板卡LED对应的原理图,去控制和配置哪些引脚,从下面的原理图中可以确定LED1-LED4 对应的芯片引脚为:GPM0-GPM3。

再来看下底板上LED原理图,看下是输出高电平点亮还是低电平点亮,下图很明显我们需要输出低电平才可以点亮LED。

点亮LED的第二步:查看ARM芯片手册,操作哪些寄存器可以完成LED的点亮,这里主要关注的就是芯片的GPIO章节,具体关注的就是怎么操作GPM0-GPM3 四个引脚,先来截一个图,清楚的看到GPM的三个寄存器:配置寄存器、数据寄存器、上拉下拉寄存器,此外还给出的寄存器的地址和初始值,这里重点关注下配置寄存器和数据寄存器的地址,等下我们要通过这个地址来操作。

接下来再看下GPMCON寄存器中的每一位的作用,这里只截取了GPM0-GPM3,从下表中可以看出GPMCON寄存器的每四位对应一个GPM引脚的状态,当设置为0000时为输入模式,当设置为0001时为输出模式……………其余的暂时不管。这里很明显我们需要设置为输出模式。

接着就是GPMDAT寄存器,这里描述的很清楚,当端口被配置为输入模式时,我们可以直接从端口引脚独处相应的状态,当端口被配置为输出模式时,端口引脚的状态就会根据我们是定的值而发生改变,这里我们肯定是要GPM0-GPM3都输出低电平。

点亮LED的第三步:开始写代码。到了很让人兴奋的一步了,要写代码了,比较悲催的是,这次我们需要用汇编来写,为了让大家都可以看懂这些代码,我们先学习下面4条汇编指令:

指令

意义

LDR  R0,[R1]

从R1地址处读出值到R0

STR  R0,[R1]

将R0的值写入地址为R1处

B  halt

跳转到halt处

LDR  R0,=0x12345678

伪指令 R0 的值为0x12345678

MOV  R0,R1

将R1的值赋给R0,R1也可以是立即数(#1)

 

 

明白上面一些基础指令,开始写代码,第一个裸机程序尽可能简单些,具体代码如下:

.global _start
/*点亮LED  LED1~LED4 :GPM0~GPM3*/
_start:
     /*硬件相关设置*/
    /* Peri port setup */
    ldr r0, =0x70000000
    orr r0, r0, #0x13
    mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff) 
     
/*设置GPM0 GPM1 GPM2 GPM3 为输出模式*/
     ldr r1,= 0x7F008820
	 ldr r0,= 0x1111
	 str r0,[r1] 
	
/*设置GPM0 输出低电平*/
     ldr r1,= 0x7F008824
	 ldr r0,= 0x10000
	 str r0,[r1]
	 		
halt:
	b halt

点亮LED的第四步:编译生成bin文件。烧写到ARM开发板的文件需要是编译后的.bin文件,这一点和单片机不太一样,之前我们都是使用keil软件,一键下载就可以,什么都不用管。现在不一样了, 来感受下这个复杂的过程:

将编写的led.S通过MobaXterm工具复制到Linux系统下进行编译(我这里用的是白问网的ubuntu系统)

标签:LED,R1,点亮,伪指令,开发板,R0,寄存器,r0
来源: https://blog.csdn.net/qq_27762895/article/details/100631037

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有