-
Notifications
You must be signed in to change notification settings - Fork 4
Horloge et events
La gestion du temps s'appuie sur une horloge périphérique appelée RTC (Real Time Clock) ainsi que sur le compteur programmable PIT (Programmable Interval Timer) I8254. À l'initialisation nous allons interroger l'horloge afin d'obtenir la date et l'heure actuelle, à partir de ce moment nous n'aurons plus besoin de consulter la RTC. En effet, une fois l'heure et la date obtenues, la nouvelle heure est extrapolée grâce au PIT. Pour cela nous paramétrons le timer pour lancer une interruption au bout d'un temps T correspondant à un tick système, à l'issue de cette interruption le temps système est incrémenté et le PIT est reconfiguré pour un autre tick. Le temps écoulé en secondes est calculé à partir de la durée d'un tick.
La communication avec la RTC se fait en écrivant une requête sur le port 0x70 et en lisant la réponse sur le port 0x71. Les requêtes possibles sont : seconde (0x00), minute (0x02), heure (0x04), jour de la semaine (0x06), jour du mois (0x07), mois (0x08), année (0x09).
La requête "jour de la semaine" demande une réponse du type Lundi, Mardi..., Samedi, Dimanche. Tandis que la requête "jour du mois" demande une réponse du type 1,2,...,30,31.
La RTC répond non pas dans un format binaire pur mais dans un format dit décimal codé en binaire (BCD). Dans ce format les décimales qui constituent le mot en base 10 sont encodées unes à unes sur 4 bits. Exemple : 27 encodé en binaire donne 16+8+2+1 soit 0001 1011, 27 encodé en BCD donne 2 soit 0010 puis 7 soit 0111 donc 0010 0111.
Le fonctionnement d'un PIT est le suivant, un PIT contient généralement un registre incrémenté à intervalle régulier. Lorsque la valeur du registre provoque un overflow, le PIT génère une interruption (ici IRQ0). Configurer un compteur consiste donc à mettre en place un handler sur l'interruption qui sera levée puis à paramétrer le registre de manière à ce que l'interruption arrive au moment voulu. La configuration de l'I8254 se fait à travers le port 0x40 pour positionner le registre de comparaison et le port 0x43 pour régler plus précisément le fonctionnement du compteur.
TODO.