44b0不支持地址重映射

 地址重映射详解:

 

http://blog.sina.com.cn/s/blog_4aad56b001000985.html

 

    实际上对于学习S3C44B0X的人来说,对于这个芯片的启动过程还有很多不解之处,我想谈谈我对启动过程的理解,实际上这将是书写Bootloader重要的一部分。

44B0启动时一定是从0地址开始执行指令,系统中0地址是片选引脚GCS0对应的Bank0空间。如果系统使用Flash作为程序储存设备且具有Bootloader这样的引导代码的话,则0地址一定是Flash区域,即从Flash中的第一条指令执行!但是很多44B0的系统中并不把Bootloader直接放在0址开始的Flash空间中,而是放置在以0x1f0000为起始地址的Flash空间中。这是为什么呢?显然将Bootloader放在0地址为起始地址的空间内是可以在系统加电时被执行来引导系统的。但是,每次烧写新的程序时,都会擦去0地址开始内容,会破坏Bootloader,从而使系统不能启动。所以,把Bootloader放在别的地方,而在0地址开始的位置放入中断向量表,而中断向量表的第一条指令一定是跳转到Bootloader的起始处。之所以把0地址填入中断向量表,这和芯片的体系结构有关,44B0没有重映射(Remap)的功能,在触发中断之后,还是要到Flash中的开头地址空间中执行指令,所以所谓的这段中断向量表完成的是跳转的功能,具体说来不应叫中断向量表,而应该叫做中断跳转表。如果不在Flash的起始地址处烧入中断跳转表的话就无法正确相应中断,从而所有需要中断的程序都不能正常运行。切忌这个中断跳转表一定必不可少!

如下是中断跳转表的源程序,将其编译烧入0地址之中:

AREA boot, CODE, READONLY

VECTORS EQU 0x0c000000

ENTRY

mov pc, #VECTORS
ldr pc, =VECTORS+4
ldr pc, =VECTORS+8
ldr pc, =VECTORS+0x0c
ldr pc, =VECTORS+0x10
ldr pc, =VECTORS+0x14
ldr pc, =VECTORS+0x18
ldr pc, =VECTORS+0x1c

END

还有很多人讨论,书写一个Bootloader最为基本的代码是什么?一般来说,像诸如跑马灯这样的程序可以测出最少代码,你可以想象一个系统只用到Flash,而不用RAM,中断,Cache等东西,这样在Bootloader中仅需要对看门狗、时钟频率、片内锁相环设置,而不用书写中断例程、中断向量表、RAM配置、堆栈指针初始化、DMA配置、电源管理等等,一个简约的Bootloader如下,足以启动系统转入main中执行。

;Watchdog timer
WTCON     EQU 0x01d30000

;Clock Controller
PLLCON     EQU 0x01d80000
CLKCON     EQU 0x01d80004
LOCKTIME    EQU 0x01d8000c

M_DIV EQU 0x48 ;Fin=10MHz Fout=40MHz
P_DIV EQU 0x3
S_DIV EQU 0x2

IMPORT Main    ; The main entry of mon program

    AREA    Init,CODE,READONLY
    ENTRY
    b ResetHandler ;for debug
   
ResetHandler  
    ldr     r0,=WTCON     ;watch dog disable
    ldr     r1,=0x0   
    str     r1,[r0]
   
    ldr r0,=LOCKTIME
    ldr r1,=0xfff
    str r1,[r0]
    ldr r0,=PLLCON    ;temporary setting of PLL
    ldr r1,=((M_DIV<<12)+(P_DIV<<4)+S_DIV) ;Fin=10MHz,Fout=40MHz
    str r1,[r0]
    ldr     r0,=CLKCON  
    ldr     r1,=0x7ff8     ;All unit block CLK enable
    str     r1,[r0]
   
    BL Main
    B .
END

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值