|
本帖最后由 Romatom 于 2012-11-16 22:15 编辑
ARM处理器中的看门狗在启动时需要关闭,不然CPU会不断重启,这点我知道。但是在韦东山的《嵌入式Linux应用开发》中有两段程序:
程序段一:len_on.S
@******************************************************************************
@ File:led_on.S
@ 功能:LED点灯程序,点亮LED1
@******************************************************************************
.text
.global _start
_start:
LDR R0,=0x56000010 @ R0设为GPBCON寄存器。此寄存器
@ 用于选择端口B各引脚的功能:
@ 是输出、是输入、还是其他
MOV R1,#0x00000400
STR R1,[R0] @ 设置GPB5为输出口, 位[10:9]=0b01
LDR R0,=0x56000014 @ R0设为GPBDAT寄存器。此寄存器
@ 用于读/写端口B各引脚的数据
MOV R1,#0x00000000 @ 此值改为0x00000020,
@ 可让LED1熄灭
STR R1,[R0] @ GPB5输出0,LED1点亮
MAIN_LOOP:
B MAIN_LOOP
程序段二:crt0.S
@******************************************************************************
@ File:crt0.S
@ 功能:通过它转入C程序
@******************************************************************************
.text
.global _start
_start:
ldr r0, =0x56000010 @ WATCHDOG寄存器地址
mov r1, #0x0
str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启
ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
@ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
bl main @ 调用C程序中的main函数
halt_loop:
b halt_loop
这两段程序第二段关闭了看门狗,第一段没有关闭看门狗,两段程序都能成功运行。为什么第一段程序启动的时候,CPU没有不断重启?
难道是是因为第二段代码要转入main去执行C函数,所以需要关闭看门狗,到底怎么回事儿?高手们,望解答...... |
|