[ZLG-ARM] 讨论下keil自带的启动代码

[复制链接]
4886|6
 楼主| irisjyf 发表于 2009-9-7 23:47 | 显示全部楼层 |阅读模式
刚接触LPC2368,以前玩过51,用的是keil,所以就习惯性的用了keil做ARM,看了keil做ARM的示例,就开始实验了,直接上手,工程建好后,直接选用keil自带的startup.s启动代码,结果到了
OSC_Loop        LDR     R3, [R0, #SCS_OFS]    ; Wait for main osc stabilize
                       ANDS    R3, R3, #OSCSTAT
                       BEQ     OSC_Loop
                       ENDIF
这个段落就成了死循环,后来用单步检查出来这段的死循环。

我就选用了MCB2300开发板自带的startup.s启动代码,没有进入死循环。查看了下内容,发现完全不一样,不知道为什么。感觉keil给挖了个坑,可是想了象,keil作为一个专门的开发工具,不可能这么做的,这么做了只能限制了他作为开发者的第一选用开发包
arm_fan168 发表于 2009-9-10 09:47 | 显示全部楼层
那个循环的作用是等待振荡器稳定,跟具体的硬件有关系。
LIU_XF 发表于 2009-9-10 11:36 | 显示全部楼层
Wait for main osc stabilize
 楼主| irisjyf 发表于 2009-9-14 14:43 | 显示全部楼层
那为什么说在keil仿真调试时在这个循环上进入死循环,我是说不用仿真器+开发板,只用软件。另外,当大家软件和硬件同时开始时候,不是没有硬件上的支持么,先用软件仿真通过了,再使用仿真器+开发板在做实际的调试,这样不是更快些么?
arm_fan168 发表于 2009-9-14 17:59 | 显示全部楼层
软件仿真是有一定局限性的,涉及到跟硬件相关的东西,就得想办法了。
 楼主| irisjyf 发表于 2009-9-15 10:56 | 显示全部楼层
但我觉得keil给出的例程measure.uv2是直接用keil 软件仿真的,如果这样,表明keil完全支持软件仿真,这就是说早期我们完全脱离硬件的限制;

; Reset Handler

                EXPORT  Reset_Handler
Reset_Handler   


; Setup VPBDIV
                IF      VPBDIV_SETUP <> 0
                LDR     R0, =VPBDIV
                LDR     R1, =VPBDIV_Val
                STR     R1, [R0]
                ENDIF


; Setup PLL
                IF      PLL_SETUP <> 0
                LDR     R0, =PLL_BASE
                MOV     R1, #0xAA
                MOV     R2, #0x55

;  Configure and Enable PLL
                MOV     R3, #PLLCFG_Val
                STR     R3, [R0, #PLLCFG_OFS]
                MOV     R3, #PLLCON_PLLE
                STR     R3, [R0, #PLLCON_OFS]
                STR     R1, [R0, #PLLFEED_OFS]
                STR     R2, [R0, #PLLFEED_OFS]

;  Wait until PLL Locked
PLL_Loop        LDR     R3, [R0, #PLLSTAT_OFS]
                        ANDS    R3, R3, #PLLSTAT_PLOCK
                        BEQ     PLL_Loop


;  Switch to PLL Clock
                MOV     R3, #(PLLCON_PLLE:OR:PLLCON_PLLC)
                STR     R3, [R0, #PLLCON_OFS]
                STR     R1, [R0, #PLLFEED_OFS]
                STR     R2, [R0, #PLLFEED_OFS]
                ENDIF   ; PLL_SETUP
上面这段启动程序是摘录自measuer.uv2中的startup.s中的,上面颜色标记出的代码没有硬件支持仍然可以运行。
为什么到了osc处就不可以用软件直接仿真呢?
arm_fan168 发表于 2009-9-15 12:27 | 显示全部楼层
PLL_Loop        LDR     R3, [R0, #PLLSTAT_OFS]
                        ANDS    R3, R3, #PLLSTAT_PLOCK
                        BEQ     PLL_Loop
与那个寄存器的复位值有关系。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

12

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部