[AUDIO_VIDE] Bonjour, la leçon que nous allons étudier s'intéresse aux timers. Au cours de cette leçon, nous verrons comment est géré le temps dans les applications des micro contrôleurs, puis l'étude de la structure interne du timer nous permettra de comprendre le rôle, et le fonctionnement, du bloc prédivision, du registre de comparaison et de la logique de gestion. Nous ferons une mise en œuvre des timers sur les MSP430, et les interruptions liées au timer. Les enseignes et afficheurs à LED, comme beaucoup d'applications des micro contrôleurs, nécessitent une gestion complexe et précise du temps. Gérer ce temps, en utilisant uniquement que les instructions du processeur, s'avère une tâche bien difficile. Heureusement, des circuits spécialisés, comme les timers, peuvent nous aider. Nous avons vu, dans le chapitre de la modulation des largeurs d'impulsions, que ce schéma nous permet de générer un signal, PWM. En effet, le compteur binaire, modulo 256, est cadencé par cette horloge. À chaque passage du compteur à la valeur zéro, la bascule de sortie, PWM, est mise à, 1. Lorsque le contenu du compteur est égal au contenu du registre de comparaison, la sortie de la bascule, PWM, est mise à, zéro. Nous voyons bien que l'élément central de ce schéma est le compteur binaire que voici. Ce schéma indique un compteur binaire, modulo 2. Nous remarquons que la fréquence de la sortie, en bleu, ici, est la moitié de la fréquence à l'entrée. Nous avons donc une division de fréquence. Si nous associons trois compteurs binaires, modulo 2, comme indiqué sur ce schéma, nous ferons un compteur, modulo 8. Le diagramme du temps montre que nous avons en sortie des fréquences sous multiples. Ici, nous aurons une fréquence, F zéro, divisé par deux, F zéro, divisé par quatre, F zéro, divisé par huit. F zéro, étant la fréquence du signal d'entrée sur le premier compteur. Cette figure nous présente la structure interne d'un timer. Nous avons le compteur binaire, modulo n, le bloc prédivision, la logique des gestions, et le registre de comparaison. Cette figure nous donne un exemple de la structure d'un prédiviseur. Ce multiplexeur permet de choisir, soit une horloge externe, soit l'horloge système. Le compteur, modulo 8, permet d'avoir, sur la sortie, des fréquences sous multiples. Le deuxième multiplexeur nous permet d'avoir, sur cette sortie, une fréquence adaptée au problème que nous voulons résoudre. Le Bit du registre d'état permet de commander les deux multiplexeurs. Ce schéma montre que le passage du timer, de la valeur maximale à la valeur zéro, provoque sur cette ligne un front montant, qui met à, 1, la bascule du, Overflow. L'état de la bascule du, Overflow, constitue le fanion de débordement. Ce fanion est consigné dans l'un des bits du registre d'état. La mise à, 1, de ce fanion peut provoquer une interruption, si cette interruption a les deux autorisations, l'autorisation locale, IE, et l'autorisation générale, GIE. La valeur du registre de comparaison, est en permanence comparée au contenu du timer. En cas d'égalité, le fanion d'égalité, CCIFG, est mis à, 1. Cet événement peut, éventuellement, générer une interruption, si elle est localement autorisée, et globalement autorisée, par le Bit, GIE. Les timers ont très vite complété les micro processeurs. En effet, dès 1981, Intel a mis sur le marché le célèbre 8253. Nous avons également observé des timers très simples sur les premiers micro contrôleurs PIC, mais ces timers très simples étaient utiles. Les micro contrôleurs, AVR, nous proposent des timers 16 bits et 8 bits. Nous retrouvons des timers 32 bits, très complexes, sur les micro contrôleurs, ARM. Nous allons nous intéressés au timer, à 16 bits, du MSP430. Sa structure interne dévoile quatre blocs. Nous avons un bloc timer, et trois blocs de, capture comparaison. Le bloc timer, que voici, nous présente le compteur binaire, 16 bits, qui possède quatre modes de fonctionnement. Nous pouvons choisir le mode qui nous sied, à l'aide de ces deux bits, puis, également, choisir, grâce à ce multiplexeur, l'une des quatre sources horloge. Nous avons le choix entre quatre facteurs de prédivision, que nous pouvons choisir grâce au Bit, IDx. Cette ligne permet de mettre à, 1, le fanion de débordement de capacité. Le registre de contrôle du bloc timer est un registre de 16 bits. Nous voyons, ici, les deux bits qui nous permettent de choisir les sources horloge, les deux bits qui nous permettent, également, de choisir les facteurs de prédivision, nous avons les deux bits qui nous permettent de choisir l'un des quatre modes de fonctionnement, et, le fanion de débordement est sur le Bit zéro. Remarquons, sur le Bit 1, l'autorisation d'interruption. Nous proposons, dans ce programme, d'utiliser les ressources que nous avons vues, du Bit de débordement, pour allumer et éteindre une LED, branchée sur la ligne, P1 zéro. La première instruction permet de désactiver le chien de garde, les deux suivantes permettent d'utiliser une horloge de un mégahertz, en orientant P1 point zéro, en sortie, du moins cette instruction permet de fixer le mode de fonctionnement du timer, par cette expression, nous sélectionnons les, MS Clock, ici, nous choisissons le facteur de prédivision 8, et là nous fixons le mode de fonctionnement continu. La boucle, while, teste en permanence le fanion de débordement. Lorsque celui-ci est à, 1, nous le remettons à zéro, par cette instruction, et inversons l'état de la ligne, P1 point zéro. Le bloc, capture et comparaison, montre que le registre de comparaison, ici présenté, est en permanence comparé avec le contenu du compteur binaire 16 bits. En cas d'égalité, le fanion, CCIFG, est mis à, 1. Il peut, éventuellement, générer une interruption, s'il est, localement et globalement, autorisé. Cette figure nous présente le registre de contrôle du bloc, capture et comparaison. Nous avons, sur le Bit zéro, le fanion d'égalité. Et sur le Bit 4, l'autorisation locale d'interruption. À partir de ces ressources du registre de comparaison, nous nous proposons de faire clignoter la LED sur P1 zéro, à une fréquence précise de un mégahertz. Cette instruction permet de charger le nombre, 62 500, dans le registre de comparaison du canal zéro. Ce nombre, 62 500, a été trouvé après des calculs, car nous utilisons une fréquence système de un mégahertz, et un facteur de prédivision de 8. Dans la boucle, while, nous testons, en permanence, le fanion d'égalité. Lorsque celui-ci est à, 1, nous le remettons à zéro, par cette instruction. Ajoutons la valeur, 62 500, au contenu du registre de comparaison. Et inversons l'état de la LED. Les timers deviennent très intéressants lorsqu'ils sont associés aux mécanismes d'interruption. Plusieurs événements peuvent provoquer des interruptions dans les timers. Nous nous intéressons à deux, le dépassement de capacité, et l'égalité du registre de comparaison avec la valeur du timer. Ce programme se propose de faire clignoter la LED, branchée sur P1 zéro, cette fois-ci en utilisant la routine d'interruption. La première ligne autorise localement l'interruption. La deuxième ligne l'autorise également, mais de façon générale. La routine d'interruption utilise le vecteur d'interruption, TAIV, qui possède trois cas. Le cas qui nous intéresse est le cas 10, qui est celui de l'Overflow. Lorsque ce cas se présente, nous inversons par cette instruction l'état de la LED. Ce programme permet de générer une interruption, lorsqu'il y a égalité du registre de comparaison et du compteur 16 bits. Nous autorisons localement l'interruption de la comparaison. Autorisons de façon générale les interruptions. La routine d'interruption, que voici, ajoute ce nombre au contenu du registre de comparaison. Notons que la boucle, while, ne contient aucune instruction. Elle est vide, donc nous ne faisons rien dans le programme principal. Ce dernier programme génère un signal, PWM, par interruption, sur n'importe quelle broche du micro contrôleur. Ce programme est constitué de deux routines d'interruption. La première routine d'interruption, que nous reconnaissons ici, permet de mettre à, 1, la sortie du signal, M, lorsque le compteur passe à zéro. La deuxième routine d'interruption remet la sortie PWM à zéro. Dans cette leçon, nous avons vu comment est géré le temps dans les applications des micro contrôleurs, à l'aide des timers. L'étude du timer a permis de comprendre le rôle et le fonctionnement des blocs les plus importants, tel que le bloc prédivision. Nous avons fait une mise en œuvre des timers sur les MSP430, et les interruptions liées aux timers.