|
板子是我自己焊的,用外部晶振32768,查询方法是可以的。
初始化:
void RTCInit (void)
{
CCR = 0;
YEAR = 2005;
MONTH = 1;
DOM = 10;
DOW = 4;
HOUR = 8;
MIN = 30;
SEC = 59;
CIIR = 1; // 设置秒增量中断
CCR = 0x11; // 使用外部晶振,并使能RTC
}
查询:
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
PINSEL2 = 0x00000000;
PLL_Init();
uart0_init(38400);
printf("开始初始化... ...\n");
Initkey();
Delay(5000);
RTCInit();UNI2GBK_ZKStartCluster=0;
printf("开始初始化1... ...\n");
while (1)
{
while (0 == (ILR & 0x01)); // 等待RTC增量中断
ILR = 0x01; // 清除中断标志
SendTimeRtc(); // 发送变量到PC
if(key()==255) break;
}
这样能每秒发一次到PC,正常。
改成中断后:
void RTCInit (void)
{
CCR = 0;
VICIntSelect &= ~(1 << 13); // 设置RTC 中断为IRQ 中断
VICVectCntl0 = (1 << 5) | 13; // 设置RTC 中断通道号
VICVectAddr0 = (uint32) RTC_ISR; // 设置RTC 中断服务程序入口
VICIntEnable = 1 << 13; // 使能RTC 中断
YEAR = 2005;
MONTH = 1;
DOM = 10;
DOW = 4;
HOUR = 8;
MIN = 30;
SEC = 59;
CIIR = 1; // 设置秒增量中断
CCR = 0x11; // 使用外部晶振,并使能RTC
}
void __irq RTC_ISR(void)
{
UNI2GBK_ZKStartCluster++;
ILR = 0x01; // 清中断
VICVectAddr = 0;
}
等中断:
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
PINSEL2 = 0x00000000;
PLL_Init();
uart0_init(38400);
printf("PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
PINSEL2 = 0x00000000;
PLL_Init();
uart0_init(38400);
printf("开始初始化... ...\n");
Initkey();
Delay(5000);
RTCInit();UNI2GBK_ZKStartCluster=0;
printf("开始初始化1... ...\n");
while (1)
{
if(key()==255) break;
Delay(500);
printf( "...%d" ,UNI2GBK_ZKStartCluster);
}
改成这样后,串口只发送了“开始初始化... ...”,而没有显示“开始初始化1... ...”。在初始化RTC后“RTCInit();”,就死机了。
启动文件是用KEIL MDK自带的,在MDK软件仿真是能进入中断的,完全正常。而当我用外部晶振,查询也正常。说明硬件应该没什么问题了,
实在是想不出之为什么了,还请各位大哥帮我看看。谢谢! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|