开放RTC的通用中断和秒中断后,可以正常产生中断,但是一旦使能警报中断,这里警报中断时间比秒中断时间长的多,但是秒中断来的时候,警报中断标志也产生了,这是何故?请高手指点?
源代码
RTC_PrescalerConfig(0x8000); //RTC has its own clock of 32k Hz
EIC_IRQChannelConfig(RTC_IRQChannel, ENABLE);
EIC_IRQChannelPriorityConfig(RTC_IRQChannel,1);
EIC_IRQConfig(ENABLE);
RTC_ITConfig(RTC_GIT|RTC_AIT|RTC_SIT, ENABLE);
RTC_ClearCounter();
RTC_AlarmConfig(RTC_CounterValue()+10);
while(1);
初始化,如上,每次秒中断来的时候,报警中断也会来,即报警中断标志也会被置位,请ST_ARM 给予指点?
关于每次秒中断来时,报警中断也会来的问题
实际程序烧写到芯片内部运行时,不会发生这种现象,这是因为仿真停顿造成的时间缘故,如果你将报警时间从10变成100,或更大,就没有了。
烧写到内部flash问题还是存在?
把程序烧写到内部flash问题还是存在,代码就是如上,在rtc中断里秒中断来时候,报警中断还是跟秒中断一起来,特郁闷!请ST_ARM 帮忙分析下?
这是我使用的代码
main.c文件:
#include "71x_lib.h"
/* Define the RTC prescaler 0x8000 to have 1 second basic clock */
#define RTC_Prescaler 32768
int main (void)
{
RTC_ITConfig(RTC_GIT | RTC_SIT | RTC_AIT, DISABLE ); // Disable Second and Alarm Interrupt
RTC_FlagClear ( RTC_OWIR );
RTC_FlagClear ( RTC_AIR );
RTC_FlagClear ( RTC_SIR );
RTC_FlagClear ( RTC_GIR ); // Clear Pending Flags
RTC_PrescalerConfig ( RTC_Prescaler ); // Configure RTC prescaler
RTC_CounterConfig (0x00); // RTC_ClearCounter();
RTC_AlarmConfig(RTC_CounterValue() + 20);
RTC_ITConfig(RTC_GIT | RTC_SIT | RTC_AIT, ENABLE ); // Enable Second and Alarm Interrupt
EIC_IRQChannelConfig( RTC_IRQChannel, ENABLE ); // Enable RTC IRQ channel
EIC_IRQChannelPriorityConfig( RTC_IRQChannel, 1);
EIC_IRQConfig( ENABLE );
GPIO_Config (GPIO0, 0x2C, GPIO_OUT_PP); // Configure Port 0 pins
GPIO0->PD = 0x0000;
while (1);
}
71x_it.c文件中的
void RTC_IRQHandler(void)
{
#ifdef _RTC
if ( RTC_FlagStatus ( RTC_SIR ) == SET ) {
RTC_FlagClear ( RTC_SIR ); // Clear the SIR & GIR RTC flags
GPIO_BitWrite(GPIO0, 2, ~GPIO_BitRead(GPIO0, 2));
}
if ( RTC_FlagStatus ( RTC_AIR ) == SET ) {
RTC_FlagClear ( RTC_AIR ); // Clear the SIR & GIR RTC flags
RTC_AlarmConfig(RTC_CounterValue() + 20);
GPIO_BitWrite(GPIO0, 3, ~GPIO_BitRead(GPIO0, 3));
}
RTC_FlagClear ( RTC_GIR );
#endif
}
71x_conf.h文件
#define RCCU_Main_Osc 4000000
/* Comment the lines below corresponding to unwanted peripherals */
#define _EIC
#define _GPIO
#define _GPIO0
/* #define _GPIO1 */
/* #define _GPIO2 */
#define _RTC
你可以对照这个代码比较一下,判别你的问题在哪里。
喔,有价值的代码
很好的参考。多谢ST_ARM!!!