当前位置: 首页 > news >正文

iTop-4412 裸机程序(二十二)- RTC时钟

目录

  • 0.源码
  • 1. RTC
  • 2. iTop4412 中的 RTC使用的相关寄存器
  • 3. BCD编码
  • 4. 关键源码


0.源码

GitHub:https://github.com/Kilento/4412NoOS

1. RTC

RTC是实时时钟(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

相关文章:

  • c++恶魔轮盘制造第1期输赢
  • 第62讲商品搜索动态实现以及性能优化
  • CTFshow web(php命令执行 55-59)
  • 容器高级知识: 适配器模式与 Sidecar 模式的区别
  • Python 读取pdf文件
  • 如何流畅进入Github
  • Spring + Tomcat项目中nacos配置中文乱码问题解决
  • HarmonyOS 鸿蒙 ArkTS ArkUI 页面之间切换转换动画设置
  • 微服务OAuth 2.1认证授权可行性方案(Spring Security 6)
  • [嵌入式系统-14]:常见实时嵌入式操作系统比较:RT-Thread、uC/OS-II和FreeRTOS、Linux
  • uniapp的配置和使用
  • flask+python儿童福利院管理系统pycharm毕业设计项目
  • C++ 关键字小结
  • 使用 Elasticsearch 和 OpenAI 构建生成式 AI 应用程序
  • Java+SpringBoot构建智能捐赠管理平台
  • re:从0开始的CSS之旅 13. 文档流
  • 第十九篇【传奇开心果系列】Python的OpenCV库技术点案例示例:文字识别与OCR
  • 服务器安装Docker (centOS)
  • 《走进科学》灵异事件:Nginx配置改了之后一直报错
  • RabbitMQ交换机
  • 解放日报:浦东夯实“热带雨林”式科创生态
  • 澎湃回声丨23岁小伙“被精神病”8年续:今日将被移出“重精”管理系统
  • 江西德安回应“义门陈遗址建筑被没收”:将交由规范的义门陈相关社会组织管理
  • 软硬件企业集中发布未成年人模式使用手册
  • 坚持科技创新引领,赢得未来发展新优势
  • 新一届中国女排亮相,奥运冠军龚翔宇担任队长