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.

MSP430F5418A: RTC的闹钟为什么不产生中断?请老师帮助指导一下,谢谢!

Part Number: MSP430F5418A

RTC的设置代码如下,调试时能确定已经都设置成功了,但就是时间到了,中断并没有产生闹钟中断,请老师给指导以下,谢谢!

RTCCTL1=RTCBCD_H+RTCMODE_H; //设置了BCD和日历模式
RTCAMIN=0XA2; //以下4行设置了闹钟的时间
RTCADAY=0X92;
RTCADOW=0X80;
RTCAHOUR=0XA3;
RTCPS0CTL=RT0PSDIV_7;  //RT0PS的时钟源来自ACLK,没有允许中断
RTCPS1CTL=RT1PSDIV_6+RT1SSEL_2; //RT1PS的时钟源来自RT0PS,没有允许中断
RTCCTL0=RTCAIE;  //允许闹钟中断

  • 你好,你没有打开计时器。

    参考下该例程:

    C:\ti\msp\MSP430Ware_3_80_14_01\examples\devices\MSP430F5xx_6xx\MSP430F541xA_MSP430F543xA_Code_Examples\C msp430x54xA_RTC_02.c

  • 您好,RTC没有HOLD的,因为我在LCD上显示了分钟在不断地增加;而且我同时打开了RTCTEVIE(RTCCTL0=RTCAIE+RTCATEVIE;  ),这个中断有产生的,但RTCAIFG根本就没有置1

  • 你设置了初始时间吗?可以将完整配置发上来吗?

  • 每次上电自动读取时钟芯片里的时间的,时钟芯片有独立备用电池,里面的时间是准确的,我也验证过了RTC的时间也是正确的,而且是在实时地准确运行地,以下是仿真时寄存器地配置,这个应该是更一目了然了:

  • 比如现在时间是10分钟,我设置闹钟到13分钟,RTCTEVIE会有中断产生,但RTCAIE就没有中断产生:

  • 以下是RTC的配置函数,在上电启动时运行的

    void RTC_Init()
    {
    unsigned char i;
    time_typedef userTimeGet; //定义了一个时间变量
    RTCCTL1=RTCBCD_H+RTCMODE_H;
    RTCAMIN=0XA9;
    // RTCADAY=0X93;
    // RTCADOW=0X81;
    // RTCAHOUR=0X87;
    RTCPS0CTL=RT0PSDIV_7; //RT0PS的时钟源来自ACLK,没有允许中断
    RTCPS1CTL=RT1PSDIV_6+RT1SSEL_2; //RT1PS的时钟源来自RT0PS,没有允许中断
    RTCCTL0=RTCAIE;//+RTCTEVIE;
    PCF8563GetTime(&userTimeGet);//从时钟芯片PCF8563读出时间到变量userTimeGet
    //以下是将从时钟芯片PCF8563读出的时间设置到RTC中
    RTCSEC=userTimeGet.seconds&0x7F;//PCF8563中second字节的首位表示时钟芯片的时间不可靠,而RTC中不需要这样表示
    RTCMIN=userTimeGet.minutes;
    RTCHOUR=userTimeGet.hours;
    RTCDAY=userTimeGet.days;
    RTCDOW=userTimeGet.weekdays;
    RTCMON=userTimeGet.months&0x7F;//PCF8563中month字节的首位表示世纪位,而RTC中不需要这样表示
    RTCYEARL=userTimeGet.years;//PCF8563与RTC中year的表示方法不同
    if(userTimeGet.months&0x80)//PCF8563与RTC中year的表示方法不同
    RTCYEARH=0X19;
    else
    RTCYEARH=0X20;
    }

  • 搞明白原因了,要通过红圈中的代码非掉不用的闹钟字节的AE位 ,谢谢!