MSP430单片机系统复位和初始化
1,系统复位 POR与PUC
1.1 MSP430单片机复位逻辑图
可以看到,它在复位时会产生两个信号,一个是POR信号,一个是PUC信号。
POR信号叫做power-on reset。PUC信号叫做power-up clear。翻译成中文就是:POR为上电复位信号,PUC为上电清除信号。这两个信号都可以导致MSP430单片机发生复位中断。但是他们之间的级别是不一样的。
1.2 POR信号来源
POR信号的复位级别更高一些,POR信号主要来自于硬件:
※芯片上电;
※RST/NMI设置成复位模式,并在RST/NMI引脚上出现低电平信号;
※超级电压监视电路发现电压不稳。
1.3 PUC信号来源
POR信号的产生总会产生PUC信号,但PUC信号的发生不一定会产生POR信号。PUC信号是上电清除信号,产生PUC信号的情况有:
※发生POR信号;
※处于看门狗模式下,看门狗定时时间到;
※看门狗定时器写入错误的安全键值;
※FLASH存储器写入错误的安全键值;
※CPU从外设地址范围0H-01FF取数据。
2 POR产生过程(BOR)
2.1 POR信号产生过程图
我们现在看到的这张图是POR信号的产生过程图。
如果这里是一个供电电压的话,在上电初期,刚开始供电的时候,电压是很不稳的,电压就有可能发生来回的跳变,电源还会产生很多的毛刺,这时候就需要POR信号来时刻监视电源电压,一旦电源电压低于可编程的有效阈值的时候,就应该产生一个上电复位,保证单片机从一个确定的起始位置开始运行程序。
如果在单片机上电的时候,没有一个监视电压的波动情况的过程,那么如果单片机在这个位置开始从Flash读取程序代码,开始执行的话,跑程序时突然来了一个电压的下降(比如这个位置),这时候如果没有一个有效的复位信号,那么可能导致单片机的内核陷入一个无效的状态,或者说让它的内部发生自锁,进入一个不确定的状态,这时候系统就变得很不稳定了,所以需要在上电初期产生一个有效的复位信号,保证系统是在一个确定的位置,按照确定的方式开始执行的。
2.2 掉电产生POR
我们来看一下这张图,掉电复位电路BOR会在芯片上电或掉电的过程中监测电源电压,并产生POR信号。芯片上电过程中,当电源电压VCC超过VCC(start)后,BOR电路产生POR信号,直到Vcc超过V(B_IT+),然后再经过延时t(BOR)后,POR信号撤销。如果VCC电压上升速率较慢,t(BOR)会相应延长。芯片掉电过程中,VCC必须降到低于V(B_IT-)之后,BOR电路才产生POR信号。这是个迟滞比较的功能,V(B_IT+)和V(B_IT-)差值即为迟滞电压Vhys(B_IT-),通过迟滞比较避免错误产生POR信号。VCC(start),Vhys(B_IT-),V(B_IT-)和t(BOR)的值,就如这张表所示。
3 复位后,系统初始化状态
3.1 系统复位后的系统状态
系统复位POR后的单片机系统状态为:
※RST/NMI引脚为复位功能;
※I/O方向寄存器复位,即I/O引脚为输入状态;
※MSP430内部的功能模块初始化,寄存器为默认值;
※SR(状态寄存器)复位;
※看门狗激活
※PC(程序计数器)载入0xFFFE处地址并开始执行。
3.2 上电复位后的硬件初始化
发生复位后,程序查询各复位源的标志。程序能确定复位源,以执行适当的复位操作。
MSP430在发生VCC上电后开始硬件初始化,即:
※全部I/O引脚切换成输入状态;
※I/O标志复位,细节见个外围模块的说明。
※将复位向量0FFFEh中包含的地址加载入PC中。CPU从上电清除(PUC)向量中包含的地址开始运行。
※状态寄存器(SR)复位。
※用户程序必须对除PC与SR外的全部寄存器进行初始化(如SP、RAM等)。
※决定工作频率的系统时钟从DCO 最低频率开始工作。启动晶振时钟后,频率调整到目标值。
3.3 RST /NMI复位功能复位后执行顺序
RST/NMI引脚在加载电压Vcc后设置成复位功能。引脚的复位功能一直保持到不选此功能为止。处于复位功能状态下,在RST/NMI引脚上拉低至GND,然后释放,则MSP430按以下顺序开始工作。
※将在复位向量0FFFEh中包含的地址加载入PC。
※在释放RST/NMI引脚后,CPU从复位向量中所含的地址开始运行。
※状态寄存器SR复位。
※除PC与SR外,用户程序对全部寄存器进行初始化(如SP、RAM等)。
※对外围模块中的寄存器进行处理。
※决定工作频率的系统时钟从DCO的最低频率开始工作。启动晶振时钟后,频率调整到目标值。
4 程序中如何复位
4.1软件初始化
在系统复位以后,用户就要进行软件初始化,用户软件必须根据应用的需求对MSP430进行初始化,它包括以下几个部分:
1、初始化SP,通常是RAM的顶部,也就是初始化堆栈指针,让它指向RAM的顶端。MSP430的RAM的堆栈是向下生长的。也就是最开始的时候堆栈指针是指向一个搞地址,然后随着用户不断的压栈,往里面存入数据的时候,SP的地址是往下减小的。
2、初始化看门狗定时器,也就是讲看门狗放入到一个根据系统需要的一个确定的状态,是使用它还是关闭它。即使使用看门狗的时候,看门狗定时的时间间隔是可以用户编程的。
3、配置外围模块,也就是配置一些外设资源。
4.2程序初始化
我们来看主函数,首先我们看到的是关闭看门狗程序,在这里,我需要说明一下,在MSP430单片机中,看门狗默认是开的,所以在初始化时我们需要关闭看门狗,当我们需要看门狗的时候再打开看门狗定时器。
第2行代码显示的是时钟(系统)初始化程序,其他的外围模块都是沿着时钟这个核心来执行的。所以我们有必要在开始的进行时钟初始化,具体的时钟初始化过程,我们会在后面的振荡器与系统时钟这一课详细讲解。
下面一行我们看到的是端口的初始化程序。在这里说下,给芯片上电时,我们大家都知道,芯片内部是有一个复位的,复位后,各个端口有一个固定的状态,但是在端口初始化的时候,我们可以根据我们的需要来设定端口的初始化。
然后,就是我们的外设资源的初始化了,我们在我们的系统中,需要用到什么外设资源,那么我们就需要对什么进行初始化,当然,我们也可以将时钟初始化改成系统初始化,然后将我们需要的外设资源初始化,放到里面,一起进行初始化。这个方法,在我们编写大的软件时,进行模块化编程的时候很受用。
到这里,我们的软件初始化就完成了。
5 硬件中如何设计
5.1 复位电路的设计
复位电路是单片机系统中不可缺少的部分,其好坏影响整个单片机应用系统的可靠性。同时,复位电路非常容易受到外部噪声的干扰。因此,复位电路的设计首先要保证整个应用系统的可靠性,其次是具有抗干扰能力。
复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后,还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
图中的电路图,就是我们畅学电子MSP430核心板的复位电路,该电路图可靠性高,抗干扰能力强,具有非常广泛的应用。
5.2 掉电产生POR
为提高系统设计的可靠性,也可以采用专用集成电路提供复位。这张图便是采用专用集成电路的原理图。
这种集成电路一般除了能够提供上电复位信号,还可以提供按键手动复位和定时自动复位信号。由于MSP430系列单片机都有片内看门狗定时器能够实现看门狗功能,因此MSP430系列单片机只需要提供上电复位和按键手动复位即可。