LES TIMERS
Application au microcontrôleur MC9S12
 

Hugues ANGELIS

page  01

                

Les timers du 9S12

Dans le cas du HCS12, le bloc de timers est composé de 8 timers utilisant le même Free Running analogiques pour l'ensemble du bloc. Chacun de ces timers est associé à un port d'entrée/sortie.

Configurés en entrée, ces ports sont en mode Input Capture, mais il est possible de combiner ce mode au mode Pulse Accumulator (pour les 4 ports de poids faible).

Configuré en sortie, les ports sont en mode Output Compare.

On peut noter que le 9S12 dispose d'un module dédié à la PWM.(onde à rapport cyclique variable)

Le fonctionnement d'un bloc de timers est entièrement programmable au moyen de 64 registres de 8 bits. Même si ce document contient quasiment l'intégralité des registres du bloc de timers, seul les registres les plus fondamentaux seront vus lors du cours...

Les étages d'entrée/sortie

Les 8 étages d'entrée du 9S12 lui permettent, pour chaque voie configurée en mode Input Capture, de détecter des événements de type :
    Fronts montants exclusivement ;
    Fronts descendants exclusivement ;
    Fronts montants et descendants.

Les 8 étages de sortie du 9S12 lui permettent, pour chaque voie configurée en mode Output Compare, de modifier l'état de la sortie, à chaque égalité entre le Free Running analogiques et le registre de la voie, soit en mettant la sortie :
       à
     '1' ;
       à
     '0' ;
      ou  en la complémentant.

Le prédiviseur

Le prédiviseur d'horloge du 9S12 lui permet de diviser l'horloge système grâce à une batterie de diviseur par 2 débrayables.

La valeur du prédiviseur permet de fixer le nombre de diviseur par 2 en cascade entre l'horloge interne du 9S12 et l'horloge du Free Running analogiques. Mis à une valeur n il intercale alors n diviseurs par 2 en cascade entre l'horloge système et le free running counter, permettant d'obtenir une division de l'horloge par 2n , n pouvant prendre une valeur entre 0 et 7. On peut donc dire que les rapports de division accessibles sont donc 1, 2, 4, 8, 16, 32, 64, 128.

Le mode Pulse Accumulator

En mode Pulse Accumulator, le 9S12 utilise 4 registres de 8 bits spéciaux (PACN0, PACN1, PACN2 et PACN3) pour stocker le nombre d'impulsions vues sur les entrées respectivement 0, 1, 2 et 3 du bloc de timers.

Elles peuvent donc être conjointement utilisées en mode Input Capture et en mode Pulse Accumulator.

Le 9S12 peut aussi associer ces 4 registres par paire pour former 2 Pulse Accumulators de 16 bits, on a alors les Pulse Accumulators de 8 bits PAC3 et PAC2 associés pour former le premier (PACA), qui est connecté à l'entrée 7 du bloc de timers, et les Pulse Accumulators de 8 bits PAC1 et PAC0 associés pour former le second (PACB), qui est associé à l'entrée 0 du bloc de timers. Encore une fois, ces 2 Pulse Accumulators peuvent être utilisés en conjonction avec les étages d'entrée, permettant de travailler à la fois en mode Pulse Accumulator sur 16 bits et en Input Capture.

En mode 16 bits, le Pulse Accumulator PACA dispose de ces 2 modes de fonctionnement, d'une part le mode comptage d'événements (au sens strict, l'accumulation des pulses sans limite de temps) et d'autre part le mode "time gated" c'est-à-dire l'accumulation des périodes de l'horloge tandis que l'entrée est active.

En mode comptage d'événement (event counter), un front actif sur l'entrée 7 (montant ou descendant, mais pas montant et descendant) incrémente le compteur d'événement.

En mode Time Gated, le Pulse Accumulator compte le nombre de périodes de l'horloge système (ATTENTION, ce n'est pas celle du free running counter) divisée par 64, tandis que l'entrée 7 est active (à 1 ou à 0, le niveau actif étant configurable).

Le comptage d'événement (event counter) étant plutôt intéressant pour des phénomènes rapide (fréquencemètre), tandis que le mode "Time gated" est plus intéressant pour les phénomènes lents (périodemètre).

Le Pulse Accumulator PACB ne peut, quant à lui, effectuer que du comptage d'événement, via le port 0 du bloc de timers.

Fonctions supplémentaires du 9S12

Le bloc de timers dispose en plus des fonctions déjà décrites, d'un système interne de base de temps utilisant un décompteur programmable, le Modulus Down Counter, d'un double jeu de registres, les Hold Registers et de Delay Counters, pour les 4 voies basses (de 0 à 3).

Le Modulus Down Counter se comporte de la même manière que le Free Running Counter, toutefois, outre le fait qu'il décompte au lieu de compter, le Modulus Down Counter est aussi accessible en écriture, c'est-à-dire qu'il est possible de programmer sa valeur à tout instant.

Les Hold Registers interviennent en mode Input Capture ou pour les Pulse Accumulators. Ils permettent de créer un double buffer (c'est-à-dire une sauvegarde du registre) ce qui permet au microcontrôleur d'intervenir moins souvent pour lire le contenu des registres. On contrôle le passage des informations du registre principal au Hold Register au moyen d'une commande interne de Latch qui peut être temporisée, programmée ou forcée.

Les Delay Counters agissent comme des temporisations, ils permettent de "filtrer" les impulsions parasites d'un signal, en mode Input Capture ou pour le Pulse Accumulator, en imposant une durée minimum à chaque impulsion pour qu'elle puisse être prise en compte.

Les registres du bloc timer du 9S12

Registre

Taille
(octets)
Offset
(adressage)

Fonction

TIOS

1 0

Gestion du mode IC / OC

 TCNT

2 4&5

Free Running Counter

TSCR1

1 6

Gestion du bloc de timers

TTOV

1 7

Gestion des Overflow en mode OC

TCTL1

1 8

Gestion des étages de sortie en mode OC

TCTL2

1 9

TCTL3

1 10

Gestion des étages d'entrée en mode IC

TCTL4

1 11

 TIE

1 12

Gestion des interruptions pour les modes IC et OC

TSCR2

1 13

Gestion du bloc de timers

TFLG1

1 14

Flag des interruptions

TFLG2

1 15

 TC0

2 16&17

Registre du timer 0

TC1

2 18&19

Registre du timer 1

TC2

2 20&21

Registre du timer 2

 TC3

2 22&23

Registre du timer 3

 TC4

2 24&25

Registre du timer 4

TC5

2 26&27

Registre du timer 5

TC6

2 28&29

Registre du timer 6

TC7

2 30&31

Registre du timer 7

PACTL

1 32

Gestion du Pulse Accumulator A

PAFLG

1 33

Flag du Pulse Accumulator A

 PACN3

1 34

Registre du Pulse Accumulator 3

PACN2

1 35

Registre du Pulse Accumulator 2

PACN1

1 36

 Registre du Pulse Accumulator 1

 PACN0

1 37

 Registre du Pulse Accumulator 0

MCCTL

1 38

Gestion du Modulus Down Counter

MCFLG

1 39

Flag du Modulus Down Counter

 ICPAR

1 40

Gestion des Pulse Accumulators 0, 1, 2 et 3

 DLYCT

1 41

Gestion des Delay Counters

ICSYS

1 43

Gestion des Hold Registers

 PBCTL

1 48

Gestion du Pulse Accumulator B

 PBFLG

1 49

Flag du Pulse Accumulator B

PA3H

1 50

Hold Register du Pulse Accumulator 3

PA2H

1 51

 Hold Register du Pulse Accumulator 2

PA1H

1 52

Hold Register du Pulse Accumulator 1

PA0H

1 53

Hold Register du Pulse Accumulator 0

MCCNT

2 54&55

Modulus Down Counter

TC0H

2 56&57

Hold Register du registre du timer 0

TC1H

2 58&59

Hold Register du registre du timer 1

TC2H

2 60&61

Hold Register du registre du timer 2

 TC3H

2 62&63

Hold Register du registre du timer 3

Liste des registres "utiles" du 9S12.
Les registres sur fond bistre ne sont pas détaillés, ils sont identiques au précédent décrit