From 39085938cf15f33a16f84621161b5c0b18c790fe Mon Sep 17 00:00:00 2001 From: Abb1x <54687179+Abb1x@users.noreply.github.com> Date: Fri, 16 Apr 2021 15:26:33 -0400 Subject: [PATCH 1/4] WIP RTC --- .../p\303\251riph\303\251riques/RTC.md" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "src/x86_64/p\303\251riph\303\251riques/RTC.md" diff --git "a/src/x86_64/p\303\251riph\303\251riques/RTC.md" "b/src/x86_64/p\303\251riph\303\251riques/RTC.md" new file mode 100644 index 0000000..2a95488 --- /dev/null +++ "b/src/x86_64/p\303\251riph\303\251riques/RTC.md" @@ -0,0 +1,49 @@ +
+Attention!
Cet article est en cours de rédaction. +
+ +# Introduction + +RTC ou Real-Time Clock, est une puce qui mesure le passage du temps. +Elle peut être utilisée pour avoir la date et heure précise. (voir ACPI pour le siècle) + +# Lire le temps +Il est possible de lire depuis la RTC en utilisant les fonctions suivantes: +```c +/* Check if RTC is updating */ +int rtc_is_updating() +{ + outb(0x70, 0x0A); + return inb(0x71) & 0x80; +} + +unsigned char rtc_read(int reg) +{ + while (rtc_is_updating()); + outb(0x70, reg); + + return inb(0x71); +} +``` +Voici la table des éléments à lire depuis la RTC et leur registre CMOS +| Élement de temps | Registre +|-------------|---------------| +| Secondes | 0x0 | +| Minutes | 0x02 | +| Heures | 0x04 | +| Jour de la semaine | 0x06 | +| Jour | 0x07 | +| Année | 0x09 | + +**Note:** les valeurs retournées sont en BCD et non pas en décimal. +# Exemples +Voici un exemple d'une lecture des secondes + +```c +unsigned char rtc_get_seconds() +{ + unsigned char seconds = rtc_read(0); + unsigned char second = (seconds & 0x0F) + ((seconds / 16) * 10); + return second; +} +``` From 191ddf0d167d192c94736180764cfb177c59ef37 Mon Sep 17 00:00:00 2001 From: Abb1x <54687179+Abb1x@users.noreply.github.com> Date: Fri, 16 Apr 2021 15:33:40 -0400 Subject: [PATCH 2/4] Ajout de commentaires, images et ressources --- "src/x86_64/p\303\251riph\303\251riques/RTC.md" | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git "a/src/x86_64/p\303\251riph\303\251riques/RTC.md" "b/src/x86_64/p\303\251riph\303\251riques/RTC.md" index 2a95488..afd150d 100644 --- "a/src/x86_64/p\303\251riph\303\251riques/RTC.md" +++ "b/src/x86_64/p\303\251riph\303\251riques/RTC.md" @@ -7,10 +7,13 @@ RTC ou Real-Time Clock, est une puce qui mesure le passage du temps. Elle peut être utilisée pour avoir la date et heure précise. (voir ACPI pour le siècle) + + + # Lire le temps Il est possible de lire depuis la RTC en utilisant les fonctions suivantes: ```c -/* Check if RTC is updating */ +/* Vérifier si la RTC est en train de se mettre à jour */ int rtc_is_updating() { outb(0x70, 0x0A); @@ -19,7 +22,7 @@ int rtc_is_updating() unsigned char rtc_read(int reg) { - while (rtc_is_updating()); + while (rtc_is_updating()); /* Attendre que l'update finisse */ outb(0x70, reg); return inb(0x71); @@ -43,7 +46,12 @@ Voici un exemple d'une lecture des secondes unsigned char rtc_get_seconds() { unsigned char seconds = rtc_read(0); - unsigned char second = (seconds & 0x0F) + ((seconds / 16) * 10); + unsigned char second = (seconds & 0x0F) + ((seconds / 16) * 10); /* Convertir au décimal */ return second; } ``` + +# Ressources +[Wikipedia](https://en.wikipedia.org/wiki/Real-time_clock) +[OSDev.org - CMOS](https://wiki.osdev.org/CMOS) +[OSDev.org - RTC](https://wiki.osdev.org/RTC) From 004808bd93f5e9b1ebd2b94afc09d1344f7fd747 Mon Sep 17 00:00:00 2001 From: Abb1x <54687179+Abb1x@users.noreply.github.com> Date: Fri, 16 Apr 2021 15:34:11 -0400 Subject: [PATCH 3/4] Markdown fix --- "src/x86_64/p\303\251riph\303\251riques/RTC.md" | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git "a/src/x86_64/p\303\251riph\303\251riques/RTC.md" "b/src/x86_64/p\303\251riph\303\251riques/RTC.md" index afd150d..b99d3e2 100644 --- "a/src/x86_64/p\303\251riph\303\251riques/RTC.md" +++ "b/src/x86_64/p\303\251riph\303\251riques/RTC.md" @@ -52,6 +52,6 @@ unsigned char rtc_get_seconds() ``` # Ressources -[Wikipedia](https://en.wikipedia.org/wiki/Real-time_clock) -[OSDev.org - CMOS](https://wiki.osdev.org/CMOS) -[OSDev.org - RTC](https://wiki.osdev.org/RTC) +- [Wikipedia](https://en.wikipedia.org/wiki/Real-time_clock) +- [OSDev.org - CMOS](https://wiki.osdev.org/CMOS) +- [OSDev.org - RTC](https://wiki.osdev.org/RTC) From 73396eef1346fbe7f7aa5ac1e52cdfb88713e105 Mon Sep 17 00:00:00 2001 From: Abb1x <54687179+Abb1x@users.noreply.github.com> Date: Wed, 28 Apr 2021 09:25:35 -0400 Subject: [PATCH 4/4] Update RTC.md --- "src/x86_64/p\303\251riph\303\251riques/RTC.md" | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git "a/src/x86_64/p\303\251riph\303\251riques/RTC.md" "b/src/x86_64/p\303\251riph\303\251riques/RTC.md" index b99d3e2..0ddf7a7 100644 --- "a/src/x86_64/p\303\251riph\303\251riques/RTC.md" +++ "b/src/x86_64/p\303\251riph\303\251riques/RTC.md" @@ -13,19 +13,27 @@ Elle peut être utilisée pour avoir la date et heure précise. (voir ACPI pour # Lire le temps Il est possible de lire depuis la RTC en utilisant les fonctions suivantes: ```c + +enum +{ + CMOS_ADDRESS = 0x70, + CMOS_DATA = 0x71, + STATUS_REGISTER_A = 0x0A +}; + /* Vérifier si la RTC est en train de se mettre à jour */ int rtc_is_updating() { - outb(0x70, 0x0A); - return inb(0x71) & 0x80; + outb(CMOS_ADDRESS, STATUS_REGISTER_A); + return inb(CMOS_DATA) & 0x80; } unsigned char rtc_read(int reg) { while (rtc_is_updating()); /* Attendre que l'update finisse */ - outb(0x70, reg); + outb(CMOS_ADDRESS, reg); - return inb(0x71); + return inb(CMOS_DATA); } ``` Voici la table des éléments à lire depuis la RTC et leur registre CMOS