历史上的今天
今天是:2025年10月13日(星期一)
2022年10月13日 | MSP430单片机:时钟系统(UCS 模块)
2022-10-13 来源:csdn
UCS 模块最多含有 5 个时钟源:
XT1CLK :低频 / 高频振荡器,可以使用低频 32768HZ 晶振和外部振荡器或者通过外部输入源输入 4MHZ~32MHZ 时钟。
VLOCLK :内部低消耗,低频振荡器。典型值为 12KHZ 。
REFOCLK :内部低频振荡器,典型值为 32768HZ ,作为 FLL 基准源。
DCOCLK :内部数字控制振荡器 (DCO) 可以通过 FLL 来稳定。
XT2CLK :可选择的高频振荡器,可以使用标准晶振,振荡器或者外部时钟源输 4MHZ~40MHZ 。
外部:XT1CLK XT2CLK
内部: VLOCLK REFOCLK DCOCLK
UCS 模块可以产生三个时钟信号供cpu和外设使用:
ACLK 辅助时钟
MCLK 主时钟
SMCLK 子系统时钟

对这张核心的图,做一些解释:

(1)内部超低功耗低频振荡器VLO

无须外部晶振,提供约10khz
(2)内部参考时钟REFO
在不要求或不允许使用外部晶振的应用中,REFO可以用作内部高精度时钟。经过内部调整,REFO的典型频率为32768Hz
(3)XT1振荡器
XT1DRIVE控制驱动力,低了省电。
XCAP调整负载电容。
XT1OFF清零,XT1无论在任何模式下都可用。
XT1BYPASS的三角形,在数字电路中是驱动门,提升驱动能力。
XT1与通用I/O端口公用引脚,应注意上电复位的默认值,以我手中的这块板为例:
crystal mode 和 bypass mode区别
(4)XT2振荡器(参考XT1)

代码解析:
//配置时钟ACLK = SMCLK = MCLK = XT2=32768HZ
void clock(void)
{
P7SEL |= BIT0 + BIT1; // 端口选择外部低频晶振XT1
UCSCTL6 &= ~XT1OFF; // 使能外部晶振
UCSCTL6 |= XCAP_3; // 设置内部负载电容
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 错误标志
SFRIFG1 &= ~OFIFG;
} while (SFRIFG1 & OFIFG); // 检测振荡器错误标志
UCSCTL4 |= SELA_0 + SELS_0 + SELM_0; // ACLK = SMCLK = MCLK = XT2=32768HZ
}

1.P5SEL |= 0x0C //把某一位变成1 0x0C=1100

注意控制寄存器以及位
不同型号可能不太一样,MSP430 的 PxSEL1, PxSEL0 说明_宝山电子工作室-CSDN博客
2.UCSCTL6 &= ~XT2OFF //把某一位变成0
XT2OFF上电默认1,即关闭
(5)FLL锁频环(em..电路老师提过,锁频环技术)

(6) 内部模块振荡器MODOSC
可产生约4.8MHZ的MODCLK时钟,flash控制器模块,ADC_12模块等片上外设都可以使用MODCLK作为内部参考时钟
有条件/无条件启用请求
例如:flash,adc无条件启用请求
时钟失效以及安全操作

如图:部件内的检测电路

当时钟刚打开或没有正常工作时,晶振故障失效标志位 XT1LFOFFG, XT1HFOFFG 或XT2OFFG 将置位,一旦被置位,即使晶振恢复到正常状态也将一直保持置位,直到手动用软件将故障失效标志位清零。清零之后,若晶振故障失效情况仍然存在,晶振故障失效标志位将自动再次被置位。
DCOFFG总的标志位
tips:断允许位重新置位,以接收新的晶振故障失效请求。注意,振荡器故障失效事件不受中断允许控制位(GIE)的控制。
msp430内置函数总结 __bic_SR_register(),__delay_cycles(x)_u011123091的博客-CSDN博客 (内置函数)
例:
//***************************************************************************//
// //
// 初始化主时钟: MCLK = XT1×(FLL_FACTOR+1) //
// //
//***************************************************************************//
#ifdef INTERNAL_HF_OSC
void Init_CLK(void)
{
WDTCTL = WDTPW + WDTHOLD ; // 关看门狗
P7SEL |= 0x03 ; // 端口选择外部低频晶振XT1
UCSCTL6 &=~XT1OFF ; // 使能外部晶振
UCSCTL6 |= XCAP_3 ; // 设置内部负载电容
UCSCTL3 |= SELREF_2 ; // DCOref = REFO
UCSCTL4 |= SELA_0 ; // ACLK = XT1
__bis_SR_register(SCG0) ; // 关闭FLL控制回路
UCSCTL0 = 0x0000 ; // 设置DCOx, MODx
UCSCTL1 = DCORSEL_7 ; // 设置DCO振荡范围
UCSCTL2 = FLLD__1 + FLL_FACTOR ; // Fdco = ( FLL_FACTOR + 1)×FLLRef = (649 + 1) * 32768 = 21.2992MHz
__bic_SR_register(SCG0) ; // 打开FLL控制回路
__delay_cycles(1024000) ;
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // 清除 XT2,XT1,DCO 错误标志
SFRIFG1 &= ~OFIFG ;
}while(SFRIFG1&OFIFG) ; // 检测振荡器错误标志
}
#endif
史海拾趣
|
CPU:E2200 主板:技嘉GA-G31M(板载X3100显卡,intel G31芯片组)(因为技嘉,华硕价格较贵,可以微星,昂达等G31芯片组的二组主板代替) 内存:金士顿2G,DDR2/800(或金邦,建议不要用威刚,威刚兼容性较差) 显卡:(如有需要可另配,但学习 ...… 查看全部问答> |
|
联络一切对BIOS与引导区技术感兴趣的人士,注重理论与实践的结合,交流技术资料与实践心得,对重要贡献者给予现金等奖励!当 前以80X86为主要探究方向!… 查看全部问答> |
|
STM32F107中,用TIM3的PWM模式,预分频数为0,重装载值为3600,按道理说TIM3的最大频率为36MHz,那么PWM的频率应该 ...… 查看全部问答> |
|
前两天我发了个帖子,说明LPC810如何用SWD方式(J-LINK)下载 于是我写了下程序,就是点亮那个LED的程序 #include \"lpc8xx.h\" int main(){ LPC_SYSCON->SYSAHBCLKCTRL |= (1DIR0|=1… 查看全部问答> |
|
现出让一套CY8CKIT-001 PSoC 开发套件,该套件是集PSoC 1、PSoC 3、PSoC 5三个系列的学习开发的,共包括一块主板、三块MCU模块、还有一个MINI PROR 程序下载下载器。下面上个图: … 查看全部问答> |






