基于S3C6410的ARM11学习(一) 基础知识

发布者:安静的夜晚最新更新时间:2018-12-18 来源: eefocus关键字:S3C6410  ARM11  基础知识 手机看文章 扫描二维码
随时随地手机看文章

手上有一块OK6410的板子,就想起来花点时间学习下经典的ARM系列ARM11。了解一下ARM11的开发流程,以及怎么跑系统。


ARM11和之前学习的STM32的开发是很不一样的。STM32,都是把代码烧到STM32芯片FLASH中,然后代码从FLASH中执行,而且程序执行是不需要外部挂ram的,因为芯片的内部就集成了一定大小的ram。


而ARM11是不一样的,内部没有FLASH和ram,所以就需要外挂flash设备和ram设备,然后ARM11通过存储控制器来操作这些设备。


clip_image002


从图中就可以直观的看出区别了。对于S3C6410,因为内部没有存储器,所以需要将代码烧录到外挂的FLASH设备,这里FLASH设备可以有多种,但是一定要芯片支持的flash才行,这个在芯片的数据手册中是有说明的。程序执行,是需要内存的,所以还要外挂一个内存设备,用来执行程序,这里内存设备也可以有多种,但是也是要看芯片的数据手册看是支持哪一种内存设备。


两种的开发方式也是不同的。开发STM32程序,我们基本上都是用keil图形化界面开发,编译链接这些东西都是编译器搞定的,我们不需要写makefile,不需要写链接脚本,也不需要写启动代码,因为这些ST公司都为我们做好了。而且写的程序基本上都是用C语言写的。


但是ARM11开发就不一样的,需要在linux中开发,需要安装交叉编译工具链,这个时候就没有图形化开发界面了,需要自己写makefile,需要自己写链接脚本,而且重要的一点,需要自己写bootloader,也就是启动代码。


两种开发的指令也是不一样的,ARM11采用的是ARM指令,也就是32位指令,都是4字节对齐。但是STM32采用的是THUMB2指令,其中包含THUMB的16位指令,所以指令不是严格的4字节对齐。但是写STM32程序的时候,都是用C语言写的,所以对这些就不怎么关心。


但是在ARM11中开发就不一样了,因为开发bootloader代码时,是需要用汇编代码来写的,所以就要熟悉ARM11的汇编指令。会编写makefile,也要会编写链接脚本。


当然,STM32和ARM11还有其他的很多地方不一样。这里,就不介绍了,等到了具体的地方再加说明。


先来了解下ARM11的启动流程。


clip_image004

从ARM启动手册中截取的图。图中的BL是指bootloader。


一、 上电后,程序首先执行BL0程序,这个程序是芯片厂商固化在芯片中的程序。在这程序中,会有一些初始化东西,最重要的是对存储器控制器的初始化,使芯片能够访问外部的FLASH启动设备。


二、 BL0初始化后,会根据启动管脚的选择(因为ARM11支持多种存储介质启动),将外部启动存储设备的前8K数据给拷贝到stepping stone中,然后跳转到stepping stone执行。这个时候,执行的就是我们写的BL1程序。


三、 在BL1程序,我们会对芯片的一些寄存器进行设置,外部的一些外设进行初始化,比如nandflash,dram,串口等等。并对C语言环境进行配置,因为之后的程序有可能是用C语言写的。然后将外部存储启动设备中剩下的超过8K的程序拷贝到DRAM中,然后跳转到DRAM中执行程序。


所以,我们首先是要设定BL1的程序,在这个程序中,我们需要对芯片的一些寄存器进行设置,对外部的外设初始化,然后将FLASH中的代码拷贝到DRAM中,设置C语言环境,也就是配置堆,栈,BSS段清零。


clip_image005


看看STM32启动流程,上电后,芯片会采集boot0,boot1管脚的值,然后决定是从FLASH启动,还是从RAM启动。选择好后,就开始执行启动代码的程序,对堆栈定义(设置堆栈大小,以及地址),然后设置中断向量表,然后进行时钟,NVIC的初始化。接着调用_main,注意这里_main不是我们所写的main函数,而是系统自带的函数,该函数就是初始化C所需资源,也就是设置堆栈,映射代码中变量到内存中,然后再跳转到我们编写的main函数,开始执行我们写的程序。


可见,STM32还是要相对简单一些的,因为STM32,对这些工作,ST公司都已经做好了,也就是在写程序之前添加的那个启动的汇编代码,所以我们关心的就是我们写的main函数设计。但是在ARM11中,我们除了关心我们的main函数设计,还要关心bootloader设计。


二话不说,ARM11走起。


首先,肯定是要安装编译环境。首先需要装一个虚拟机,然后再虚拟机上安装交叉工具链。也就是arm-linux- 的编译工具。这些,网上都有很多教程,参照教程就可以实现了。


然后就是程序的编写,也就是bootloader的编写。在这里,bootloader程序是保存在start.S文件中。另外,程序最终是放在nandflash中,程序是从nandflash中启动的。我对这个bootloader起名叫qboot。


然后就是编写makefile。


Codeall : start.o
	arm-linux-ld  -Tqboot.lds -o qboot.elf  $^
	arm-linux-objcopy -O binary qboot.elf qboot.bin
	arm-linux-objdump -D -S qboot.elf > dump
	
%.o : %.S
	arm-linux-gcc  -g -c $^
%.o : %.c
	arm-linux-gcc  -g -c $^
	
clean:
	rm *.o *.elf dump


其实也很简单,就是将我们写的start.S汇编代码转化为bin文件。因为bin文件才能烧到nandflah中,被芯片执行。


然后就是编写链接脚本


ENTRY(_start) @ 程序入口是_start
SECTIONS{
. = 0x50008000;   @ 链接的起始地址是0x50008000
. = ALIGN(4);     @ 地址4字节对齐
.text :           @ 代码段
{
start.o(.text)    @ start的代码段放在最前
*(.text)          @ *表示剩下的所有代码
}
. = ALIGN(4);     @ 代码段地址,4字节对齐
.data :           @ 数据段
{
*(.data) @ 所有数据段
}
. = ALIGN(4); @ bss段地址,4字节对齐
bss_start = .; @ 表明bss_start段起始地址,后面会用到
.bss :
{
*(.bss) @ 所有bss段
}
bss_end = .; @ 表明bss_start段结束地址,后面会用到
}


链接脚本是用来后面确定程序指令的地址用的。链接脚本中要设置代码段,数据段,bss段的链接地址。这里链接的起始地址是0x50008000,这个是内存的地址范围内,这个在数据手册中有体现。


clip_image007


从图中,看出第一个dram的地址范围是0x50000000开始,到0x5FFFFFFF结束的。所以这里将链接地址设置到这个范围内,因为后面程序会被拷贝到内存中,在内存中执行。


有了基础的这些东西,后面就可以开始程序之旅了。


关键字:S3C6410  ARM11  基础知识 引用地址:基于S3C6410的ARM11学习(一) 基础知识

上一篇:基于arm11处理器S3C6410内核的linux下串口通信实现
下一篇:基于S3C6410的ARM11学习(三) 核心初始化之设置中断向量表

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

关于存储器的一些基础知识整理
RAM Random-Access-Memory,随机存储存储器,可读可写,分为SRAM和DRAM,即静态随机存储器和动态随机存储器,理解上静动态主要体现是否需要刷新,通常DRAM需要刷新,否则数据将丢失;SRAM的效率较好,而成本较高,通常将SRAM作为cache使用。 PSRAM Pseudo static random access memory,伪SRAM伪随机存储器,内部和DRAM相似,接口和SRAM相似,具有自刷新功能,不需要外部刷新。而其成本介于SRAM与DRAM之间。 单\双端口RAM 单端口RAM同一时刻,只能满足读或写某一动作,而双端口RAM存在两套独立的地址、数据、读写控制等,可以同时进行
[单片机]
PIC单片机程序设计的基础知识介绍
pic单片机在学习和工作中均扮演着重要角色,在往期文章中,小编曾对pic单片机汇编指令加以介绍,以帮助大家更好掌握pic单片机。而在本文中,将介绍pic单片机程序设计内容,以助大家写出更为优美的pic单片机程序,主要内容如下。 1、PIC单片机程序的基本格式 先介绍二条伪指令: EQU ——标号赋值伪指令 ORG ——地址定义伪指令 PIC16C5X单片机在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1FFH PIC16C56:3FFH PIC16C57/58:7FFH 一般来说,PIC单片机的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里
[单片机]
PIC单片机程序设计的<font color='red'>基础知识</font>介绍
s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(2)
在上一篇中看了看门狗在linux中驱动实现的整体架构,作为混杂设备和平台设备存在。现在开始看平台设备对应的probe函数。 static struct platform_driver s3c2410wdt_driver = { .probe = s3c2410wdt_probe, .remove = s3c2410wdt_remove, .shutdown = s3c2410wdt_shutdown, .suspend = s3c2410wdt_suspend, .resume = s3c2410wdt_resume, .driver = { .owner = THIS_MODULE, .name = s3c2410-wdt
[单片机]
<font color='red'>s3c6410</font>在linux下的WATCHDOG TIMER(看门狗定时器)驱动(2)
S3C6410 IROM启动
IROM启动(internal ROM Booting),IROM启动是指从OneNAND、SD/MMC卡和NANDFlash存储设备启动的方式,见下图,描述了6410支持的启动模式。 图1 1.IROM启动方式的图解 图2 上图的启动流程根据进一步细化为下面的流程,结合图1和图2理解: 1) 处理器上电后,当OM =1111时,执行6410芯片中IROM的启动代码(bootcodes),这个启动代码称为BL0,它具体会做一些初始化的工作,初始化system clock, D-TCM, devicespecific controller and booting device。 2) 根
[单片机]
<font color='red'>S3C6410</font> IROM启动
触摸屏原理及基础知识
触摸屏在我们身边已经随处可见了,在PDA等个人便携式设备领域中,触摸屏节省了空间便于携带,还有更好的人机交互性。   目前主要有几种类型的触摸屏,它们分别是:电阻式(双层),表面电容式和感应电容式,表面声波式,红外式,以及弯曲波式、有源数字转换器式和光学成像式。它们又可以分为两类,一类需要ITO,比如前三种触摸屏,另一类的结构中不需要ITO,比如后几种屏。目前市场上,使用ITO材料的电阻式触摸屏和电容式触摸屏应用最为广泛。   电阻式触摸屏   ITO是铟锡氧化物的英文缩写,它是一种透明的导电体。通过调整铟和锡的比例,沉积方法,氧化程度以及晶粒的大小可以调整这种物质的性能。薄的ITO材料透明性好,但是阻抗高;厚的ITO材料
[模拟电子]
触摸屏原理及<font color='red'>基础知识</font>
工控机的基础知识之DOS操作系统的介绍
DOS是DiskoperatingSystem的简称,它是个人计算机里的一种操作系统。因为在一些特定工业场合,现在还有很多设备如数控机床等里面的工控机还在使用dos操作系统。使用此操作系统的客户也会遇到一些问题,这里我们给大家简介介绍一下dos操作系统的组成、文件管理系统以及进入dos的方法。 一、DOS系统的组成:DOS操作系统主要有Microsoft公司开发的MS-DOS和旧M公司开发的PC-DOS。 1、DOS系统的功能:一个计算机系统的各部分要协调工作,充分发挥其效能,需要有一个管理者来合理地调度各种资源,包括硬件资源和软件资源,DOS操作系统就是这样一个管理者。 2、DOS系统的组成DOS系统是由一组程序组成
[嵌入式]
工控机的<font color='red'>基础知识</font>之DOS操作系统的介绍
Linux下s3c6410的GPIO操作(5)
1、我们曾经在前面看到这个函数,源码如下: __init void s3c_gpiolib_add(struct s3c_gpio_chip *chip) { struct gpio_chip *gc = &chip- chip; int ret; BUG_ON(!chip- base); BUG_ON(!gc- label); BUG_ON(!gc- ngpio); if (!gc- direction_input) gc- direction_input = s3c_gpiolib_input; if (!gc- direction_output) gc- direction_output = s3c_gpio
[单片机]
电流互感器基础知识
1.1 电流互感器的基本等值电路如图1所示. 图1 电流互感器基本等值电路 图中,Es—二次感应电势,Us—二次负荷电压,Ip—一次电流,Ip/Kn—二次全电流,Is—二次电流, Ie—励磁电流,N1—一次绕组匝数,N2—二次绕组匝数,Kn—匝数比,Kn=N2/N1,Xct—二次绕组电抗(低漏磁互感器可忽略),Rct—二次绕组电阻,Zb—二次负荷阻抗(包括二次设备及连接导线),Ze—励磁阻抗. 电流互感器的一次绕组和二次绕组绕在同一个磁路闭合的铁心上.如果一次绕组中有电流流过,将在二次绕组中感应出相应的电动势.在二次绕组为通路时,则在二次绕组中产生电流.此电流在铁心中产生的磁通趋于抵消一次绕组中电流产生的磁通.在理想条件
[模拟电子]
电流互感器<font color='red'>基础知识</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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