ARM裸机开发bootloader核心初始化

发布者:SereneWanderer最新更新时间:2016-06-07 来源: eefocus关键字:ARM  裸机开发  bootloader  核心初始化 手机看文章 扫描二维码
随时随地手机看文章
一、异常向量表

1、异常的定义

异常:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事情。

2、异常的类型

ARM处理器有7种Exception type分别为:Reset、Undefined instructions、Software interrupt、Prefetch Abort、Data Abort、IRQ、FIQ

2、什么是异常向量

当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,而这个固定的地址,就称为异常向量。

3、异常向量表

由七个异常向量及其处理函数跳转关系组成的表为异常向量表。

下面是一个例子:

 

start.S

.text
.global _start
_start:
		b reset
		ldr pc, _undefined_instruction
		ldr pc, _software_interrupt
		ldr pc, _prefetch_abort
		ldr pc, _data_abort
		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:
	nop	

 

 

gboot.lds

 

OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS{
	. = 0x50008000;
	. = ALIGN(4);
	.text :
	{
	start.o(.text)
	*(.text)
	}
	
	. = ALIGN(4);
	.data :
	{
	*(.data)
	}
	
	. = ALIGN(4);
	bss_start = .;
	.bss :
	{
	*(.bss)
	}
	bss_end = .;
}


 

Makefile

 

all : start.o
	arm-linux-ld -Tgboot.lds -o gboot.elf $^
	arm-linux-objcopy -O binary gboot.elf gboot.bin
	
%.o : %.S
	arm-linux-gcc -g -c %.S 
%.o : %.c
	arm-linux-gcc -g -c %.c 
	
.PHONY: clean
clean:
	rm *.o *.elf *.bin
	
关于异常向量表,对于2440和6410以上就结束了,不过对于210还要添加BL1头

 

./mkv210_image led.bin 210.bin

/home/dnw 210.bin 0x50008000

如果不加头的话,就无法正常工作。原因是210在上电后会运行厂家已经固化在SRAM中的BL0,这个时候,由BL0来调用BL1,BL1运行会产生校验码(这个校验码就在添加的头里面)并与BL0里的校验码进行比对,确认是否为要运行的BL1。成功后就运行BL1.

Header Info (check sum(user writing)、BL1 size(user writing)).

二、设置SVC模式

此时设置ARM的工作模式为SVC(supervisor),这样可以使用更多的寄存器,同时拥有很大的操作权限。具体可以参考下图

ARM裸机开发bootloader核心初始化
 

通过上图对ARM的状态寄存器的解释,我们可以得知将CPSR的后五位设置为0b10011就可以使用SVC模式。同时我们还要关闭irq和fiq。

具体实现代码:

续上start.S

 

reset:
	bl set_svc
	
set_svc:
	mrs r0, cpsr
	bic r0, r0, #ox1f
	orr r0, r0, #oxd3
	msr cpsr, r0

三、关闭看门狗

1、什么是看门狗

有些嵌入式设备要长期工作在无人看管的情况下,这个时候就需要,当发生死机时,设备可以实现自启动。而watchdog就可以完成这样一种功能。watchdog模块是一硬件设备。其作用就是当系统发生死机时,帮助系统实现自启动。

2、看门狗如何工作

看门狗模块有三部分组成,分别为时钟产生器,计时器,重启器。当开启看门狗时,计时器就开始了计时,系统必须在计时结束前对看门狗重新设置使其重新计时,简称喂狗。否则它会认为系统发生了死机,就重启系统。

3、为什么要关闭看门狗

一般情况下,bootloader的运行过程中不会发生死机,所以我们就关闭看门狗。否则我们还要不断的喂狗,而占用系统时间。

下面是6410中的watchdog的解释

ARM裸机开发bootloader核心初始化
 

 

代码编写:

 

reset:
	bl set_svc
	bl disable_watchdog
	
set_svc:
	mrs r0, cpsr
	bic r0, r0, #0x1f
	orr r0, r0, #0xd3
	msr cpsr, r0
#define pWTCON 0x7E004000
disable_watchdog:
	ldr r0, =pWTCON	/*mov的操作数最多为8位*/
	mov r1, #0x0
	str r1, [r0]
注:我们这里把watchdog的控制寄存器直接清零,也可以达到效果。

四、关闭中断

关闭中断要两个环节:1、CPSR中的I F位 置1,在设置SVC时我们已经做过,所以这里就不做了。2、对中断屏蔽寄存器进行设置

2440的板子需要设置INTMSK寄存器

210的板子需要设置4组寄存器VICINTENCLEAR

6410的板子需要设置2组寄存器VIC0INTENCLEAR和VIC1INTENCLEAR

下面我们以6410为例子进行介绍:

ARM裸机开发bootloader核心初始化
 

编码如下

 

disable_interrupt:
	mvn r1, #0x0
	ldr r0, =0x71200014
	str r1, [r0]
	ldr r0, =0x71300014
	str r1, [r0]

五、关闭MMU和Cache

1、前言

ARM裸机开发bootloader核心初始化
 

从ARM的存储体系,我们可以看到,位于金子塔顶端的是处理器的寄存器,后面依次为TCM和辅助存储器。显然从金子塔的底部到顶部存储器的存取速度愈来愈快,价格也越来越高,而数量却越来越少。

2、什么是Cache

我们都知道处理器的访问速度是非常快的,而内存的速度却慢的很。这样当处理器在访问内存时就出现了问题。而Cache恰恰就用来解决这个问题。从物理结构上来讲,Cache位于处理器与内存之间,cache中存储了处理器经常从内存访问的数据与指令,也就是cache是内存的部分拷贝。这时处理器往往先访问cache,如果cache中没有想要的数据,才去内存查找。而cache的访问速度要比内存大的多,这样就提高了整个的运行效率。

cache又分为:I-Cache和D-Cache

3、MMU

谈到MMU这个时候就要先说一下虚拟地址:作为一个程序员,大家都知道有逻辑地址和物理地址之分,如果我们不直接和硬件打交道,我们根本不用去管物理地址,只要用逻辑地址就可以了。而MMU就是把逻辑地址转换为物理地址的协议。

假如我们只使用物理地址就会出现两个问题要解决:1、地址冲突(两段程序使用同一物理地址)。2、范围小

我们使用了MMU就可以把逻辑地址映射到物理地址,再具体的说就是两段程序使用的是同一逻辑地址,而经过映射后,它们都被映射到不同的物理地址。还有就是地址空间变大了。具体的物理地址的分配不用程序员来管,都要MMU来分配,这样就可以更好的利用物理空间。

ARM11之间Cache位于MMU前面靠近处理器,也就是说cache使用的是虚拟地址(逻辑地址),而ARM11之后包括ARM11的MMU靠近内存,这个时候使用的是物理地址。

4、为什么要关闭MMU和Cache

MMU和Cache在使用之前要进行配置,在ARM初始化的时候还没有进行配置,所以这个时候要关闭它们。还有就是避免Bootloader将linux内核下载到D-cache中,而I-cache这个时候可以不管它。

关闭MMU和Cache的步骤:

1、使I-cache和D-cache失效

2、关闭I-Cache和D-Cache,关闭MMU

下面是cp15的寄存器解释:

ARM裸机开发bootloader核心初始化
 

 

代码如下:

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

2440、6410和210的cp15是一样的。所以这里的代码也是一样的。

 

整个核心初始化的代码为:

 

.text
.global _start
_start:
		b reset
		ldr pc, _undefined_instruction
		ldr pc, _software_interrupt
		ldr pc, _prefetch_abort
		ldr pc, _data_abort
		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_svc
	bl disable_watchdog
	bl disable_interrupt
	bl disable_mmu
	
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
关键字:ARM  裸机开发  bootloader  核心初始化 引用地址:ARM裸机开发bootloader核心初始化

上一篇:ARM裸机开发bootloader—点亮LED灯
下一篇:ARM裸机开发bootloader代码搬移从SRAM到DRAM

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

ARM:64位Android手机明年上半年面世
    联发科才刚发表8核智能手机芯片,全球处理器IP授权厂安谋(ARM)手机处理器部门、市场营销策略副总裁Noel Hurley昨(21)日指出,也许「8」就是联发科的幸运号码,这回推出8个Cortex-A7的芯片,在大陆市场的接受度出乎预料地好。他也认为,继三星、联发科之后,将会有更多厂商加入8核心的竞争。以下为访谈纪要。      问:如何看联发科8核心芯片的机会?      答:三星率先以ARM大小核的架构推出4个大核加4个小核的8核心芯片,而联发科则选择创新的方式采用8个小核为智能型手机设计,联发科这次勇于扮演领导者的角色,令我很佩服。联发科日前深圳的8核心芯片发表会让我很吃惊,过去联发科的发表会大约仅200人,但这次的人
[手机便携]
ARM体系寄存器
1.CPSR(current program status register)CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息. 2.SPSR(备份程序状态寄存器)当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。 3.SP(堆栈指针寄存器)用于保存堆栈的出入口处地址。 4.PC(程序计数器)指向正在取指的指令。 5.LR(链接寄存器)存放子程序的返回地址。
[单片机]
初次接触ARM需要搞清楚的ARM开发思路
做个最小系统板:如果从没有做过ARM的开发,建议一开始不要贪大求全,把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题,所以建议先布一个仅有Flash、SRAM或SDRAM、CPU、JTAG、和复位信号的小系统板,留出扩展接口。使最小系统能够正常运行,任务就完成了一半,好在ARM的外围接口基本都是标准接口,如果已有这些硬件的布线经验那就更好了。 写启动代码 根据硬件地址先写一个能够启动的小代码,包括以下部分:初始化端口、屏蔽中断、把程序拷贝到SRAM中、完成代码的重映射、配置中断句柄,连接到C语言入口。也许一些示例程序当中bootloader会有很多东西,但是不要被这些复杂的程序所困扰,因为这
[单片机]
初次接触<font color='red'>ARM</font>需要搞清楚的<font color='red'>ARM</font><font color='red'>开发</font>思路
ARM平台下无线网卡的配置
前言 看了下上次博客时间,大概是毕业后到目前两个多月了没有更新博客,突然发现自己正在变得越来越懒,这可不是一个好的征兆。除过找工作一个礼拜的时间,算起来已经工作了快2个月了,目前也正在试用期,对工作也慢慢有所适应。曾经在大学听老师说“上班后第一天、第一个礼拜、第一个月都是很难受的”,这次有所体会,慢慢的对周围各种事物熟悉下来也就不会觉得难受了。 ARM平台下无线网卡的配置和平时在windows或者linux下有点不太一样,对于热衷于window的朋友可能会觉得吃力,完全没有图像界面点击,只能靠一些命令来完成。刚好周末有时间,总结下这段时间调试无线网卡相关的操作。 网卡介绍 项目中暂时调试使用的无线网卡型号是:HLK-3M0
[单片机]
<font color='red'>ARM</font>平台下无线网卡的配置
SiMa.ai阐述如何利用MLSoC实现可伸缩边缘处理平台
本文作者:SiMa.ai业务开发和系统应用副总裁Kavitha Prasad 边缘AI设备的生命周期可能长达数年甚至数十年,需要设备支持处理未来的机器学习(ML)算法。 尽管我们可能还不知道这些算法会是什么样子,但可以肯定的是,它们将比我们目前为边缘AI设备提供的工作负载更加复杂,要求更高。 如今,大多数边缘AI设备的每瓦功率约为4 TOPS至5 TOPS。这对于基本的ML例程已经足够了,但是与AI计算的数据中心产品相比无可比拟。 降低边缘AI的功率曲线 SiMa.ai的初衷是缩小这种性能鸿沟:重新定义当今与边缘AI相关的性能。然而,要在边缘AI设备中达到任何类似于云性能的性能,都需要显着降低功耗,或者说,是
[嵌入式]
安富利基于ARM mbed物联网平台,提供更强大的设计链增值服务
上海2016年11月1日 全球领先的技术分销商安富利公司 (NYSE: AVT)今日宣布,将采用ARM mbed 物联网平台进行物联网(IoT)参考方案设计。这将有助于提升安富利在IoT领域的创新设计能力,此服务面向亚洲市场,为客户提供更出色的设计链增值服务,并帮助供应商创造市场需求。 ARM mbed物联网平台提供了所有关键组件,通过 ARM 的 mbed 操作系统、mbed Cloud以及 mbed 开发者社区,简化了下一代IoT应用的开发与部署。借助该平台,安富利的开发人员可以获取ARM mbed 合作伙伴生态系统的广泛资源,包括全面的硬件开发工具包数据库、可重复使用的软件组件资源库、各种参考应用程序、说明文档以及网络开发工具
[物联网]
东芝推出TXZ+TM族高级系列基于Arm® Cortex®-M4的新款M4G组MCU
东芝推出TXZ+TM族高级系列中用于高速数据处理基于Arm® Cortex®-M4的新款M4G组微控制器 中国上海,2021年9月8日——东芝电子元件及存储装置株式会社(“东芝”)今日宣布,已开始量产M4G组中用于高速数据处理的20种新器件。M4G组是TXZ+TM族高级系列的新成员,采用40nm工艺制造。这些产品采用带FPU的Arm Cortex-M4内核,运行频率高达200MHz,内部集成2MB代码闪存和32KB数据闪存,具有10万次的写入周期耐久性,此外还提供了丰富的接口和通信选项。因此,M4G组器件非常适用于办公设备、楼宇和工厂自动化应用。 M4G组中的微控制器配置增强型的通信功能,除UART、FUART、TS
[单片机]
东芝推出TXZ+TM族高级系列基于<font color='red'>Arm</font>® Cortex®-M4的新款M4G组MCU
嵌入式网络收音机的ARM实现
收音机作为接收广播的工具,经过漫长的发展过程,由单波段发展到多波段,由电子管,晶体管发展到集成电路,由机械调谐发展到数字调谐功能等,其技术和品质都有了长足的进步。   如今,在收音机这个家族中新的成员也在不断加入,如卫星广播接收机等。当社会进入网络时代后,更是出现了网络收音机这种跨越全球的信息接收设备。但是,目前这种网络收音机大多是通过基于PC机上的软件开发来实现的其功能的,也就是说这种网络收音机不能脱离电脑这种相对比较大的和比较昂贵的设备。为了克服PC机形式的网络收音机的缺点,本文研究了一种基于ARM的嵌入式技术的网络收音机的设计方案。 该方案以ARM处理器及其外围模块作为硬件平台,以嵌入式Linux作为操作系统,以M
[工业控制]
嵌入式网络收音机的<font color='red'>ARM</font>实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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