RTC测试


// bref: rtc 外设初始化
// para:
// note:
static void rtc_init(void)
{
	// 配置晶振 时钟源
	// 主时钟X1 X2作为IO,副时钟IO作为晶振口 这个时候外部需要接晶振 
	CLK_Osc_Setting(OSC_PORT,OSC_OSCILLATOR);
	// 配置RTC 启用副时钟
	RTC_Init(RTC_FSUB); //  RTC_32M 表示意思在32M的FIH的分频时钟为RTC时钟源
	// 启动RTC
	RTC->RTCC0  |= _80_RTC_COUNTER_START;
}
	
#define BIT(x)  (1<<x) 

int main(void)
{
	// 刷新时钟频率得到更新时钟
	SystemCoreClockUpdate();
	
	rtc_init();
	
	INTC_ClearPendingIRQ(RTC_IRQn); /* clear INTRTC interrupt flag */
    NVIC_ClearPendingIRQ(RTC_IRQn); /* clear INTRTC interrupt flag */
    INTC_EnableIRQ(RTC_IRQn);       /* enable INTRTC interrupt */
    NVIC_EnableIRQ(RTC_IRQn);       /* enable INTRTC interrupt */
	
	//  测试IO P70
	// 设置为GPIO
	PORT->P70CFG = 0x00;
	// 输出模式
	PORT->PM7  &= ~BIT(0);
	// 数字模式
	PORT->PMC7 &= ~BIT(0); 
	
	PORT->P7 |= BIT(0);
	
    RTC_Set_ConstPeriodInterruptOn(ONESEC);
	while(1)
	{
		
	}
}


void IRQ22_Handler(void) __attribute__((alias("rtc_interrupt")));
/***********************************************************************************************************************
* Function Name: rtc_interrupt
* @brief  RTC interrupt service routine
* @param  None
* @return None
***********************************************************************************************************************/
void rtc_interrupt(void)
{
    if (RTC->RTCC1 & RTC_RTCC1_WAFG_Msk)
    {
        RTC->RTCC1 &= (uint8_t)~_10_RTC_ALARM_MATCH;        /* clear WAFG */
        INTC_ClearPendingIRQ(RTC_IRQn);                     /* clear INTRTC flag */
       // rtc_callback_alarm();
    }

    if (RTC->RTCC1 & RTC_RTCC1_RIFG_Msk)
    {
        RTC->RTCC1 &= (uint8_t)~_08_RTC_INTC_GENERATE_FLAG; /* clear RIFG */
        INTC_ClearPendingIRQ(RTC_IRQn);                     /* clear INTRTC flag */
        //rtc_callback_constperiod();
		if(PORT->P7 & BIT(0))
		{
			PORT->PCLR7 = BIT(0);
			//PORT->P7 &= ~BIT(0); 
		}
		else
		{
			PORT->PSET7 = BIT(0);
			//PORT->P7 |= BIT(0);
		}
    }
}

实际过程中,需要修正时钟,本IP 具备修正时钟功能。

按照图中计算,需要在60s一次的00s秒做修正处理,要在其他时刻写入校准值。ppm是万分之几的精度。

F12表示需要减速,也就是原来的速度快了点,其他位是反码,所以计算好数据需要再次转换为反码。

其实实际也不是这么测,这么测没有啥用,需要客户根据实际情况测试,小幅度慢慢修改。知道测试OK,过一个小时,或者一天,一个星期 秒不是差的太离谱。

增加注意F12 和F1为的是不秀修正的意思12位的数据要减1.(12位是F11~F0)

测试PSETx PCLRx数据不变,调试器读取的时候数据一直0 ,查阅是W,只能写,不可读。

查看了 GD的BC寄存器,也就是清除端口寄存器,也是只写,不能读。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值