Linux平台下友坚4412开发板裸机开发指南(一)
版权声明
本手册版权归属本人所有, 并保留一切权力。非经本人同意(书面形式),任何单位及个人不得擅自摘录本手册部分或全部,违者我们将追究其法律责任。
更新说明:
日期 |
说明 |
2014-12-1 |
本手册第一次发布,任何问题请在论坛中跟贴反馈。 |
第一章 简介
第一节 简介
4412的Exynos是一个32位RISC成本效益,低功耗,性能优化的Coretex-A9四核基于微处理器解决方案的智能手机应用程序。提供优化的硬件性能有关智能手机的移动电信服务和一般应用,4412的Exynos采用64位/128位的内部总线架构和许多强大的硬件加速器为不同的任务。这些任务,例如是,运动视频处理,图像信号处理中,显示控制和缩放。集成多格式编解码器(MFC)支持的MPEG-2/4,H.263,H.264和VC1的解码的编码和解码。这种硬件编码器/解码器支持实时视频会议和数字电视了。
内存系统专用DRAM端口和静态存储器端口。专用DRAM端口支持LPDDR2接口的高带宽。静态存储器端口支持NOR闪存和ROM类型外部存储器和组件。
为了降低系统总成本和提高整体功能,的Exynos4412包括许多硬件外设,如TFT24位真彩色LCD控制器,相机接口,MIPI DSI,CSI-2,系统管理器的电源管理,嵌入式GPS和GLONASS ,MIPI称为SLIMbus接口,MIPI HSI,4个UART,24通道DMA,定时器,通用I / O端口,三个I2S,S/ PDIF,8 IIC-BUS接口,3个HS-SPI,USB主机2.0,USB2.0设备运行高速(480Mbps的),两个USB HSIC,只SD主机和高速多媒体卡接口,芯片到芯片接口,以及四个锁相环时钟发生器。
很多嵌入式开发者和爱好者,特别是初学者,如何从底层开始了解和学习Cortex A9,绝非是一件容易的事!为此,在我学习的工程中我将我的学习经验记录下来,可以给你们一个参考。
这份裸机指南的内容有些参考《嵌入式Linux系统开发完全手册_基于4412_上册.pdf》。
第二节 RAM的体系结构
1)cpu与register
(1)cpu的作用是专门用于计算
(2)寄存器来保存数据,寄存器只有地址,没有名字
(3)cpu与user交互使用cpu指令
(4)cpu的运行需要时钟与电源
(5)由于寄存器的数量有限,更多的指令和数据需要存储到内存
2)cpu访问内存过程:
(1)从控制总线发送命令告诉内存要读或写
(2)从地址总线发送地址告诉内存要访问的地址, 地址总线一般是32条,能访问 0 -4G的空间
(3)从数据总线发送或接受数据,数据总线一般是32条,一次能传输4个字节的数据
3)ARM核心的构成
ALU :算术逻辑单元
MAC: 乘累加单元
寄存器:保存数据和地址
桶形移位器:用于移位操作
4)ARM寄存器
(1)arm寄存器
(a)cortex-a9核心中的寄存器都是32位
(b)寄存器用来保存数据和地址
(c)寄存器一般使用r为前缀(Register)
(d)arm1176有18个寄存器:包含16个数据寄存器和2个状态寄存器
通用寄存器r0 ---- r15
特殊功能寄存器
r13:堆栈指针(sp)
r14:链接寄存器(lr),保存用于调用子程序的返回地址
r15:程序计数器
cpsr:程序状态寄存器
spsr:备份状态寄存器
(2)状态寄存器----cpsr
(a)cpsr寄存器用于监视和控制程序的运行状态
(b)cpsr分为4个8位数据区域:标识域、状态域、扩展域和控制域
[31:28]:The condition code flags
N: N=1 表示运算的结果为负数,N=0 表示运算的结果表示为正数或零
Z: Z=1表示运算的结果为零,Z=0表示运算的结果为零
C:可以有4种方法设置C的值:
(a)加法运算(包括比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,否则C=0。
(b)减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。
(c)对于包含移位操作的非加/减运算指令,C为移出值的最后一位。
(d)对于其他的非加/减运算指令,C的值通常不改变。
V:可以有2种方法设置V的值:
(a)对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表表示结果溢出。
(b)对于其他的非加/减运算指令,V的值通常不改变。
[27:8]:Reserved(保留位)
[7:6]:The interrupt disable bits
I:IRQ中断使能 1:disable 0:enable
F:FIQ中断使能 1:disable 0:enable
[5]:The T bit
T:ARM运行状态 1: THUMB 0:arm
M[4:0]:The mode bits(运行模式位)
0b10000:用户模式
0b10001:FIQ模式
0b10010:IRQ模式
0b10011:管理模式
0b10111:中止模式
0b11011:未定义模式
0b11111:系统模式
5)ARM工作模式
(1)arm工作模式就是系统所处的状态,每种工作模式有不同的权限要求和作用
(2)arm一共有7中工作模式,6种特权模式,5种异常模式
user:普通模式 正常程序执行的模式(特权模式可以切换到普通模式,但不能将普通模式切换到特权模式)
system:跟用户模式一样 用于运行特权级的操作系统任务但可以切换到其他模式(可以通过软件来进行模式进行切换 或者发生各类中断、异常时cpu自动进入相应的模式)
以下为异常模式
supervisor:管理模式 操作系统管理的模式
abort:数据访问终止模式
Undefined: 未定义指令终止模式
Interrupt:中断模式
Fast interrupt:快速中断模式 适用于对一个突发事件的快速响应
第三节 关于开发环境
1) 学习前提:学习过简单的C语言和ARM汇编语言
2) 开发平台:windows 7 + 虚拟机Ubuntu,使用source insight编写代码
3) 交叉编译器:arm-linux-gcc-4.5.1
注:交叉编译器的安装方法可参考<<友坚UT4412BV03开发板用户手册>>。
4) 配套开发板:所有程序均在UT4412BV03上成功测试运行过。