原创:sam4s16c的寄存器配置基础教程---RTC配置
时间:10-02
整理:3721RD
点击:
最近项目涉及到和供应商合作,之前用atmel studio不能继续用了,不得不改用keil,于是潜水了一段时间,静下来仔细分析Datasheet,终于完成了,几乎所有外设驱动的寄存器配置,可以直接用于sam4s系列。看不懂的自己仔细研究Datasheet吧。个人的爱好是喜欢寄存器直接配置。
看官方的库,太乱,太累。
不喜欢拿来主义。
第六部分
配置RTC
首先,停止rtc计数,
RTC->RTC_CR |= RTC_CR_UPDTIM;
while ((RTC->RTC_SR & RTC_SR_ACKUPD) != RTC_SR_ACKUPD);
第二,设置时间寄存器
RTC->RTC_SCCR = RTC_SCCR_ACKCLR;
RTC->RTC_TIMR = ul_time;
RTC->RTC_CR &= (~RTC_CR_UPDTIM);
RTC->RTC_SCCR |= RTC_SCCR_SECCLR;
RTC->RTC_CR |= RTC_CR_UPDCAL;
while ((RTC->RTC_SR & RTC_SR_ACKUPD) != RTC_SR_ACKUPD);
第三,设置日期寄存器
RTC->RTC_SCCR = RTC_SCCR_ACKCLR;
RTC->RTC_CALR = ul_date;
RTC->RTC_CR &= (~RTC_CR_UPDCAL);
// Clear SECENV in SCCR
RTC->RTC_SCCR |= RTC_SCCR_SECCLR;
第四,设置时间模式
/* Default RTC configuration, 24-hour mode */
RTC->RTC_MR &= ~RTC_MR_HRMOD;
第五,使能中断
/* Configure RTC interrupts */
NVIC_DisableIRQ(RTC_IRQn);
NVIC_ClearPendingIRQ(RTC_IRQn);
NVIC_SetPriority(RTC_IRQn, 0);
NVIC_EnableIRQ(RTC_IRQn);
第六,使能中断
RTC->RTC_IER = RTC_IER_SECEN;
水平有限,请大家多指点,谢谢!
后续还有很多外设的寄存器配置教程,请大家关注。
看官方的库,太乱,太累。
不喜欢拿来主义。
第六部分
配置RTC
首先,停止rtc计数,
RTC->RTC_CR |= RTC_CR_UPDTIM;
while ((RTC->RTC_SR & RTC_SR_ACKUPD) != RTC_SR_ACKUPD);
第二,设置时间寄存器
RTC->RTC_SCCR = RTC_SCCR_ACKCLR;
RTC->RTC_TIMR = ul_time;
RTC->RTC_CR &= (~RTC_CR_UPDTIM);
RTC->RTC_SCCR |= RTC_SCCR_SECCLR;
RTC->RTC_CR |= RTC_CR_UPDCAL;
while ((RTC->RTC_SR & RTC_SR_ACKUPD) != RTC_SR_ACKUPD);
第三,设置日期寄存器
RTC->RTC_SCCR = RTC_SCCR_ACKCLR;
RTC->RTC_CALR = ul_date;
RTC->RTC_CR &= (~RTC_CR_UPDCAL);
// Clear SECENV in SCCR
RTC->RTC_SCCR |= RTC_SCCR_SECCLR;
第四,设置时间模式
/* Default RTC configuration, 24-hour mode */
RTC->RTC_MR &= ~RTC_MR_HRMOD;
第五,使能中断
/* Configure RTC interrupts */
NVIC_DisableIRQ(RTC_IRQn);
NVIC_ClearPendingIRQ(RTC_IRQn);
NVIC_SetPriority(RTC_IRQn, 0);
NVIC_EnableIRQ(RTC_IRQn);
第六,使能中断
RTC->RTC_IER = RTC_IER_SECEN;
水平有限,请大家多指点,谢谢!
后续还有很多外设的寄存器配置教程,请大家关注。
自己顶一下,呵呵呵