请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430FR2311 主题中讨论的其他部件:MSP430FR4133,
工具/软件:Code Composer Studio
我正在尝试使用VLOCLK作为LPM3中RTC模块的时钟源,并使用RTC中断每隔一秒闪烁一次LED。 我的终极目标是在3.5 中使用RTC,而不需要任何外部振荡器。
下面是我的代码:
#include <MSP430-h>
#define VLOCLK
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; //停止监视计时
器#ifndef VLOCLK
P2SEL1 || BIT6 | BIT7; // WFP 2.6~WFP 2.7 :水晶针
做
{
CSCTL7 &=~(XT1OFFG | DCOFFG); //清除XT1和DCO故障标志
SFRIFG1 &=~OFIFG;
}同时(SFRIFG1和OFIFG); //测试振荡器故障标志
#else
//选择VLO作为主OSC:请参阅 www.ti.com/.../slau445g.pdf中的3.2 2
CSCTL4 |= SELMS__VLOCLK;
CSCTL5 &=~VLOAUTOOFF;
CSCTL5 |= DIVM__1;
#endif
P1OUT &=~BIT0; //清除WFP 1.0 输出闩锁,以确定开机状态
P1DIR || BIT0; //将WFP 1.0 设置为输出方向
PM5CTL0 &=~LOCKLPM2; //禁用GPIO开机默认高阻抗模式
//激活先前配置的端口设置
#ifndef VLOCLK
// RTC计数重新加载比较值为32。
// 1024/32768 *3.2768万 * 32 = 1秒
RTCMOD = 32-1;
//初始化RTC
//源= 32kHz晶体,除以1024
RTCCTL = RTCSS__XT1CLK | RTCSR | RTCPS__1024 | RTCIE;
#else
// VLOCLK频率为10kHz。
//1000/10000 *1万 * 10=1秒
RTCMOD = 1-1;
RTCCTL || RTCSS__VLOCLK | RTCPS__1000 | RTCIE | RTCSR;
#endif
__bis_sr_register (LPM3_bits | GIE); //输入LPM3,启用中断
//while (1);
}//
RTC中断服务例程
#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_icc__)
#pragma vector=RTC_vector
__interrupt void ISR_ISR(void)
#Elif defined(__GNUC__)
__attribute__((interrupt (elle_RTCvoid) rtc vector)#void) not
supported #rtc error!
#endif
{
Switch(__偶 数_in_range(RTCIV,RTCIV_RTCIF))
{
案例RTCIV_NONE:中断; //不中断
案例RTCIV_RTCIF: // RTC溢出
P1OUT ^= BIT0;
中断;
默认值:break;
}
}
指示灯每隔1.516 秒切换一次,而不是每隔1秒切换一次。
下面是与WFP 1.0 连接的逻辑分析器的屏幕截图:
如何正确配置RTC时钟?
编辑:
在 MSP430FR4133 Launchpad上编程时使用相同的代码,LED在1.135 秒(仍不接近1秒)切换。
附加逻辑分析器屏幕截图:

