am5728的RTC移植问题总结

本文介绍AM5728开发板上的ISL1208 RTC硬件模块调试方法,包括解决硬件时钟重置问题、使用hwclock命令进行时间同步、排查驱动编译问题等常见调试技巧。

一. 开发环境

1. 硬件环境。使用的是 am5728,rtc硬件模块为 ISL1208,i2c总线控制,原理图如下:

2. 软件环境。此处 dts的设置如下:此 rtc 挂在 i2c1 上

二. 调试时常碰到的问题

1. arm板重新上电时,硬件时钟总是重置

2. 使用 hwclock 读取硬件时钟时,出错

三. 解决方法

调试中常使用的两个工具:date 和 hwclock

a. date。显示当前的系统时间。

可以使用此命令,修改当前系统时间,为:date -s "2010-04-05 14:31:00"

b. hwclock。显示当前硬件 rtc的时间(默认为rtc0)

hwclock -s。将硬件时间同步到系统时间

hwclock -w。将系统时间同步到硬件时间

hwclock -f /dev/rtc1。读取指定硬件 rtc的时间

1. 排查硬件问题。用万用表量 vbat 和 gnd间是否有电压。并确定电池是否有电

2. 排查驱动是否编译进内核。使用 dmsg 查看是否有相关的打印信息,没有则可能是驱动没有添加。

此处的问题为驱动没有编译进内核,将驱动编译进即可

3. 对照原理图,查看 rtc挂在那个 i2c上即可。

4. 解决hwclock: RTC_SET_TIME: Invalid argument问题的方法。当 rtc驱动加载完成后,应该使用 hwclock -w,将新的时间写入 rtc

### RTC 秒中断实现原理 RTC(实时时钟)秒中断是指每经过 1 秒,RTC 会产生一个中断信号,触发相应的中断服务程序。在 GD32H7 系列芯片中,RTC 模块具备秒中断功能,其基本原理是利用 RTC 的秒计数器,当秒计数器的值发生变化时,会设置相应的秒标志位,若使能了秒中断,就会触发中断请求。 ### 实现步骤 #### 1. 使能 RTC 时钟和相关外设时钟 要使用 RTC 功能,首先需要使能 RTC 时钟以及相关的外设时钟。以下是使用 GD32H7 标准库的代码示例: ```c #include "gd32h7xx.h" void rtc_clock_config(void) { /* 使能 PWR 时钟 */ rcu_periph_clock_enable(RCU_PWR); /* 使能 RTC 时钟 */ rcu_backup_reset_enable(); rcu_osci_on(RCU_LXTAL); while(RESET == rcu_osci_stab_wait(RCU_LXTAL)); rcu_rtc_clock_config(RCU_RTCSRC_LXTAL); rcu_periph_clock_enable(RCU_RTC); } ``` #### 2. 配置 RTC 初始化参数 配置 RTC 的初始化参数,包括预分频值等。 ```c void rtc_init_config(void) { rtc_parameter_struct rtc_initpara; rtc_initpara.rtc_year = 23; rtc_initpara.rtc_month = RTC_MONTH_JANUARY; rtc_initpara.rtc_date = 1; rtc_initpara.rtc_weekday = RTC_WEEKDAY_SATURDAY; rtc_initpara.rtc_hour = 0; rtc_initpara.rtc_minute = 0; rtc_initpara.rtc_second = 0; rtc_initpara.rtc_ampm = RTC_AM; rtc_init(RTC_FORMAT_BIN, &rtc_initpara); } ``` #### 3. 使能 RTC 秒中断 通过设置 RTC 的中断使能寄存器来使能秒中断。 ```c void rtc_second_interrupt_enable(void) { /* 使能 RTC 秒中断 */ rtc_interrupt_enable(RTC_INT_SECOND); /* 使能 RTC 中断通道 */ nvic_irq_enable(RTC_IRQn, 0, 0); } ``` #### 4. 编写中断服务程序 当中断触发时,会执行相应的中断服务程序,在中断服务程序中可以处理秒中断事件。 ```c void RTC_IRQHandler(void) { if(SET == rtc_flag_get(RTC_FLAG_SECOND)) { /* 清除秒标志位 */ rtc_flag_clear(RTC_FLAG_SECOND); /* 在这里添加秒中断处理代码 */ } } ``` ### 使用指南 - **硬件连接**:确保外部低速晶体(LXTAL)正确连接到芯片的相应引脚,为 RTC 提供稳定的时钟源。 - **代码移植**:上述代码可以在基于 GD32H7 系列芯片的开发板上进行移植,根据实际需求修改初始化参数,如日期、时间等。 - **调试与测试**:在开发过程中,可以通过调试工具(如 JTAG、SWD)查看 RTC 的寄存器值和中断标志位,验证秒中断是否正常触发。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值