这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 44b0 [求助]看了几天44b0初始化程序,看得那个晕啊

共2条 1/1 1 跳转至

44b0 [求助]看了几天44b0初始化程序,看得那个晕啊

院士
2006-09-17 18:14:16     打赏
44b0 [求助]看了几天44b0初始化程序,看得那个晕啊



关键词: 求助     看了     几天     初始化     程序     看得     那个     晕啊    

院士
2006-12-22 22:43:00     打赏
2楼
问 初学ARM,买了优龙44b0的板子.看了几天44binit.s(初始化代码),看得我晕呼呼的.有几个问题一直不明白.

1.宏定义   MACRO
$HandlerLabel HANDLER $HandleLabel
$HandlerLabel
    sub     sp,sp,#4          ;decrement sp(to store jump address)
    stmfd   sp!,{r0}             ;PUSH the work register to stack(lr do not push because it return to original address)
    ldr     r0,=$HandleLabel ;load the address of HandleXXX to r0
    ldr     r0,[r0]                  ;load the contents(service routine start address) of HandleXXX
    str     r0,[sp,#4]            ;store the contents(ISR) of HandleXXX to stack
    ldmfd   sp!,{r0,pc}         ;POP the work register and pc(jump to ISR)
    MEND

上面的程序是不是把[SP+4]<--[HandleLabel] ??SP到底是多少? "_ISR_STARTADDRESS"又是在哪里定义的?这是分配堆栈空间的程序吗?每一个中断都有不一样的堆栈地址??

2.关于RO bast,RW bast,

IMPORT |Image$$RO$$Base| ,
BaseOfROM DCD |Image$$RO$$Base| ,
GetBaseOfROM
  ldr  r0, BaseOfROM
  mov  pc, lr
资料好像说这些是只读内存定位地址(即程序起始地址),实际上就是RAM中的某地址吧?不过还是不怎么明白上面的程序,这跟ADS1.2中linker 的RO,RW地址有什么区别吗??

3.我对DCD这个指令很是不解!!!!
  [ BUSWIDTH=16
;  DCD 0x11111111 ;Bank0=OM][1:0], Bank0~Bank7=16bit
  DCD 0x11111001 ;Bank0=OM[1:0]  16bit BootRomSST39VF160/SST39VF320) :0x0
;             |||||||-  Bank1=8bit Nand Flash
;             |||||---  Bank2=8bit PDIUSBD12
;             ||||----  Bank3=16bit RTL8019
;             |||-----  Bank4~5=16bit No Uesd
;             --------  Bank6~7=16bit SDRAM
    | ;BUSWIDTH=32
DCD 0x22222220 ;Bank0=OM[1:0], Bank1~Bank7=32bit
    ]
DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) ;GCS0
DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) ;GCS1
以上分配的地址应该是0X01C8_0000开始的吧?但是我却不明白为什么DCD就是分配SFR的BWSCON至BANKCON5????对了在这些程序的前面有这样二句   
LTORG ;声明文字池??其实我还不明白什么文字池
SMRDATA DATA  ;这句呢?SMRDATA是个什么东西,找了一下,44BINIT.S中只有一个这东西.
4.还有一些小问题,比如那个声明文字池指令?在你程序上好像出现了二次,我也不明白,我手上的书说得很少,也许是我悟性差吧,还有,在你程序某些地方顶格出现的0,1,2是什么?如果说是标号,但是又有好几个0和1,这些是什么作用的??把程序COPY到RAM中的那段程序还没仔细看,因为一眼看去,觉得很是有点不难度.
望各位高人指点一下,让我早日明白ARM的真谛.我手有个东西应该是用到44B0的A0-A7,  nWE,nOE,和nGCS中的一个,而这个东西的C语言API函数都有现在的.言而我依然不知道如何下手把它搭到ARM7的板上~~~
1: 楼主,你的板子是FS44B0XI V2.1吗?950RMB,好象贵了点楼主,问下优龙的扳子质量怎么样?技术服务发面呢?我也想买个FS44B0XI V2.1 2: 很简单关于1:ADS的编译器是用R0传递第一个参数的。所以这个宏可以动态的将传入的地址设置到堆栈中,再利用出栈指令跳转到所要去的地方。这样ISP的定位就相当灵活。
关于2:他就是你在ADS编译器里定义的RO地址
关于3:DCD 就是保留4字节空间,后面跟的参数就是在这个保留的空间里填写的数据。你可以理解为C语言里的常量。
关于4:我也不明白,不好意思。 3: 第一个问题可以说的再具体再浅显一点吗还是不太明白,先谢谢! 4: 谢谢大家谢谢sean_wang,我现在基本上理解了,edwinfwd我买的是核心板,只有CPU和FLASH及RAM,520元,个人感觉太贵了,没什么技术支持。

对了sean_wang,如果ADS编译器里不指定RW,那是不是RW区紧接在RO区后面呢?

关于第四个问题那些0,1,2的确是标号,是局部标号来的
例:b %F1  ;向前跳到1标号处。  

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]