BF533应用之闹钟
0赞通过前面的了解,我们知道ADSP-BF533处理器的RTC结构还可以实现闹钟功能,闹钟的实现具体分为两种形式。第一个是闹钟的时间,包括小时,分钟和秒。当启用报警中断,RTC将在每天指定的时间产生一个中断,从而实现闹钟功能。第二个报警功能是允许应用程序指定是在哪一天的某个时间报警。当某一天启用报警中断时,RTC将在指定的日期和时间产生一个中断。这两种报警功能可以独立启用或者禁用。今天准备学习如何利用BF533来实现闹钟功能。还是回看BF533的器件资料,该处理器的RTC内设专门留了一个用来设置闹钟参数的寄存器RTC_ALARM,下面先详细介绍一下该寄存器的用法。
如下图为RTC_SWCNT寄存器的具体内容。
RTC_ALARM主要用来存放闹钟的时间参数。通过软件编程可以实现闹钟的时、分、秒参数,当指定的时间到达时,处理器将产生一个中断,从而闹钟启动。在任意时刻都能对于该寄存器进行读写操作。在该寄存器的高15位,还可以设置闹钟启动的确切日期,设置后,闹钟将在指定的日期的指定时间产生中断。
下面给出一个例程,程序的具体功能是通过设定一个闹钟时间,然后开启闹钟中断使能,然后在主循环中不断地读取中断状态寄存器的值,判断闹钟中断标志位是否置1,如果是,则表示闹钟已启动。
下面先给出程序流程图:
然后是具体代码:
#include <cdefBF533.h> //添加BF533头文件
//系统时钟设置函数
void Set_PLL(unsigned int pmsel,unsigned int pssel)
{
unsigned int new_PLL_CTL;
*pPLL_DIV = pssel;
asm("ssync;");
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm("ssync;");
asm("idle;");
}
}
//EBIU接口初始化
void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}
//RTC功能初始化
void RTC_Init(void)
{
*pRTC_PREN = 1;//使能预分频功能
*pRTC_ISTAT = 0;//中断状态寄存器初始化为0
*pRTC_ICTL = 2; //中断控制寄存器初始化为2,使能时分秒闹钟中断
*pRTC_STAT = 0x00008000; //当前时间设置为早上8点钟
}
//系统主应用程序
void main(void)
{
unsigned int AlarmState;
Set_PLL(16,3);//初始化系统时钟PLL
Init_EBIU();//初始化EBIU接口
RTC_Init();//初始化RTC
*pRTC_ALARM = 0x00008780;//写入闹钟值,设置时间为早上8点30分
while(1)
{
AlarmState = *pRTC_ISTAT&0x0002;//获取倒计数值
if(AlarmState!=0)
{
printf("The Alarm is On");//将跑表值显示在上位机上
}
}
}