我设置了RTC时钟的分钟中断,就是每分钟中断一次进入中断服务程序,在仿真环境下,我怎么发现还没有半分钟,中断服务函数就执行一次,请问这是怎么回事?外部的时钟是32.768Khz的。代码如下
void Init_RTC(void)
{
unsigned int times;
times=*pRTC_STAT;
asm("nop;");
*pRTC_PREN = 1;
asm("nop;");
*pRTC_ISTAT = 0xffff;
asm("nop;");
*pRTC_ICTL = 0x0008;//启动每天中断和分钟中断
asm("nop;");
asm("nop;");
/********************************************************
*
* 函数名 : EX_INTERRUPT_HANDLER(RTC_interrupt)
* 函数功能 : RTC中断
* 函数输入参数 : 无
* 函数输出 : 无
* 说明 : 无
*
********************************************************/
EX_INTERRUPT_HANDLER(RTC_interrupt)
{
static uint16 sec,min=0;
// printf("\n sec=%d %d %x\n",*pRTC_STAT&0x1f,*pRTC_STAT,*pRTC_ISTAT);
// printf("\nyihuo===%d\n",*pRTC_ISTAT&0x8);
//char *str;
if(*pRTC_ISTAT&0x8)//秒中断
{
sec=*pRTC_STAT&0x1f;
min=(*pRTC_STAT>>6)&0x1f;
//GUI_PutHZG(20,40,str,16, 16);
min++;
GUI_Point(min,120,BLACK);
*pRTC_ISTAT=0xc;
// printf("\nmin=%d sec=%d %d %x\n",min,sec,*pRTC_STAT,*pRTC_ISTAT);
// printf("\nRTC_ICTL==%x",*pRTC_ICTL);
}
}
/********************************************************
*
* 函数名 : Init_Interrupts
* 函数功能 : 初始化配置BF531的中断寄存器
* 函数输入参数 : 无
* 函数输出 : 无
* 说明 :该函数必须放在两个中断函数之后,否则SPORT0_Rx因为无法提前定义而不能通过
*
********************************************************/
void Init_Interrupts(void)
{
*pSIC_IAR0 = 0x1fffffff;
*pSIC_IAR1 = 0xf3fff22f; // UART 中断定义
*pSIC_IAR2 = 0xfffFFffF;
//register_handler(ik_ivg9, SPORT0_Tx); // SPORT0_Tx ->IVG 12
register_handler(ik_ivg8, RTC_interrupt);
register_handler(ik_ivg9, SPORT0_Rx); // SPORT0_Rx ->IVG 12
register_handler(ik_ivg10, UART_ISR_RX); // UART ISR -> IVG 10
*pSIC_IMASK = 0x00004080;//屏蔽寄存器;使能UART_ISR_RX中断;RTC中断,其它中断仍然屏蔽
}
请指教?