Microprocesseurs ATMEL Part3
Microprocesseurs ATMEL Part3
Microprocesseurs ATMEL Part3
Les mémoires de données sont organisées en mots de 8 bits alors que la mémoire programme
est organisée en mots de 16 bits. L’espace « données » est complétement séparé de l’espace
« programme » (architecture de HARVARD), ce qui permet, grâce au fonctionnement en
mode « pipe-line », une amélioration de la vitesse d’exécution des instructions.
cours_atmega16_v3.doc 21
- une unité arithmétique et logique (ALU)
- un compteur programme de 13 bits (soit 8K mots adressables)
- un registre d’état
- un pointeur de pile
- un cache, un registre et un décodeur d’instruction
Ils sont au nombre de 32 (notés R0 à R31) et peuvent s’apparenter à des registres contenant
chacun 8 bascules D et possédant une commande de sortie 3 états (haute impédance) .
Les registres :
- R26 et R27 concaténés constituent le registre d’index X
- R28 et R29 concaténés constituent le registre d’index Y
- R30 et R31 concaténés constituent le registre d’index Z
Les registres R26, R28, R30 constituent les poids faibles des index X, Y, Z.
cours_atmega16_v3.doc 22
compteur s’incrémente et vient pointer, s’il n’y a pas eu d’instruction de saut, l’adresse
suivante de la mémoire de programme permettant ainsi le chargement et l’exécution de
l’instruction qui s’y trouve. Les sauts de programme (ou sauts d’adresses) qui sont à
l’initiative de l’instruction qui vient d’être exécutée sont rendus possibles grâce au
chargement parallèle du compteur.
Il s’agit d’un registre de 8 bits constitué par des bascules D qui peuvent être écrites ou lues
séparément. Ce registre contient des « drapeaux » qui se positionnent ou non en fonction du
résultat de l’instruction qui vient d’être exécutée (ils sont actifs à 1). La rubrique « Flags » du
tableau des instructions indique quels sont les drapeaux affectés en fonction des instructions
exécutées.
Remarque : Lorsqu’une instruction est susceptible de modifier l’état d’un bit du registre
SREG, celui-ci est remis à 0 avant l’exécution de l’instruction.
C’est un registre de 16 bits (SPH et SPL) dont seulement les 11 bits de poids faibles sont
utilisés (puisque la zone RAM va de $60 à $45F). Il pointe la prochaine adresse libre dans la
pile (SRAM interne dont l’adresse finale est $45F). Son rôle est:
- d’adresser la pile pour la sauvegarde de l’adresse de retour du programme lors
d’un appel à un sous-programme ou lors d’une interruption. (instruction CALL ou
ICALL par exemple).
- d’adresser la pile pour la restitution de l’adresse de retour du programme lors du
retour d’ un sous-programme ou du retour d’une interruption. (instruction RET ou
RETI).
Le pointeur de pile doit toujours être initialisé avec l’adresse haute de la RAM dès le
début du programme. Dans le cas du Atmega16 cette adresse est $45F.
3.4.1 Le Reset
Il a pour but la réinitialisation complète du microcontrôleur. Celle-ci se produit :
- à la mise sous tension du circuit tant que les alimentations ne sont pas stabilisées
- à partir d’un circuit « chien de garde »
cours_atmega16_v3.doc 23
- ou par action d’un opérateur (bouton poussoir).
Souvent la génération du Reset à la mise sous tension est confiée à des circuits intégrés
spécialisés (ex : Motorola MC34064) et parfois à un simple réseau RC. Par construction
(câblage interne) le passage à 0 de la broche Reset force le compteur de programme à
pointer l’adresse 0. Le signal de Reset doit être maintenu actif pendant une durée T après la
mise sous tension (cette durée est fournie par le constructeur du composant et est de 50ns
minimum s’agissant du Atmega16).
cours_atmega16_v3.doc 24
- le bit I du registre d’état (SREG) est mis à 0 (inhibition des autres sources
d’interruption)
- l’exécution du programme en cours est interrompue
- le contenu du PC est sauvegardé dans la pile
- le PC est chargé avec la valeur de l’adresse d’interruption
- l’instruction de saut à l’adresse de traitement de l’interruption est exécutée
- le programme de traitement d’IT est exécuté
- à la fin du programme, l’instruction RETI restaure le contenu du PC
- le bit I du registre d’état (SREG) est mis à 1 (validation des autres sources
d’interruption).
Remarque : lors d’une interruption, le processeur ne sauvegarde pas le contexte (état des
registres de travail et registre d’état SREG). Il est donc important de sauvegarder au moins le
registre d’état en début du sous-programme d’interruption et de le restituer à la fin en utilisant
les instructions PUSH et POP.
Nota :
Ayant opté pour une programmation du circuit en langage C, ces instructions seront peu
abordées dans le cadre de ce cours.
Les registres PINx permettent au microcontrôleur de lire l’état logique des broches. Les
registres PORTx permettent au microcontrôleur de forcer à un niveau logique les broches des
ports (commande d’actionneurs « tout ou rien »).
cours_atmega16_v3.doc 25
Description des registres :
cours_atmega16_v3.doc 26
Exercice :
A partir du programme ci-dessous, vérifier sur le schéma électrique l’adéquation entre les
valeurs des registres et les fonctions réalisées.
Architecture :
cours_atmega16_v3.doc 27
L’expression de la valeur numérique N délivrée par le CAN en fonction de la tension à
convertir VE est donnée par la relation suivante :
REMARQUES :
- La 1ère conversion qui suit la validation de la fonction CAN est plus longue, en effet le
CAN procède à certains ajustements internes. Cette 1ère conversion nécessite 25 cycles
d’horloge CAN.
- Si on se limite à une résolution de 8 bits (en ignorant les 2 bits de poids faibles) la fréquence
de l’horloge de conversion peut être choisie jusqu’à 1MHz. (Voire 2MHz si résolution utile 6
bits)
Registres du CAN :
Le registre ADMUX :
cours_atmega16_v3.doc 28
Le registre ADCSRA :
cours_atmega16_v3.doc 29
ADEN : Ce bit met en fonction le CAN quand il est positionné à 1. Si ce bit est à 0 le CAN
est désactivé, cela permet de réduire la consommation.
- ADSC : La mise à 1 de ce bit lance la conversion de la voie sélectionnée. (Ce bit retourne à
0 automatiquement en fin de conversion).
- ADATE : Ce bit lorsqu’il est à 1 permet de déclencher la conversion sur l’apparition d’un
signal de trig. La source de ce signal est déterminée par les bits ADTS dans le registre
SFIOR.
- ADIF : Ce bit passe à 1 quand la conversion en cours est terminée et que le résultat est
disponible. Ce bit est remis automatiquement à 0, lorsque l’interruption associée au CAN est
générée. Si la génération de l’interruption du CAN n’est pas validée, l’utilisateur doit remettre
ce bit à 0 (en y écrivant un 1) avant de relancer une conversion.
ADC : Registre de conversion : Le résultat de la conversion sur 10 bits est placé dans les 2
registres suivants ADCH et ADCL :
cours_atmega16_v3.doc 30