void Init_UART3_CFG(unsigned long ulBaudRate)
{
unsigned int n=0;//
float x=0.0;
UART3_SEL |= TXD + RXD ; // 选择引脚功能
UART3_DIR |= TXD ; // 选择引脚功能
put_UART3_UCSWRST(1) ; // Enabled. USCI logic held in reset state.
put_UART3_UCSSEL(UCSSEL_SMCLK) ; //
n=UART3_ACLK_FOSC/ulBaudRate;
if (n<16)
{
put_UART3_UCOS16(0); //低频率模式
put_UART3_UCBRF(0); //小数分频配置
x=1.0*UART3_ACLK_FOSC/ulBaudRate;
n=UART3_ACLK_FOSC/ulBaudRate;
put_UART3_UC0BR1(n/256); //波特率
put_UART3_UC0BR0(n%256);
x=x-n;
n=(int)(x*8+0.5);
put_UART3_UCBRS(n); //小数分频配置
}
else
{
put_UART3_UCOS16(1); //高频率模式
x=1.0*UART3_ACLK_FOSC/ulBaudRate/16;
n=(int)x; // n=UART3_ACLK_FOSC/ulBaudRate/16
put_UART3_UC0BR1(n/256); //波特率
put_UART3_UC0BR0(n%256);
x=x-n;
n=(int)(x*16+0.5);
put_UART3_UCBRF(n); //小数分频配置
put_UART3_UCBRS(0); //小数分频配置
}
put_UART3_UC7BIT(0) ;//默认,8位数据传输
put_UART3_UCPEN(0) ;//无校验
put_UART3_UCSWRST(0) ;// USCI reset released for operation.
put_UART3_UCRXIE(1) ;// Receive interrupt enable
put_UART3_UCTXIE(1) ;// Receive interrupt enable
RS485_A3IN;
}
这个是串口初始化,主程序就是一段程序后进入低功耗,然后如果有串口数据就进行唤醒,但是为什么我的程序在低功耗LPM0,LPM3下进入不了串口中断,在正常运行的时候是可以的,另外有一个问题就是同样设置都是SMCLK,为什么LPM3下定时器能够进入中断而串口进入不了。 |