iTop-4412裸机程序(二十二)-RTC时钟
- 游戏开发
- 2025-08-04 05:51:02

目录 0.源码1. RTC2. iTop4412 中的 RTC使用的相关寄存器3. BCD编码4. 关键源码
0.源码
GitHub:https://github.com/Kilento/4412NoOS
1. RTCRTC是实时时钟(Real Time Clock)的缩写,是一种用于计算机系统的硬件设备,用于记录和维护当前的日期和时间。RTC通常包括一个电池供电的计时器和一个晶体振荡器,以确保即使在停电情况下也能继续运行,并且能够提供准确的时间信息。
2. iTop4412 中的 RTC使用的相关寄存器我们使用 RTCCON寄存器控制时钟的读写。BCDSEC、BCDMIN、BCDHOUR、BCDDAYWEEK BCDDAY BCDMON 、BCDYEAR 等寄存器控制年月日时分秒。
3. BCD编码BCD(Binary-Coded Decimal)编码是一种用二进制数表示十进制数字的编码方式。在BCD编码中,每个十进制数字用4位二进制数表示,即一个十进制数的每个数字都被编码为4位的二进制数。例如,十进制数57用BCD编码表示为 0b01010111,对应十六进制为0x57。
4. 关键源码 static unsigned int dec_2_bcd(unsigned int dec) { return ((dec / 10) << 4 | (dec % 10)); } static unsigned int bcd_2_dec(unsigned int bcd) { return (((bcd & 0xf0) >> 4) * 10 + (bcd & 0x0f)); } void rtc_set_time(const struct rtc_time* time) { // 打开RTC读写开关 RTCCON |= (1 << 0); /// 写 RTC时间寄存器 BCDYEAR = dec_2_bcd(time->year) - 2000; BCDMON = dec_2_bcd(time->month); BCDDAY = dec_2_bcd(time->day); BCDDAYWEEK = dec_2_bcd(time->dayweek); BCDHOUR = dec_2_bcd(time->hour); BCDMIN = dec_2_bcd(time->minute); BCDSEC = dec_2_bcd(time->second); RTCCON &= ~(1 << 0); return; } void rtc_get_time(struct rtc_time* time) { // 打开RTC读写开关 RTCCON |= (1 << 0); /// 写 RTC时间寄存器 time->year = bcd_2_dec(BCDYEAR) + 2000; time->month = bcd_2_dec(BCDMON); time->day = bcd_2_dec(BCDDAY); time->dayweek = bcd_2_dec(BCDDAYWEEK); time->hour = bcd_2_dec(BCDHOUR); time->minute = bcd_2_dec(BCDMIN); time->second = bcd_2_dec(BCDSEC); RTCCON &= ~(1 << 0); }2024年02月14日
Kilento
iTop-4412裸机程序(二十二)-RTC时钟由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“iTop-4412裸机程序(二十二)-RTC时钟”
上一篇
高效的工作学习方法
下一篇
c++恶魔轮盘制造第1期输赢