共2条
1/1 1 跳转至页
44b0 [求助]看了几天44b0初始化程序,看得那个晕啊
问
初学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标号处。
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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |