ARM裸机开发bootloader—点亮LED灯

发布者:平静宁静最新更新时间:2016-06-07 来源: eefocus关键字:ARM  裸机开发  bootloader  点亮LED灯 手机看文章 扫描二维码
随时随地手机看文章
1、编写LED驱动的流程

a、原理图分析

b、芯片手册

c、思维导图

d、编写代码

2、为什么要点亮led

在嵌入式软件(bootloader、kernel)开发初期,由于串口等硬件尚未进行初始化,所以可以用来调试的手段很有限。这时通常运用点亮led作为调试的重要手段。也就是说不断改动led点亮程序的位置,来查看那段代码出现了问题,然后进行针对性的修改。

下面我用6410为例进行点亮led的介绍,其他的如2440和210流程相似。

a、原理图分析

ARM裸机开发bootloader—点亮LED灯

ARM裸机开发bootloader—点亮LED灯
 

从led的原理图我们可以看到,nLED_*低电平有效,也就是对应的s3c6410GPK4-7低电平,这个时候要引出一个概念:GPIO

什么是GPIO

GPIO(General-Purpose Input/Output Ports):通用的输入/输出端口。在嵌入式系统中,cpu需要控制一些结构简单的外部设备,它们通常只用两种状态(开/关)。如果用串口或USB去控制就显得复杂了些,所以在嵌入式微处理器上就引入了一种“通用可编程I/O端口”,也就是GPIO。

一个GPIO端口至少需要两个寄存器,一个是“控制寄存器”,用于选择端口作为输入还是输出。另一个是存放数据的“数据寄存器”。

b、查看芯片手册

在6410手册上查找GPK端口

 

ARM裸机开发bootloader—点亮LED灯

ARM裸机开发bootloader—点亮LED灯
 

ARM裸机开发bootloader—点亮LED灯
 

 

查看到手册我们得知,将相应的数据填入相应的内存地址就可以了。

c、思维导图

总共分为两步来走

1、设置GPIO控制器,把引脚设置为输出

2、根据原理图设置GPIO的数据寄存器

d、编写led的驱动程序

 

.text
.global _start
_start:
		b reset
		ldr pc, _undefined_instruction
		ldr pc, _software_interrupt
		ldr pc, _prefetch_abort
		ldr pc, _data_abort
		ldr pc, _not_used
		ldr pc, _irq
		ldr pc, _fiq
	
_undefined_instruction:	.word undefined_instruction
_software_interrupt:	.word software_interrupt
_prefetch_abort: 	.word prefetch_abort
_data_abort: 	.word data_abort
_not_used: 	.word not_used
_irq:	.word irq
_fiq:	.word fiq
	
undefined_instruction:
	nop
software_interrupt:
	nop
prefetch_abort:
	nop
data_abort:
	nop
not_used:
	nop
irq:
	nop
fiq:
	nop
reset:
	bl set_peri_port
	bl set_svc
	bl disable_watchdog
	bl disable_interrupt
	bl disable_mmu
	bl light_led

set_peri_port:
	ldr r0, =0x70000000
	orr r0, r0, #0x13
	mcr p15,0,r0,c15,c2,4
	mov pc, lr	
set_svc:
	mrs r0, cpsr
	bic r0, r0, #0x1f
	orr r0, r0, #0xd3
	msr cpsr, r0
	mov pc, lr
	
#define pWTCON 0x7E004000
disable_watchdog:
	ldr r0, =pWTCON	/*mov的操作数最多为8位*/
	mov r1, #0x0
	str r1, [r0]
	mov pc, lr
	
disable_interrupt:
	mvn r1, #0x0
	ldr r0, =0x71200014
	str r1, [r0]
	ldr r0, =0x71300014
	str r1, [r0]
	mov pc, lr
	
disable_mmu:
	mcr p15, 0, r0, c7, c7, 0
	mrc p15, 0, r0, c1, c0, 0
	bic r0, r0, #0x00000007
	mcr p15, 0, r0, c1, c0, 0
	mov pc, lr
	
#define GPKCON0 0x7f008800
#define GPKDAT 0x7f008808
light_led:
	ldr r0, =GPKCON0
	ldr r1, =0x11110000
	str r1, [r0]
	
	ldr r0, =GPKDAT
	ldr r1, =0xa0
	str r1, [r0]
	mov pc, lr
		
运行以后,led会两亮两灭。从程序中我们还会看到一个函数set_peri_port。这个函数是对外围设备基地址初始化。原因是arm11的内存与外围接口分开了,这个时候要用此函数把外围寄存器映射到内存中,整个的过程是通过CP15来完成的,也就是告诉CPU外设寄存器的基地址和地址空间实现映射。

 

 

set_peri_port:
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15, 0, r0, c15, c2, 4
0x70000000是SROM的基地址,这段代码的功能就是告诉cpu外围设备寄存器基地址为0x70000000,地址空间为256M(0x70000000-0x7fffffff)。
关键字:ARM  裸机开发  bootloader  点亮LED灯 引用地址:ARM裸机开发bootloader—点亮LED灯

上一篇:ARM裸机开发bootloader我是bootloader设计师
下一篇:ARM裸机开发bootloader核心初始化

推荐阅读最新更新时间:2024-03-16 14:56

arm-linux-ld 命令详解
本文转自《S3C2410完全开发手册》 在开始后续实验之前,我们得了解一下arm-linux-ld连接命令的使用。在上述实验中,我们一直使用类似如下的命令进行连接: arm-linux-ld -Ttext 0x00000000 crt0.o led_on_c.o -o led_on_c_tmp.o 我们看看它是什么意思: -o选项设置输出文件的名字为led_on_c_tmp.o; “--Ttext 0x00000000”设置代码段的起始地址为0x00000000; 这条指令的作用就是将crt0.o和led_on_c.o连接成led_on_c_mp.o可执行文件,此可执行文件的代码段起始地址为0x00000000(即从这里开始执行)
[单片机]
微软或开发基于Arm的SoC,用于Surface和服务器
  苹果的 M1 芯片可能已经成为许多准备投资,并开始开发自己基于 ARM 芯片的科技公司的动力。 根据最新报告,微软就是其中之一,其定制的芯片将在公司未来的 Surface 系列及其服务器中找到。   微软的许多Surface型号均采用英特尔处理器,只有Surface Laptop 3与AMD芯片一起推出。但是,微软确实转用了与高通公司合作的名为SQ1的基于ARM的芯片,以引入便携式和高端的Surface Pro X。遗憾的是,Surface Pro X上乏善可陈的软件优化意味着它只是另一款价格过高,但表现不佳的产品。   据彭博社报道,微软正在为Surface部门开发单独的芯片,但是目前尚不清楚它的名字,以及该公司将与
[嵌入式]
GLOBALFOUNDRIES和ARM发布尖端芯片制造平台
    在近日举行的2010年世界移动通信大会上,GLOBALFOUNDRIES和ARM公司共同发布了其尖端片上系统平台技术的新的细节,该平台技术专门针对下一代无线产品和应用。全新的芯片制造平台预计能使计算性能提高40%,功耗降低30%,并将待机电池寿命提高100%。这一新的平台包括两种GLOBALFOUNDRIES的工艺:针对移动和消费应用的28nm超低功耗(SLP)工艺和针对要求最高性能的应用的28nm高性能(HP)工艺。     GLOBALFOUNDRIES首席运营官谢松辉表示:“下一代移动产品的成功将越来越取决于是否能够提供PC级的性能、高度整合的、丰富的多媒体体验和更长的电池寿命。这就要求一个强大的技术基础,同时需
[半导体设计/制造]
ARM汇编中lr(r14)寄存器的作用
lr(r14)的作用问题,这个lr一般来说有两个作用: 1.当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。 2.异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要返回的地址。 另外注意pc,在调试的时候显示的是当前指令地址,而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址,大家可以试一下用mov pc,pc,结果得到的是跳转两条指令,这个原因是由于arm的流水线造成的,预取两条指令的结果.
[单片机]
ARM9学习2-ARM镜像文件和Scatter文件
ARM映像文件 什么是arm的映像文件 arm映像文件其实就是可执行文件,包括bin或hex两种格式,可以直接烧到rom里执行。在axd调试过程中,我们调试的是axf文件,其实这也是一种映像文件,它只是在bin文件中加了一个文件头和一些调试信息。映像文件的组成 ARM映像文件是一个层次性结构的文件,包括了域(region),输出段(output section)和输入段(input section)。所谓域,指的就是整个bin映像文件所处在的区域,它又分为加载域和运行域。加载域就是映像文件被静态存放的工作区域,一般来说flash里的 整个bin文件所在的地址空间就是加载域,当然在程序一般都不会放在 flash里执行,一般都会搬到
[单片机]
<font color='red'>ARM</font>9学习2-<font color='red'>ARM</font>镜像文件和Scatter文件
ARM提升车用运算效能,TI和Freescale兴趣浓厚
为因应汽车产业对运算的需求快速攀升,ARM近日宣布针对其Cortex-A、Cortex-R和 Cortex-M处理器提供功能安全支援,并已开放授权,为车用产业提供更强大的协同支援。透过功能安全支援性的扩展,将促使ARM生态系统合作夥伴打造 下一代技术,以满足汽车制造商在规划设计日益复杂的驾驶辅助和资讯娱乐系统上的需求。基于ARM的系统单晶片(SoC)现已在车用领域被广泛采用。 根据ARM的预测,配备先进驾驶辅助系统(ADAS)的车辆在2024年所需的运算能力较2016年的车型将大幅增加至少100倍,其中,功能安全将成为产 业的首要考量。ARM正透过为合作夥伴提供应用处理器功能安全套件,促使此一愿景成真。目前企业必须逐一地
[汽车电子]
一文看懂小米“帝国”:小米之家到小米生态链如何进化?
  作为IPO前夕最后一场发布会, 小米 竭尽所能的秀了一下肌肉,展示了 小米 “杂货铺”的实力和独有的“全家桶”。下面就随手机便携小编一起来了解一下相关内容吧。   5月31日, 小米 年度旗舰深圳发布会上,雷布斯在130分钟内一口气发布了7款产品。小米8、小米8 SE、小米8透明探索版、75寸小米电视4、小米手环3、小米VR一体机、MIUI10……   雷布斯表示选择在深圳开发布会,“因为友商在这里,8年以后,我们为友商介绍一下我们的成果。”   深圳有哪些友商,不言而喻,手机界半壁江山都在这,是名副其实的“手机大本营”。“这次小米发布会具有很强烈的侵略性和进攻性,说白了,把友商几乎全部袭击了一遍。”一位行业资深人士对蓝鲸TM
[手机便携]
AI持续发热,Arm新一代Neoverse CSS V3和CSS N3为客户释放最优性能
AI热潮不仅没有熄火,反而愈演愈烈。2024年,由于市场对于AI硬件的需求永不满足,计算处于变革阵痛中。随着人工智能 (AI) 渗透到教育、就业、制造、医疗和交通等领域,AI 正在改变经济发展和我们的日常生活,而 Arm 是这一切改变的基石。 5年前,Arm 宣布了针对服务器、云和基础设施 CPU 内核的 Neoverse 计划。彼时,Arm制定了一项雄心勃勃的计划,计划开发V、N、E三个CPU内核系列产品,以满足市场的不同细分市场。虽然后续发展与Arm最初预测略有不同,但基于 Neoverse内核定制CPU的设计已经逐渐成为云服务商采用的风潮。 日前,Arm推出新一代Neoverse CPU内核和计算子系统(CSS)——
[半导体设计/制造]
AI持续发热,<font color='red'>Arm</font>新一代Neoverse CSS V3和CSS N3为客户释放最优性能
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved