这两天有一个问题一直困扰我,我实验的现象是:启用uart后,并且进入低功耗模式后,msp430并不能关闭TX1,在没有串口数据通讯的时候,TX1晶振仍然工作。这和用户手册上说明的并不相同。
我的实验环境是:只焊接了msp430F5529单片机,jtag接插件,32.768K晶振(TX1),TXCO温补晶振(TX2,其电源由一个开关芯片控制,开关状态由一个IO口控制),LDO产生3.3V电源。
说明:我尚没有焊接MAX3221之类的RS232接口芯片。
程序:关闭看门狗;IO全部设定为输出,并且输出为0(这样就关断TXCO的电源);设定MCLK,ACLK,SMCLK均为TX1,等待TX1稳定;开 启两个uart_IO引脚功能,设定时钟源取自ACLK,波特率为9600,开启IO口功能,开启接收中断;最后进入LPM3.
过程:下载程序后,关闭电源,拔下jtag线,再次开启电源,用示波器观察32.768K晶振的引脚,发现其一直处于震荡状态,同时电流也跟着上去了。同时可以确定的是,如果我将程序中的串口配置的内容删去的话,进入低功耗模式后,TX1就没有震荡,同时电流也非常小。
用户手册上说:清除UCSWRST位后,使能USCI模块,接收端准备接受数据并处于空闲状态,接收波特率发生器处于准备好状态但是没有时钟也不会产生任何时钟。数据起始位的下降沿可以使能波特率发生器。
这说明,使能uart模块后,只要没有收发数据过程的话,就应该不会引起时钟震荡,只有数据起始位的下降沿能够使能波特率发生器。
我的理解对吗?实际情况应该是什么样子的?
最后贴出我的实验代码:
#include <msp430f5529.h>
void main(void) {
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
// 所有IO口都设置为输出,低电平
P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00;
P7OUT = 0x00;P8OUT = 0x00; PJOUT = 0x00;
P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF;
P7DIR = 0xFF;P8DIR = 0xFF; PJDIR = 0xFF;
P5SEL = BIT4 + BIT5; // 选择 XT1 使能
UCSCTL4 = SELM__XT1CLK + SELA__XT1CLK + SELS__XT1CLK;
while (SFRIFG1 & OFIFG) { // 判断晶振完全起振
UCSCTL7 &= ~XT1LFOFFG;
SFRIFG1 &= ~OFIFG;
}
// 配置UART
P3SEL = BIT3+BIT4; // 使能P3.4,5 UART端口
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCA0BR1 = 0x00;
UCA0MCTL = UCBRS_3+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Ena××e USCI_A0 RX interrupt
// 进入低功耗模式3
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3, interrupts ena××ed
__no_operation(); // For debugger
}
// 串口中断函数,向串口发送收到的字符
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void) {
switch(__even_in_range(UCA0IV,4)) {
case 0:break; // Vector 0 – no interrupt
case 2: // Vector 2 – RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 – TXIFG
default: break; }
}
Peter_Zheng:
XT1 enabled in active mode (AM) through LPM4
user1866843:
回复 Peter_Zheng:
Peter_Zheng
XT1 enabled in active mode (AM) through LPM4
user1866843:
回复 Peter_Zheng:
谢谢您的回答,不过我无法理解这个意思,这句话到底是什么意思呢?
Peter_Zheng
XT1 enabled in active mode (AM) through LPM4
Peter_Zheng:
回复 user1866843:
AM 到LPM4都是enabled
user1866843:
回复 Peter_Zheng:
哦,谢谢您!我知道了!