SWI软中断:
PC=0x8 swi_hdl,swi中断号的提取,r0,传递C处理程序,不同的中断号,对应处理程序是不一样的。
中断:
PC=0x18 irq_hdl, 中断控制器会将对应中断源的中断处理程序的地址放到VICADDRESS(0-3),在irq_hdl中,只要去读该寄存器中的地址,并执行该函数即可完成对应中断处理程序。
中断
S5pv210启动原理:
S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf
开发板通过拨码开关设定从Nand flash启动
u-boot.bin(启动程序\引导程序),烧写在Nand Flash的0地址
1.开发板上电,CPU最先执行IROM中代码,此代码是三星固化好的。(IROM由硬件将其映射在0地址,因此,系统上电,默认到0地址找程序执行)
2.IROM判断拨码开关,从哪种设备启动系统,IROM就到Nand Flash的0地址去读启动代码BL1(最大读16KB,但我们只读8KB),读到CPU的IRAM中的BL1的位置,(由于IRAM是SRAM,物理特性决定,上电即可使用)。
3.执行BL1即8K代码(u-boot.bin的前8K代码),最为关键的硬件初始化,初始化CPU内部的SDRAM控制器,使得开发板外接的1G的外接内存即可使用。
4.当1GSDRAM内存可以使用后,BL1代码将整个的u-boot.bin从Nand Flash中读到SDRAM中。
5.跳转到SDRAM中的代码执行,继续执行u-boot.bin
IRAM PC=
SDRAM PC=
6.进入u-boot.bin的shell模式:
tarena#
7.敲空格,进入tarena#
不敲空格,u-boot.bin会加载操作系统到SDRAM
8.启动操作系统
1.为什么u-boot.bin要烧写在Nand flash的0地址
2.IROM为什么就能知道从Nand Flash的0地址去读BL1代码?
IROM不仅规定了启动程序的存放位置,还规定了BL1的格式
在u-boot.bin程序的最开始要有16个字节的头信息:
16个字节,4个字
第一个字:指定IROM读取BL1代码的大小,8K
第二个字:保留0
第三个字:累加和,校验值
第四个字:保留0
IROM在执行时,它从启动设备读了第一个字,得知要多少代码到IRAM中,在读的过程中,动态的计算累加和,最后将计算得到的累加和与第三个字中的校验值相比较,如果相等,说明读正确,执行BL1,如果不等,就不执行。
0x000ED38B实际上是u-boot.bin在烧写时有nand write命令完成计算的,计算后,写到第三个字中。
shell.bin
u-boot.bin
tarena#nanderase 0 100000
tarena#nandwrite 0x20008000 0 100000
计算了累加和
IROM执行,IROM读shell.bin的8K,BL1
1.arm10-boot下的代码添加irq_key2
2.该shell.lds
=0xd0020000
start.o
3.Makefile:dram.o start.o reset.o(去掉)
4.make
5.shell.bin
tarena#tftp 20008000 shell.bin
tarena#nand erase 0 100000
tarena#nand write 0x20008000 0 100000
上电:
shell#ledon
硬件初始化的代码
SDRAM控制器的初始化
ARM
s5pv210
GPIO 通用的输入输出接口 特殊功能寄存器
UART 通用串行异步收发器 特殊功能寄存器
Nand Flash
cortex-a8
跳转指令
数据处理
数据传送
算术运算
位运算
比较
加载存储指令
CPSR/SPSR
伪指令
伪操作
汇编C混合调用
异常处理
软中断
中断
启动程序
shell.bin
u-boot.bin