14.3.2 reset标号

14.3.2  reset标号

reset标号的代码在处理器启动的时候最先被执行。

 

106 /*

107 * the actual reset code

108 */

109

110 reset:

111   /*

112    * set the cpu to SVC32 mode

113    */

114   mrs r0,cpsr                   // 保存CPSR寄存器的值到r0寄存器

115   bic r0,r0,#0x1f               // 清除中断

116   orr r0,r0,#0xd3

117   msr cpsr,r0                   // 设置CPSR为超级保护模式

118

119 /* turn off the watchdog */     // 关闭看门狗

120 #if defined(CONFIG_S3C2400)

121 # define pWTCON   0x15300000 // 看门狗寄存器地址

122 # define INTMSK   0x14400008  /* Interupt-Controller base addresses */
                                    //
中断控制器基址

123 # define CLKDIVN  0x14800014  /* clock divisor register */

124 #elif defined(CONFIG_S3C2410)

125 # define pWTCON   0x53000000

126 # define INTMSK   0x4A000008  /* Interupt-Controller base addresses */

127 # define INTSUBMSK  0x4A00001C

128 # define CLKDIVN  0x4C000014  /* clock divisor register */

129 #endif

130

131 #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)

132   ldr     r0, =pWTCON            // 取出当前看门狗控制寄存器的地址到r0

133   mov     r1, #0x0               // 设置r1寄存器值为0

134   str     r1, [r0]               // 写入看门狗控制寄存器

135

136   /*

137    * mask all IRQs by setting all bits in the INTMR - default

138    */

139   mov r1, #0xffffffff           // 设置r1

140   ldr r0, =INTMSK               // 取出中断屏蔽寄存器地址到r0

141   str r1, [r0]                  // r1的值写入中断屏蔽寄存器

142 # if defined(CONFIG_S3C2410)

143   ldr r1, =0x3ff

144   ldr r0, =INTSUBMSK

145   str r1, [r0]

146 # endif

147

148   /* FCLK:HCLK:PCLK = 1:2:4 */

149   /* default FCLK is 120 MHz ! */

150   ldr r0, =CLKDIVN              // 取出时钟寄存器地址到r0

151   mov r1, #3                // 设置r1的值

152   str r1, [r0]                  // 写入时钟配置

153 #endif  /* CONFIG_S3C2400 || CONFIG_S3C2410 */

154

155   /*

156    * we do sys-critical inits only at reboot,

157    * not when booting from ram!

158    */

159 #ifndef CONFIG_SKIP_LOWLEVEL_INIT

160   bl  cpu_init_crit              // 跳转到开发板相关初始化代码

161 #endif

 

程序第114行取出CPSR寄存器的值,CPSR寄存器保存当前系统状态,第115行使用比特清除命令清空了CPSR寄存器的中断控制位,表示清除中断。程序116行设置了CPSR寄存器的处理器模式位为超级保护模式,然后在第117行写入 CPSR的值强制切换处理器为超级保护模式。

程序第120129行定义看门狗控制器有关的变量,第131153行根据平台设置看门狗定时器。在程序第150行设置时钟分频寄存器的值。

程序第160行需要根据CONFIG_SKIP_LOWLEVEL_INIT宏的值是否跳转到cpu_init_crit标号执行。请注意这里使用bl指令,在执行完cpu_init_crit标号的代码后会      返回。

你可能感兴趣的:(c,平台)