ARM CM3--复位信号

目录

1. **复位源**:

2. **复位效果**:

3 **使用举例:**


在ARM Cortex-M3(CM3)微控制器中,复位信号(Reset Signal)是用于重置处理器内部状态和外设状态的重要信号。复位事件的发生会使处理器回到一个已知的初始状态,以便于系统重新启动或恢复正常运行。

**详细介绍:**

1. **复位源**:

- **上电复位(Power-On Reset, POR)**:当微控制器上电或电压跌落后再恢复正常时,会产生POR复位。
   - **外部复位输入(External Reset Input, NRST)**:微控制器通常具有一条专用的外部复位输入引脚,通过该引脚施加特定电平(如低电平或高电平,视具体微控制器型号而定)可触发复位。
   - ** watchdog定时器复位(Watchdog Reset, WDT Reset)**:当watchdog定时器超时且未清除时,也会触发复位。
   - **系统异常引起的复位**:如总线错误、硬fault等严重错误可能导致系统复位。

2. **复位效果**:

- CPU寄存器状态恢复为默认值。
   - 内部和外部RAM内容不清除(但一般建议在上电时由用户代码主动初始化)。
   - 外设寄存器通常也被重置到默认状态。
   - 异常向量表从预定义地址开始执行,通常指向复位处理程序。

3 **使用举例:**


; 假设我们正在处理外部NRST引脚触发的复位事件
; 在复位ISR(中断服务程序)中进行必要的初始化

.section ".isr_vector", "a"
.global Reset_Handler

Reset_Handler:
    ; 开始执行复位处理程序
    ; 清除bss段(未初始化的数据段)
    ldr r0, =__bss_start__
    ldr r1, =__bss_end__
    mov r2, #0
    .thumb_func
    clear_bss:
        cmp r0, r1
        ite eq
        streq r2, [r0], #4
        strne r2, [r0], #4
    ; 初始化堆栈指针
    ldr sp, =_stack_top_
    ; 调用C运行时初始化函数
    bl SystemInit
    ; 调用C++构造函数
    bl __libc_init_array
    ; 跳转到主程序入口
    bl main

在上面的示例中,当CM3收到复位信号时,程序会跳转到`Reset_Handler`函数执行初始化操作。其中包括清除未初始化数据区域(bss段),设置堆栈指针,调用C库的初始化函数,以及调用C++全局对象的构造函数,最后跳转到主程序`main`函数开始执行。实际的复位处理程序会根据具体的应用场景和芯片要求进行适当的扩展和调整。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值