打印
[ZLG-ARM]

讨论下keil自带的启动代码

[复制链接]
3994|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仿真调试时在这个循环上进入死循环,我是说不用仿真器+开发板,只用软件。另外,当大家软件和硬件同时开始时候,不是没有硬件上的支持么,先用软件仿真通过了,再使用仿真器+开发板在做实际的调试,这样不是更快些么?

使用特权

评论回复
5
arm_fan168| | 2009-9-14 17:59 | 只看该作者
软件仿真是有一定局限性的,涉及到跟硬件相关的东西,就得想办法了。

使用特权

评论回复
6
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处就不可以用软件直接仿真呢?

使用特权

评论回复
7
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

粉丝