累的话,可以向我索要xls格式的详表(moosewolerATgmailDOTcom),上边有我加的批注和公式,可以帮助大家方便的设置频率。
5.UCS关键寄存器
详表中我用颜色对8个UCS相关的寄存器进行了分组。这8个寄存器可以分为6组:
- UCSCTL0、UCSCTL1:DCO配置寄存器。配置DCO频率范围。禁用FLL的时候,设置DCO的开环输出频率。
- UCSCTL2、UCSCTL3:FLL配置寄存器。这个已经在3.REFO、VLO和DCO中讲过了
- UCSCTL4、UCSCTL5:MCLK、SMCLK、ACLK配置寄存器。这个在2. 调整模块中讲过了
- UCSCTL6:外置晶振配置寄存器。可以设定外接晶振的驱动电流,内置电容等参数。
- UCSCTL7:UCS模块错误寄存器。可以指示UCS当前的错误状态
- UCSCTL8:UCS请求寄存器。这个后面解释
因为54xx系列单片机内置晶振(REFO),所以
- FLL配置寄存器是最重要的一组寄存器,它直接和工作频率相关。
- 其次是DCO配置寄存器,说它重要,只是因为DCORSEL这个参数在这组寄存器中。当设置的频率无法达到的时候,先确定一下频率范围是否合适。
这两个寄存器弄明白了,就可以让UCS输出正常的工作频率了。
其他的寄存器都各有各的作用,具体怎么用可以查看参考文献。
6.MSP430的低功耗模式
A.1 一个设置时钟频率的样例
void McuSetFrequency(void) { // 关看门狗 WDTCTL = WDTPW+WDTHOLD; // 关FLL,等设置完成后,再开启FLL __bis_SR_register(SCG0);
// MCLK=SMCLK=1MHz; ACLK=32.768kHz; FLL允许 UCSCTL0 = 0x0000; UCSCTL1 = 0x0010; UCSCTL2 = 0x103C; UCSCTL3 = 0x0022; UCSCTL4 = 0x0233; UCSCTL5 = 0x0000; UCSCTL6 = 0x0101; UCSCTL7 = 0x0000; UCSCTL8 = 0x0007; // 重新开启FLL __bic_SR_register(SCG0);
// 延时等待FLL自动调整DCO,250000是根据8MHz时钟设置的。 // 最惨的状况是FLL把DCO从0开始调到31后才稳定,这个延时即是根据这种情况算得的。 __delay_cycles(250000);
// 等待异常标志清除 // 用VLO和REFO做MCLK的时钟源的时候,不需要考虑这些标志,直接用。 do { // 清异常标志 UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); SFRIFG1 &= ~OFIFG; }while (SFRIFG1&OFIFG); // 看看异常是否还在 } |
参考文献:
[slau208e] MSP430x5xx Family User Guide
[slas612] MSP430F543x(A), MSP430F541x(A) Mixed Signal Microcontroller
[slac166o] MSP430F54xx Code Examples Rev0