RTC(Real Time Clock)即实时时钟,它是一个可以为系统提供精确时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源。有个疑问:在 BLE 协议栈中 RTC 和定时器之前有什么联系吗?
目前,了解到定时器有两种实现方式:
Timer1:轮询,即通过 while 不断判断 IRCON 状态,定时执行相应操作。
while(1)
{
if(IRCON > 0)
{
IRCON=0;
if(count++ >= 1) //约1s周期性闪烁,示波器测大约为1025MS
{
count=0;
LED1 = !LED1; //LED1闪烁
}
}
}
寄存器 | 作用 | 描述 |
---|---|---|
IRCON(0xC0) | 中断标志4 | Bit1:定时器 1 中断标志。当定时器 1 中断发生时设为 1 并且当 CPU 向量指向中断服务例程时清除。 0:无中断未决 1:中断未决 |
Timer3. 中断,通过中断触发定时事件。
中断是程序暂停当前执行流(需要对当前程序做保存,方便后序中断恢复),转而去执行其它程序流。
有哪些事件会触发程序中断?中断有两种:硬中断、软中断。当有按键按下时会触发硬中断,也叫作外部中断;而当数据溢出,除零等事件发生时,会产生软中断。
中断的实现方式:中断是通过中断向量表中,各标志位的状态,控制CPU处理不同的中断事件。如:寄存器保存,程序计数器(PC)的指向。
//定时器T3中断处理函数
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
{
IRCON = 0x00; //清中断标志, 也可由硬件自动完成
if(count++ > 245) //245次中断后LED取反,闪烁一轮(约为0.5 秒时间)
{ //经过示波器测量确保精确
count = 0; //计数清零
LED1 = ~LED1; //改变LED1的状态
}
}
通过这种方式,可以使用程序控制硬件的输入输出状态。