This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5438A RTC 报警中断不会每15分钟触发一次

Guru**** 2581345 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/612576/msp430f5438a-rtc-alarm-interrupt-not-triggered-for-every-15-minutes

您好!

我正在使用 MSP-EXP430F5438A 开发板。 我尝试每15分钟触发一次中断来切换 LED。 但 它不起作用。 我已随附以下代码。 您能指导我获取中断吗?

int main (空)

RTC_Check ();

返回0;


空 RTC_Check (空)

WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
P1DIR |= BIT0;//将 P1.0设置为输出
P1DIR |= BIT1;

//初始化 LFXT1
P7SEL |= 0x03;//选择 XT1
UCSCTL6 &=~(XT1OFF);// XT1打开
UCSCTL6 |= XCAP_3;//内部负载电容

//循环直到 XT1、XT2和 DCO 故障标志被清除
操作

UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
//清除 XT2、XT1、DCO 故障标志
SFRIFG1 &=~OFIFG;//清除故障标志
} while (SFRIFG1&OFIFG);//测试振荡器故障标志

//配置 RTC_A
RTCCTL01 |= RTCAIE + RTCTEVIE + RTCRDYIE + RTCBCD + RTCHOLD;
// RTC 使能、BCD 模式、RTC 保持
//启用 RTC 读取就绪中断
//启用 RTC 时间事件中断
//启用报警中断


RTCYEAR = 0x2010;//年= 0x2010
RTCMON = 0x04;//月= 0x04 =四月
RTCDAY = 0x05;//天= 0x05 =第5个
RTCDOW = 0x01;//周中某天= 0x01 =星期一
RTCHOUR = 0x10;//小时= 0x10
RTCMIN = 0x32;//分钟= 0x32
RTCSEC = 0x45;//秒= 0x45

// RTCADOWDAY = 0x00;// RTC 周中某天闹铃= 0x2
// RTCADAY = 0x00;// RTC 天闹铃= 0x20
// RTCAHOUR = 0x00;// RTC 小时报警
RTCAMIN = 0x80 | 0x15;// RTC 分钟报警+使能分钟报警

RTCCTL01 &=~(RTCHOLD);//启动 RTC 日历模式

_bis_SR_register (LPM3_bits + GIE);//使用中断进入 LPM3模式
//已启用
__no_operation();


#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=RTC_vector
_interrupt void RTC_ISR (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (RTC_vector))) RTC_ISR (void)
其他
错误编译器不受支持!
#endif

switch (__evo_in_range (RTCIV、16))

案例 RTC_NONE://无中断
中断;
案例 RTC_RTCRDYIFG:// RTCRDYIFG
中断;
案例 RTC_RTCTEVIFG:// RTCEVIFG
P1OUT ^= 0x01;//切换 P1.0
__no_operation();

中断;
案例 RTC_RTCAIFG:// RTCAIFG
P1OUT ^= 0x02;//切换 P1.1
中断;
案例 RTC_RT0PSIFG:// RT0PSIFG
中断;
案例 RTC_RT1PSIFG:// RT1PSIFG
中断;
案例12:中断;//保留
案例14:中断;//保留
案例16:中断;//保留
默认值:break;

谢谢

Siva B  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Siva B、
     
     

    感谢您发布此问题。 您能否检查代码并查看是否卡在故障标志环路内? 这是为了查看您的电路板上是否存在晶体问题。  此外,如果不处于日历模式(设置 RTCCTL1寄存器内的 RTCMODE 位),ALARM 功能将不工作。  

     

    由于您提到您希望每15分钟生成一个标志、因此您实际上需要使用计数器模式作为警报功能。 这是因为当前您将在每次时钟到达15时产生中断。 (例如、 10:15–11:15–12:15等) 因此、使用 RT1PS 是您的最佳选择。


     
    请告诉我这是否可以解决问题。

    此致、
    特拉维斯黑
    应用工程师