时钟模块:UCS
整个系统主要分为左右两大块——时钟源模块和时钟调整模块。
时钟源模块主要由XT1、内建时钟(DCO)、XT2用来产生时钟源,也就是时钟调整模块最终输出的时钟信号的基准信号。
时钟调整模块负责将源时钟信号选通、分频输出成系统使用的三大时钟信号——MCLK,ACLK和SMCLK,分别是系统的主时钟(供CPU使用),辅助时钟(可给外设模块使用,也可以从管脚引出),子系统时钟(外设模块时钟,可从管教引出)。
时钟调整模块的主要工作分为两步:选通、分频。
UCS上电默认状态
PUC(上电清除信号)后,UCS模块的默认状态如下:
(1)XT1处于LF模式作为XT1CLK时钟源。ACLK选通为XT1CLK。
(2)MCLK选通为DCOCLKDIV
(3)SMCLK选通为DCOCLKDIV
(4)FLL使能,且将XT1CLK作为FLL参考时钟。
(5)XIN和XOUT脚设置为通用IO,XIN和XOUT配置为XT1功能前,XT1保持禁用。
(6)如果可用的话,XT2IN和XT2OUT被设置为通用IO且保持禁止状态。
这里解释一下PUC
系统复位 POR与PUC
1.MSP430单片机复位逻辑图
可以看到,它在复位时会产生两个信号,一个是POR信号,一个是PUC信号。
POR信号叫做power-on reset。PUC信号叫做power-up clear。翻译成中文就是:POR为上电复位信号,PUC为上电清除信号。这两个信号都可以导致MSP430单片机发生复位中断。但是他们之间的级别是不一样的。
2. POR信号来源
POR信号的复位级别更高一些,POR信号主要来自于硬件:
※芯片上电;
※RST/NMI设置成复位模式,并在RST/NMI引脚上出现低电平信号;
※超级电压监视电路发现电压不稳。
3. PUC信号来源
POR信号的产生总会产生PUC信号,但PUC信号的发生不一定会产生POR信号。PUC信号是上电清除信号,产生PUC信号的情况有:
※发生POR信号;
※处于看门狗模式下,看门狗定时时间到;
※看门狗定时器写入错误的安全键值;
※FLASH存储器写入错误的安全键值;
※CPU从外设地址范围0H-01FF取数据。
我的理解是:芯片上电时会产生POR(上电复位)信号,继而产生PUC(上电清除)信号
void System_Init(void)
{
// Set up XT1
UCSCTL6 &= ~(XT1OFF); // XT1 On
UCSCTL6 |= XCAP_3; // Internal load cap
// Loop until XT1 fault flag is cleared
do
{
UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG); // Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
} while (SFRIFG1 & OFIFG); // Test oscillator fault flag
//Initialize DCO
__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_3; // Set RSELx 1.51~6.07MHZ;
UCSCTL2 = FLLD_1 |60; // Set DCO Multiplier for 2*(60+1)*32768 = 3.99MHz
UCSCTL4 = 0x43; // SMCLK-DCOCLKDIV MCLK-DCOCLK
// MCLK=DCOCLK=2*(60+1)*32768=3.99MHz
// SMCLK=DCOCLKDIV = (60+1)*32768 = 1.99MHz
__bic_SR_register(SCG0); // Enable the FLL control loop
}void System_Unistall(void)
{
UCSCTL6 &= XT1OFF;
UCSCTL6 &= XCAP_3; // Internal load cap
}