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; //允许闹钟中断
Ben Qin:
你好,你没有打开计时器。
参考下该例程:
C:\ti\msp\MSP430Ware_3_80_14_01\examples\devices\MSP430F5xx_6xx\MSP430F541xA_MSP430F543xA_Code_Examples\C msp430x54xA_RTC_02.c
,
weiliang qin:
您好,RTC没有HOLD的,因为我在LCD上显示了分钟在不断地增加;而且我同时打开了RTCTEVIE(RTCCTL0=RTCAIE+RTCATEVIE; ),这个中断有产生的,但RTCAIFG根本就没有置1
,
Ben Qin:
你设置了初始时间吗?可以将完整配置发上来吗?
,
weiliang qin:
每次上电自动读取时钟芯片里的时间的,时钟芯片有独立备用电池,里面的时间是准确的,我也验证过了RTC的时间也是正确的,而且是在实时地准确运行地,以下是仿真时寄存器地配置,这个应该是更一目了然了:
,
weiliang qin:
比如现在时间是10分钟,我设置闹钟到13分钟,RTCTEVIE会有中断产生,但RTCAIE就没有中断产生:
,
weiliang qin:
以下是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;}
,
weiliang qin:
搞明白原因了,要通过红圈中的代码非掉不用的闹钟字节的AE位,谢谢!