本实验主要使用实时时钟的报警功能和时钟节拍功能,由于涉及到中断必须先进行mmu即内存重定向,但是这对于UART的接收返回地址有影响,具体怎么修改没有找到解决方案,所以本实验无法输入数据设置报警时间,只能在原来的基础上增加十秒来验证报警功能,另外进入显示时间选项后无法退出,需要增加外部按键中断,这里为了节约时间不再增加,本实验有待改进,希望大家能给出以上提到问题的解决方案,非常感谢!
本实验实验代码如下:
#define
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
#include "profile.h"
#include "memtest.h"
void delay(int times)//延时函数
{
}
void beep_init(void)//蜂鸣器初始化
{
}
void beep(void)
{
}
char Uart_Getchar(void)
{
}
void Rtc_AlmSet(void)//设置报警时间
{
rRTCCON=0x1;
rALMYEAR=rBCDYEAR;
rALMMON=rBCDMON ;
rALMDATE=rBCDDATE ;
rALMHOUR=rBCDHOUR ;
rALMMIN=rBCDMIN ;
rALMSEC=rBCDSEC+0x10;//分钟设置延时10秒报警
rRTCALM = 0x7f;//设置报警寄存器全部使能
rRTCCON = 0x00;
}
void Display_Rtc(void)//每隔一秒显示一次时间
{
static int tmp;
int year;
int month, date, weekday, hour, minute, sec;
char day[][7]={"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
rRTCCON = 0x01;
while (1)
Uart_Printf("x:x:x s, x/x/%4x\n",hour,minute,sec,day[weekday],month,date,year);
rRTCCON = 0x00;
}
void INT_init(void)
{
}
static void __irq Alarm_ISR(void)//报警中断函数
{
}
static void __irq RTCTick_ISP(void)//时钟节拍中断函数
{
}
void Main(void)
{
}