Professional Documents
Culture Documents
Jrme VICENTE
Les microcontrleurs
Sommaire
AVANT PROPOS ....................................................................................................... 4 I. MICROPROCESSEUR............................................................................................ 7 1.1. Systme informatique minimal ........................................................................................... 7 1.2. Excution de programme .................................................................................................. 11 1.3. Les Interruptions ............................................................................................................... 18 II. MICROCONTROLEURS..................................................................................... 21 2.1. Architecture dun Microcontrleur ................................................................................... 21 2.2. Etude du microcontrleur 8 bits ST7 ................................................................................ 24
a) Les registres internes ............................................................................................................................ 24 b) Lorganisation mmoire (memory map)................................................................................................ 26 c) Le jeux dinstruction.............................................................................................................................. 26
2.4. Les interruptions................................................................................................................ 39 III. UTILISATION DU LANGAGE C ....................................................................... 40 3.1. Organisation mmoire du ST7 et options de compilation................................................. 41 3.2. Allocation des variables .................................................................................................... 42
3.2.1. La zone DEFAULT_RAM .............................................................................................................. 42 3.2.2. Les variables en page zro ............................................................................................................... 43 3.2.3. Les constantes .................................................................................................................................. 43 3.2.4. Stockage en mmoire EEPROM...................................................................................................... 44 3.2.5. Allocation de bouts de code............................................................................................................. 44 3.2.6. Accs la mmoire via des pointeurs.............................................................................................. 44
Les microcontrleurs 3.5. Langage C optimis pour microcontrleurs ...................................................................... 50 IV. LA MISE EN UVRE ........................................................................................ 54 4.1. Mise en uvre matrielle .................................................................................................. 54 4.2. Mise en uvre logicielle ................................................................................................... 56 4.3. La chane de dveloppement ST7 ..................................................................................... 59 4.4. Exemple de projet.............................................................................................................. 61
4.4.1. Programme principal main.c ........................................................................................................ 61 4.4.2. fichier de link enviro.prm............................................................................................................. 63 4.4.3. fichier denvironnement defaut.env.............................................................................................. 64 4.4.4. fichier make enviro.mak............................................................................................................... 64
Les microcontrleurs
Avant propos
Microcontrleur : Circuit programmable capable dexcuter un programme et qui possde des circuits dinterface intgrs avec le monde extrieur. Les microcontrleurs sont apparus quand :
Quand on a sut les fabriquer, cad quand les technologies dintgrations ont
suffisamment progresses
Quand dans les applications domestiques ou industrielles ont avait besoin de systmes
intelligents ou tout au moins programmables. Exemple La machine laver qui doit commander diffrents organes avec des cycles bien dfinis mais variables en fonction du programme choisi. Quand utiliser un microcontrleur ? Toutes les solutions base de composants programmables ont pour but de rduire le nombre de composants sur le circuit lectronique et donc fiabiliser le circuit. Le microcontrleur est en concurrence avec dautres technologies Suivants les applications : 3 types de technologies Logique cble trs rapide, fonctions ralises par une voie matrielle non programmable, peu conomique quand lapplication est complexe peu de souplesse : dure dtude prohibitif et circuit difficilement modifiable Rseaux de logique programmables (PAL, LCA,..) rapide, adapt au traitement de signaux complexes prix lev et langage de programmation non standard Les processeurs grande souplesse : fonctions sont ralises par voie logicielle puissance de calcul, langage volu nombre important de composant runir, solution onreuse A retenir si la fonction raliser est simple une logique cble si le nombre d'units raliser est trs important circuits intgrs ddi en logique cble pour les fonctions simples
Les microcontrleurs Une ralisation logicielle est toujours plus lente qu'une ralisation en logique cble : le microprocesseur excute une instruction la fois Les contrleurs = avantage des processeurs mais limits aux applications ne ncessitant pas trop de puissance de calcul, nombre de composant trs rduit, mais souvent surdimensionnement devant les besoins de lapplication) Les avantages des microcontrleurs Diminution de lencombrement du matriel et du circuit imprim Simplification du trac du circuit imprim p(lus besoin de tracer de bus !) Augmentation de la fiabilit du systme nombre de composants connexions composants/supports et composant circuit imprim Intgration en technologie MOS, CMOS, ou HCMOS diminution de la consommation Le microcontrleur contribue rduire les cots plusieurs niveaux: moins cher que les composants quil remplace Diminution des cots de main duvre (conception et montage) Environnement de programmation et de simulation volus
Les dfauts des microcontrleurs le microcontrleur est souvent surdimensionn devant les besoins de lapplication Investissement dans les outils de dveloppement crire les programmes, les tester et tester leur mise en place sur le matriel qui entoure le microcontrleur Incompatibilit possible des outils de dveloppement pour des microcontrleurs de mme marque. Les microcontrleurs les plus intgrs et les moins coteux sont ceux disposant de ROM programmables par masque Fabrication uniquement en grande srie >1000 Dfaut relatif car il existe maintenant systmatique des version OTPROM un peu plus chre.
communication
le microcontrleur prsente lavantage des processeurs mais limits aux applications ne ncessitant pas trop de puissance de calcul (architecture courante 8bits) Il existe plusieurs architecture de microcontrleurs de 4 128 bits pour les applications demandant une certaine puissance de calcul (injecteurs automobile)
Les microcontrleurs
I. Microprocesseur
1.1. Systme informatique minimal
Dun point de vue matriel, un systme info minimal est constitu dun processeur, dune mmoire, et dentres sorties (figure 1)
a) Le processeur (CPU) Il a pour mission de rechercher les instructions qui sont en mmoire, de les dcoder et de les excuter. il compose de plusieurs lments internes : CPU = UAL + UC + registres CPU 1 unit arithmtique et logique (UAL) : charge des calculs +,-,*,/, AND, OR, NOT 1 unit de commande charge de traduire puis dexcuter les commandes Son rle est daller chercher une information en mmoire centrale, danalyser cette instruction (dcodage), dexcuter cette instruction, de localiser linstruction suivante. Un dcodeur dinstruction Un squenceur et des circuits de commande Un ensemble de circuits lectronique commands par lunit de contrle et permettant : Dchanger des informations avec la mmoire centrale et avec le monde extrieur (avec les priphriques) Deffectuer des oprations sur les donnes (Unit Arithmtique et Logique : UAL ou ALU en anglais) De mmoriser ladresse de la prochaine instruction dans un registre particulier PC (program counter)) De mmoriser le rsultat doprations dans des mmoires spciales : les Registres de travail 7
Les microcontrleurs
Cur Accumulateurs(s) Registres dusage gnral, Dcodeur dinstructions Pile Compteur Circuit dhorloge Quart Contrleur dinterruption
CPU
Circuit de reset
les registres CPU : cellules mmoire interne au processeur (rapide) 1 compteur ordinal (PC) pointant ladresse mmoire o se trouve la prochaine instruction rechercher et excuter. Aprs chaque recherche dinstruction, le compteur ordinal est incrment afin de pointer la prochaine instruction ( en fait aprs le chargement de loctet ou du mot mmoire faisant partie dune instruction, de manire pointer sur un code dinstruction. 1 registre dinstruction (I) qui contient le code de linstruction (code opratoire) recherche en mmoire. Les registres de donnes (X, Y, D0, Dx,..) permettent de stocker les oprandes ncessaires aux instructions de calcul ainsi que les rsultats lors doprations logiques et arithmtiques. Les registres dadresses (A, A0, Ax,..) permettent de stocker les adresses doprandes qui se trouvent en mmoire.
b) la mmoire la mmoire est utilise pour le stockage dinstructions, de donnes et de la pile (la pile est une portion mmoire rserve pour sauvegarder le contexte dexcution dune procdure cf. plus 8
Les microcontrleurs loin). La mmoire est constitue de cellule de mmorisation binaires, groupes en mots de 8, 16, 32 ou 64 bits. La mmoire est adresse par mots de 8 bits, c.a.d par octets (bytes). Une position mmoire est spcifie par ladresse dun octet. On distingue 2 architectures diffrentes. La premire dite de Von Neumann un seul espace adressable. Le programme et les donnes sont simplement rangs des adresses diffrentes. (cest le cas du ST7)
La deuxime dite de Harvard offre deux espaces physiquement spars pour le programme et les donnes. Il est donc impossible dcrire dans lespace de programme, ce qui le protge contre les destructions accidentelles et augmente lespace adressable. (cas du ST6, ST9, etc..)
Les microcontrleurs c) Le bus systme Il comporte les lignes permettant de relier entre eux le processeur, la mmoire, et les entres sorties. Il comprend les lignes dadresses provenant du microprocesseur, les lignes de donnes bidirectionnelles et les lignes de contrle. Le cur dun systme informatique est form par linteraction entre le processeur et sa mmoire.
d) Une horloge (un circuit oscillateur dlivrant des impulsions une certaine frquence) sera ncessaire pour excuter les oprations squentiellement). Plus la frquence sera grande, plus lunit centrale travaillera vite. (8MHZ veut dire 8 millions dimpulsions par secondes) e) Les entres-sorties Elles permettent au processeur daccder au monde extrieur par lintermdiaire de cycle de lecture et dcriture sur des interfaces dentre-sortie. (Interface clavier, cran, disque, ligne srie, etc). Une interface dentre-sortie est gnralement forme dun registres se trouvant une certaine position dadressage du microprocesseur. Les Circuits dinterfaces et les Priphriques On distingue 3 types de priphriques pour un ordinateur classique : dentres (clavier, souris, etc) de sorties (cran, imprimante, etc..) dentre/ sorties (ou mmoire de masse, lecteur de disquette, etc..) Pour relier les priphriques lensemble unit central + Mmoires, il faut passer par une Interface ( carte interface, circuit interface, coupleur de priphriques). Linterface se charge de ladaptation des signaux lectroniques et de grer le dialogue entre le systme et le priphrique (protocole dchange).
10
Les microcontrleurs
b) exemple du programme BruitHP Priphrique de sortie : le haut parleur Le programme consiste envoyer de manire rptitive sur le registre de sortie haut-parleur un signal binaire alternatif (1,0,1,0) afin de faire vibrer celui ci
11
Les microcontrleurs
Dans le cas de notre processeur simple, aprs activation de la ligne de remise zro (reset) le compteur ordinal (PC) est remis zro. La premire action entreprise par le processeur consiste effectuer un cycle daccs mmoire afin de lire le code de la premire instruction ladresse 0 en mmoire. Le processeur mmorise ce code (H103C) dans son registre dinstruction, le dcode et linterprte. Le compteur ordinal (PC) est ensuite mis jour afin de pointer la prochaine instruction. Le dcodage de linstruction H103C indique au processeur quil sagit dune instruction de transfert de la valeur immdiate dans le registre de donnes D0.
12
Les microcontrleurs Lexcution proprement dite dune instruction peut seffectuer implicitement lintrieur du processeur, sans exiger de cycles mmoire supplmentaire (par exemple lorsquune valeur immdiate est charge dans un registre de donnes). Elle peut galement exiger un ou plusieurs cycles daccs mmoire, lorsquil sagit dcrire une valeur en mmoire ou une position dentre-sortie. Par exemple lors de lexcution de la 3me instruction du programme MOVE.B D0,HP, il y a dabord un cycle mmoire de recherche de code dinstruction, puis un cycle de recherche de ladresse HP (cette adresse est place dans le registre interne AD) et enfin lexcution proprement dite de linstruction par un cycle dcriture de la valeur qui se trouve dans le registre D0 sur ladresse dentre-sortie
le diagramme temporel suivant donne la succession des cycles daccs mmoire et entressorties lors de lexcution du programme BruitHP.
13
Les microcontrleurs
c) Architectures de microprocesseurs L'architecture CISC CISC = Complex Instruction Set Computer instructions complexes qui ncessitent plusieurs cycles horloge pour sexcuter.
Exemple REP MOVSB = dplacement de plusieurs octets d une adresse A vers une adresse B var t1, t2 : array[1..10] of integer; for i := 1 to 10 do t2[i] := t1[i]; L'architecture CISC (Complex Instruction Set Computer, ce qui signifie "ordinateur avec jeu d'instructions complexes") est utilise par tous les processeurs de type x86, c'est--dire les processeurs fabriqus par Intel, AMD, Cyrix, ... Les processeurs bass sur l'architecture CISC peuvent traiter des instructions complexes, qui sont directement cbles sur leurs circuits lectroniques, c'est--dire que certaines instructions difficiles crer partir des instructions de base sont directement imprimes sur le silicium de la puce afin de gagner en rapidit d'excution sur ces commandes. L'inconvnient de ce type d'architecture provient justement du fait que des fonctions supplmentaires sont imprimes sur le silicium, d'o un cot lev. Aujourd hui : Instructions CISC + noyau RISC L'architecture RISC RISC = Reduced Instruction Set Computer (Ordinateur jeu dinstructions rduites) 1975 David Patterson = 80 % des instructions dun programme nutilisent que 20 % des instructions du CPU En rduisant le jeu dinstructions on simplifie le dcodage et donc larchitecture => temps de dveloppement (time to market) plus court
14
Les microcontrleurs Principe de lexcution dune instruction par cycle horloge Problmes lis au report de la complexit sur le logiciel => compilateur
La creation du RISC vient d'une critique des compilateurs, et non pas des processeurs CISC. Les compilateurs n'etaient pas capables de bien d'utiliser le jeu d'instructions d'un CISC. Faire un bon compilateur RISC est plus simple qu'on bon compilateur CISC. Contrairement l'architecture CISC, un processeur utilisant la technologie RISC (Reduced Instruction Set Computer, dont la traduction est "ordinateur jeu d'instructions rduit") n'a pas de fonctions supplmentaires cbles. Cela impose donc des programmes ayant des instructions simples interprtables par le processeur. Cela se traduit par une programmation plus difficile et un compilateur plus puissant. Pipelining objectif : faire en sorte que lUAL nait pas attendre de donnes, temps dexcution / k, problmes lis aux dpendances.
A1 = Fetch (aller chercher le code de la prochaine instruction) A2 = Decode (analyse du code pour savoir quelle opration excuter) A3 = Execute (excuter linstruction => UAL) A4 = Write back (criture du rsultat en mmoire ou registre)
Excution squentielle classique
A1 A2 A3 A4 A1 A2 A3 A4
Excution squentielle (Pipeline 1 tage)
A1 A1 A1 A1 A2 A2 A2 A2
Excution squentielle (Pipeline 4 tages)
A1 A2 A3 A1 A2 A3 A1 A2 A3 A1 A2 A3
exploiter le paralllisme au niveau des instructions traiter plusieurs instructions par cycle dupliquer le nombre dunits de traitement (2 UAL, 2 UVF) limite atteinte pour 5 6 instructions excuter en parallle 15
Les microcontrleurs
Processeurs Vectoriels Les registres du processeur sont des vecteurs Les instructions sont de type SIMD (Single Instruction Multiple Data) Exemple : somme de deux vecteurs var a, b, c : array[1..10] of integer; for i := 1 to 10 do c[i] := a[i] + b[i]; Vectoriel : c := a + b; VLIW = Very Long Instruction Word Il sagit de faire tenir plusieurs instructions en une seule Par exemple on code sur 128 bits plusieurs instructions qui seront excutes en parallle
MMX = Multimedia Les units MMX sont intgres au CPU et sont de type SIMD (Single Instruction Multiple Data). Les donnes sont stockes sur 64 bits (2x32,4x16,8x8) et peuvent tre traites en mme temps Lunit MMX permet de traiter les donnes vido et audio beaucoup plus rapidement que lUAL SSE = Internet Streaming SIMD (opration d imagerie 3D, acclration du tlchargement de fichiers audio et vido)
d) Le concept de Pile Une pile permet de stocker en mmoire de nombreuese valeurs successives. Ces valeurs sont relir dans lordre inverse de leur sauvegarde : structure LIFO :Last In First Out. Linstruction PUSH.X D1 quivalente linstruction MOVE.X D1,-(A7) sauve le registre D1 dans la pile. A cette fin, le pointeur de pile (A7) ets dcrment de 1,2 ou 4 pour respectivement sauver sur la pile un octet de 8 bits (.B), un mot de 16 bits (.W) ou un long mot de 32 bits (.L) du registre considr.
16
Les microcontrleurs
Le pointeur de pile pointe une nouvelle position en mmoire. Linstruction POP.X D1 quivalente linstruction MOVE.X (A7),D1 permet de rcuprer une valeur prcdement sauve sur la pile. Le pointeur de pile A7 est incrment afin de pointer la prochaine valeur sur la pile.
En rsum, le pointeur de pile est initialis la valeur max : quand on empile on dcrmente le compteur de pile et quand on dpile on incrmente le compteur de pile. La pile croit en direction de positions mmoire dadresses dcroissantes.
17
Les microcontrleurs
Tout se passe comme ci une instruction CALL tait insre juste aprs linstruction en cours au moment o la requte dinterruption devient active. La routine dinterruption doit seffectuer de manire transparente: aprs retour au programme interrompu ltat du processeur doit tre exactement le mme quavant linterruption. Ceci implique que la routine dinterruption doit sauver au dbut de son excution tous les registres internes y compris le registre dtat contenant les fanions (flags). Cette opration est appele sauvegarde du contexte. A la fin de la routine dinterruption, une instruction spciale de retour de routine dinterruption restaure le registre de fanions et dtat ainsi que le compteur ordinal avec les valeurs sauvegardes sur la pile lors de lappel de la routine dinterruption. Le processeur, lors dune interruption, demande linterface dentre-sortie ayant dclench linterruption de sidentifier lors dun cycle dacquittement dinterruption. Lidentificateur 18
Les microcontrleurs de linterface ayant dclench linterruption est transmis sous forme dun octet sur les lignes de donnes. Cet octet qui identifie la source de linterruption et donc la routine dinterruption est intitul le vecteur dinterruption. Une correspondance est tablie entre la valeur du vecteur dinterruption et la case mmoire (fixe par le constructeur) qui contiendra ladresse du dbut de la routine excuter. b) gestion des IT Le mcanisme de prise en compte des interruptions qui se trouve dans le processeur empche une nouvelle interruption de niveau identique celui de linterruption prcdente de venir interrompre lexcution de la routine dinterruption.
Au cas o 2 interfaces dentre-sortie interrompent simultanment le microprocesseur, un arbitrage a lieu entre les deux interfaces concernes afin qune seule dentre elle place sont vecteur dinterruption sur les lignes de donnes pendant le cycle dacquittement de linterruption. Lautre vecteur est alors empil dans le systme de gestion des interruption pour tre excuter a la fin de la routine dinterruption en cours. Schmatiquement, les principaux registres internes associs au contrle des interruptions sont le registre de mmorisation de requete dinterruption le registre de masquage dinterruption (Interrupt Mask Register) qui permet dautoriser ou dinhiber de manire slective une ligne de requte dinterruption. le registre de service dinterruption qui mmorise les vecteurs dinterruption associes aux diffrentes sources dinterruption et qui indique linterruption actuellement en service. c) conclusion Un systme dinterruption doit tre capable de : Transmettre les requtes dinterruption en fonction de leur priorits respectives, tout en mmorisant les requtes pendantes. Dassigner chaque requte dinterruption ladresse du dbut de la routine dinterruption correspondante.
Les parametres important dun systme dinterruption sont : - nombre de sources de requtes dinterruption
19
Les microcontrleurs frquence des requtes dinterruption temps pris par lexcution dune interruption dlai entre la requte et lexcution de la routine dinterruption
20
Les microcontrleurs
II. Microcontrleurs
2.1. Architecture dun Microcontrleur
Le microcontrleur est un driv du microprocesseur. Sa structure est celle des systmes base de microprocesseurs. Il est donc compos d'une unit centrale de traitement et de commande (quivalente au microprocesseur), de mmoires et de ports d'entres/sorties. En plus de cette configuration minimale, les microcontrleurs sont dots d'un ou plusieurs systmes de comptage (TIMER). Quelques uns sont dots d'un convertisseur analogique/numrique (CAN) intgr. Ces atouts supplmentaires permettent de nombreuses applications telles que : - acquisition et traitement de donnes analogiques (CAN) - comptage d'vnements (TIMER) - mesure de frquence ou de priode (TIMER) - gnration d'impulsions (TIMER) les programmes peuvent tre diffrents (gestion dun thermostat intelligent, dune photocopieuse..) les programmes ont en commun peut de calculs complexes contrairement un systme informatique)
Contrleur dinterruptions
Horloge
Ports dentres/sorties
TXD RXD
monde extrieur
Un systme minimal programmable pour fonctionner besoin : dune unit centrale de mmoires morte pour le programme (PROM, EPROM,.) de mmoires vive, pour les calculs, pour stocker les donnes,.. de circuits interfaces, pour connecter les priphriques qui vont permettre la communication avec lextrieur
21
Les microcontrleurs do lapparition des microcontrleurs (ou Monochip) Dans un seul circuit on va trouver : Une Horloge (oscillateur) Un processeur (Unit centrale) De la mmoire vive (RAM) De la mmoire morte (PROM, EPROM, EEPROM) Des interfaces qui vont dpendre du type de microcontrleurs choisi o Compteurs/Timer o Convertisseurs Analogiques/numriques (C.A.N.) o Chien de garde ( Watch Dog ) o Gestion dun port parallle (dentre/sortie) o Gestion dune liaison srie RS232 o Gestion des interruptions o Gestion des moteurs en PWM (pulse w modulation) o Gestion dcran LCD o Gestion de bus I2C o Etc Il suffit de choisir le microcontrleur le mieux adapt lapplication que lon doit raliser. ! la ROM contient le programme excuter contrairement un systme informatique classique, il nest pas question de charger un programme en mmoire vive partir dun disque ou dune disquette car lapplication doit dmarrer ds la mise sous tension et ne possde pas dorgane de ce type. la RAM ou mmoire vive (Random access memory :mmoire accs alatoire) On les appel comme a de faon impropre LES ROM sont aussi a accs alatoire Ces mmoires perdent linformation lorsquelles ne sont plus alimentes. Pour pouvoir travailler normalement le contrleur doit pouvoir a souvent besoin de stocker des donnes temporaire qque part et cest la quintervient la RAM. Contrairement a un systme informatique classique la RAM dun contrleur est de petite taille. Les entres sorties les circuits dinterfaces peuvent piloter des matriels trs diffrents, (moteur pas as, afficheur LCD, thermistance, communication avec des pc ou dautres contrleurs, etc) Le bus systme Lunit centrale doit pouvoir communiquer avec les mmoires et les priphriques.
22
Les microcontrleurs Exemple : pour crire une donne en mmoire, lUC doit dabord spcifier ladresse de la mmoire, puis envoyer la donne, et en dernier lieu, envoyer un signal qui validera la mmorisation de la donne. Tous ces signaux seront vhiculs par les bus , ensembles de conducteurs , sur lesquels viennent se brancher les mmoires, les interfaces des priphriques. On distingue 3 types de bus le bus dadresses le bus de donnes le bus de contrle (pour les signaux de service) Les diffrents types de mmoires dans les microcontrleurs Le prix du microcontrleur dpend fortement du type de mmoire quil contient. Outre les diffrents priphriques possibles, les diffrents types de mmoire constituent les diffrentes gammes de microcontrleurs de mme architecture. La ROM qui contient le programme excuter (plusieurs kilo octets) ne sefface pas hors tension 1. PROM. (Programmable Read Only memory) On les appelle aussi mmoire fusibles ou OTP (One Time Programmable) La programmation de ce type de mmoires consiste faire claquer des fusibles (qui sont en fait des jonctions semi-conductrices) 2. EPROM (Erasable Programmable Read Only Memory) ou UVPROM Ce sont des mmoires programmables lectriquement et effaable par UV donc rutilisables. Il faut noter que leffacement par UV (environ 15 min) et lcriture (qques minutes) sont des oprations relativement longues. Ncessite une petite fentre en quartz pour laisser passer les UV. (principe utilis :utilisation de transistors FAMOS : Floating Gate Avalanche Injection Metal Oxide Silicium) apparition dOTPROM qui sont des UVPROM sans fentre et donc non rutilisable mais pas chre. 3. Autres EEPROM (Erasable Programmable Read Only Memory) Ce sont des mmoires programmables et effaables lectriquement, ou aussi mmoires FLASH. Procd beaucoup plus rapide que lors dune exposition UV. la RAM (mmoire des donnes, variables, piles,etc..) (quelques octets) sefface hors tension.
23
Les microcontrleurs
Laccumulateur (A) (Registre de donne) Registre o sont effectus les calculs arithmtique et logiques. Pour effectuer une opration en mmoire il faut dabord copier la premire dans laccumulateur, puis effectuer lopration entre laccumulateur et la deuxime valeur. Le rsultat peut alors tre recopi de laccumulateur vers la mmoire. Les registres dindex (X et Y) (Registre dadresse) Ces registres contiennent des adresses. Avoir 2 registres dadresse permet de grer les dmnagement de mmoire mmoire. Sinon on peut les utiliser pour stocker des donnes temporaires Exemple D[k]=C[j]+B[i] ; LD X,i LD A,([B],X) LD X,j ADD A,([C],X) LD X,k LD ([D],X),A
24
Les microcontrleurs
Le compteur de programme (PC) Ce registre commande le squencement des instructions. PC contient ladresse de la prochaine instruction excuter. PC sincrmente automatiquement avec une constante (x octets = code instruction + code oprande) sauf en cas de saut ou branchement (PC se charge alors avec ladresse de dbut de la routine appele suite un CALL par exemple). Le pointeur de pile (SP) La pile est une zone de mmoire vive utilise par les instructions CALL, RET et PUSH , POP Quand une valeur est empile, SP est dcrment et la valeur est crite ladresse situe immdiatement en dessous de la dernire valeur empile. Lempilement dcrmente et le dpilement incrmente permet limbrication dappel de sous programme. Exemple : 1 ss. prog. peut appeler un ss. prog. qui en appelle 1 troisime. 3 adresses de retour sont empiles (3 call) : le premier RET fera retourner la troisime la deuxime, etcjusquau prog principal Cas des interruptions Empilent ladresse de retour, mais aussi le contenu de tous les registre (A,X,CC) sauf Y. Le retour dinterruption se fait par une instruction spciale IRET, qui dpile toutes les valeurs et remplace les registres dorigine. Initialisation du pointeur de pile Au dvbut du prog le pointeur de pile doit tre initialis. RSP qui met SP une valeur qui dpend du modele de ST7. Le registre code condition (CC) 1 1 1 H I N Z C les bits de ce registre sont mis jour aprs chaque opration. Le bit C Cest le bit de retenu (addistion ou soustraction) Exemple : addition 16 bit 1200 + 6230 4B0 + 1856 = 1D06 B0 + 56 = 106 (hexa) 1 est la retenu 4 + 18 = 1C, 1C+1=1D pour cela la premire instruction utilse ADD, et toutes les autres ADC IDEM pour la soustraction avec SUB et SUBC
25
Les microcontrleurs Le bit Z Il permet de savoir si le dernier rsultat tait zero ou non Le bit N Il permet de savoir si le dernier rsultat tait ngatif ou non Le bit I Cest le masque global dinterruptions. Quand il est 1 toutes les demandes dinterruption sont ignores. Si une demande est en attente son passage 0 dclenche linterruption. Le bit H Il reflte la retenu entre le 4me et le 5me bit dun octet. Utilis en arithmtique dcimale code binaire (BCD) chaque groupe de 4 bits contient un digit dcimal, mais le groupe suivant une valeur seulement 10 fois plus grande au lieu de 16. chaque groupe peut prendre les valeurs 0 9 , les valeur 10 15 tant interdites. Utilit de larithmtique BCD : vite les conversions dcimale en binaire et vice versa. b) Lorganisation mmoire (memory map) ST7 : Architecture de type von Neuman, donc un seule espace adressable continu. Avantage : Accs nimporte quel octet par les mmes instructions Microcontrleur 8 bits , bus dadresses 16 bits et peu donc adresser 65536 octets. Pour augmenter lefficacit du code, lespace adressable est divis en 2 parties : la page zro (0 0FFh) adresse code sur 8 bits le reste de 100h 0FFFFh qui ncessite des adresses sur 16 bits. Utiliser la page zro est avantageux car les instructions qui en dcoulent sont plus courtes et plus rapides. Les entres sorties du ST7 sont en page zro !! Le jeu dinstruction
c) Le jeux dinstruction Architecture RISC, le jeu dinstruction est cependant assez riche. Il ne manque que la division. Les modes dadressage sont nombreux et disponibles sur presque toutes les instructions lmentaires. 26
Les microcontrleurs
Poids faible
1 registre de control : CR (lecture/criture) (configuration logicielle du priphrique chaque bit est un interrupteur on/off) 1 registre de Status : SR (lecture) modifi par le systme (renseigne de ltat courant du priphrique au moyen de flags ou fanions reprs par les bits du registre) 1 registre de donne : DR (lecture/criture) tat dun port dentre/sortie (lecture/criture) Rsultat de conversion A/D (lecture)
a) Le registre Miscellanaeous du ST72311 Le cur du ST7 est cadenc par une horloge interne qui provient de la division de la frquence de loscillateur. Le rapport de division est programmable, ce qui permet de slectionner le meilleur compromis entre vitesse et consommation dnergie. Ce choix est fait laide de plusieurs bits du registre miscellaneous. Ce registre contient aussi des bits servant dautres usages ; la rpartition des bits de ce registre diffre selon la variante de ST7 considre. Nous donnons ici les fonctionnalits du ST72311 :
27
Les microcontrleurs
Ei2 : Pb0-Pb3 FFF2-FFF3 EI3 : Pb4-Pb7 FFF0-FFF1 EI0 : Pa0-Pa3 FFF6-FFF7 EI1 : Pf0-Pf7 FFF4-FFF5 0 Normal 1 Lent
MISCR
PEI3
Et niveau 0 bas seul 0 seul ou
PEI2 0 1 0 1
MCO
PEI1
PEI0
PSM1
PSM2
SMS
0 Pf0=E/S 1 Pf0=fcpu
Oscilateur fcpu /2 /4 0 0 0 1 0 1
1 1
/8 1 /16 1
/2
Pf0
b) Le chien de garde du ST72311 Le chien de garde est plutt 1 dispositif de scurit quun priphrique. Il est mis en uvre pour, non pas viter un plantage, mais relancer le programme du microcontrleur (reboot) Le plantage peu provenir dune agression lectromagntique ou dun bug du programme provenant de la non prise en compte dvnement matriels extrieurs ou souvent de leurs enchanements. A lachat du microcontrleur on peut spcifier 2 options : - chien de garde activation logicielle - chien de garde activation matrielle
28
Les microcontrleurs Une fois le programme au point, on peut fixer la valeur du compteur la moitie du max et ensuite approcher par la valeur optimale par dichotomie. Si le chien de garde dclenche trop tt on double la valeur, si le reboot nest pas gnant pour lappli, on prend la moyenne etc,..de faon trouver la plus petite valeur qui permet lappli de fonctionner. Une fois cette valeur trouve, il est de bon ton de la multiplier par un coefficient de scurit (gestion des imprvus) ! 2.3.2 Les Timers Le st7 dispose de 2 circuits Timer 16 bits (Timer A et Timer B) indpendants et proposant les mmes fonctionnalits. Chacun permet par exemple : Le comptage dimpulsions La mesure de frquence La mesure dintervalles de temps LA gnration dimpulsions, isoles ou priodiques Lintrt dun tel priphrique est quil traite ces oprations sans lintervention du cur !! Horloge du temporisateur 2 sources possibles : - horloge interne - horloge externe (sur une broche spcifique dun port parallle) En cas dutilisation de lhorloge interne, on peut configurer diffrentes frquences de fonctionnement qui vont prdiviser la frquence du cpu. Pour cela on utilise un prdiviseur paramtrable au moyen des bits CC1 et CC0 du registre de configuration du timer TACR2 pour le timer A et TBCR2 pour le timer B. 2 registres de contrle : TACR1 et TACR2
TACR1
ICIE OCIE TOIE FOLVL2 FOLVL1 OLVL2 IEDG1 OLVL1
TACR2
OC1E OC2E OPM PWM CC1 CC0 IEDG2 EXEDG
fcpu
0 0 1 1
0 1 0 1
29
Les microcontrleurs
Exemple de la rsolution du temporisateur avec un Quartz de 16 Mhz pour chaque taux de prdivision : Prdiviseur Horloge de la CPU 1/2 (rapide) 1/32 (lent) Prdiviseur Horloge du temporisateur 1/2 1/4 1/8 0.25 s 0.5 s 1 s 4 s 8 s 16 s
Les Compteurs perptuels TACR ou TBCR (16 bits) TACR est compos de 2 mots de 8bits chacun nots TACHR (HIGH : 8 bits de poids fort) et TACLR (LOW :8 bits de poids faible) qui sincrmente automatiquement la frquence du temporisateur. Lecture des compteurs : Attention a lordre de lecture !!!. Comme on ne peut procder qua 2 lectures successives il ny a pas de simultanit. Toujours commencer par les poids forts TACHR. Laccs en lecture de ce registre entrane un recopie automatique de TACLR dans un verrou, et quand on accde TACLR cest en fait la valeur du verrou qui est renvoy. Remise 0 du compteur (en fait pas 0 mais FFFC = -4 ) Toute criture dans TACLR remet le compteur FFFC a) Dbordement du compteur perptuel et son interruption associe Flag de dbordement Le bit TOF du registre de status TASR indique le dbordement de FFFF 0000 soit 4 impulsions aprs linitialisation du compteur. Le bit TOF passe 1 si dbordement il y a eu. Pour remettre le bit TOF 0 il faut lire TASR et lire ou crire dans TACLR Interruption sur dbordement Pour gnrer une interruption sur dbordement il faut mettre le bit TOIE du registre de control TACR1 1. linterruption se dclenche alors quand les bits TOIE et TOF sont 1 et quand le bit I du registre code condition est 0.
30
Les microcontrleurs
b) La fonction de comparaison et son interruption associe Mcanisme qui produit un vnement quand la valeur courante du compteur est gale la valeur d1 des 2 registres de comparaison TAOC1HR TAOC1LR ou TAOC2HR TAOC2LR. On peut associer a cet vnement : - 1 demande dinterruption - 1 changement dtat sur 1 broche ddie en sortie - la remise au dpart automatique du compteur perptuel (seulemnet en mode PWM)
31
Les microcontrleurs
Si OC1E est 1 la valeur du bit OLVL1 est copie sur la broche au moment de lvnement de comparaison.. Le flag OCF1 est mis 0 par lecture de TASR puis lecture ou criture de TAOC1LR c) La capture et son interruption associe Elle permet de prendre une photo de la valeur du compteur au moment dune transition de signal dtecte une broche ddie. La transition de signal dclenchant la capture est dfinie par le bit IEDG1 : front montant (IEDG1=1) ou descendant (IEDG1=0) : Quand la transition adquate se produit sur la broche dentre input capture 1 : - la valeur du compteur est copi dans les registres TAC1HR et TAC1LR - le flag ICF1 du registre de status TASR est mis 1 Pour chaque Timer il existe 2 captures possibles (2 broches ddies, input capture 1 et input capture 2) Linterruption de la capture Si le bit ICIE (input capture interuption enble) est 1 le flag ICFi (i = 1 ou 2) dclenche linterruption ICIE est commun aux 2 flags donc il est ncssaire deffectuer dans la routine dinterruption un test des bits ICF1 et ICF2 du registre de status TASR pour connatre lorigine de la capture
32
Les microcontrleurs Remise 0 du flag de capture ICFi - lire TASR - lire ou crire dans TAICiLR d) Le mode PWM
2.3.3. Le Convertisseur analogique/numrique (CAN) Description : tensions dentres positives conversion radiomtrique (rsulat = rapport entre la tension applique et la tension de rfrence) 8 bits de rsolution linaire prcision : 1 incrment max (1LSB) ; 0.3 incrment typique temps de conversion : 32 prode de lghorloge du convertisseur = 64 priodes de lhorloge interne ( 8 s vitesse max du cpu c.a.d 16/2 Mhz )
33
Les microcontrleurs
Toute criture dans le registre de control/statuts ADCCSR (un seul registre) stop la conversion en cours. Les ports dentre/sortie AIN0 AIN7 doivent tre configures en entre (PADDR=0) et sans interruptions (PAOR=0) pour tre en haute impdance afin dviter toute interfrence. Avant de rcuprer la valeur de la tension dans le registre ADCDR il faut sassurer de la fin de la conversion, pour cela il suffit dattendre que le flag COCO passe 1. Avant dutiliser le CAN il faut attendre 30 s aprs avoir fixer ADON 1.
2.3.4. Les ports dentres/sorties parallles Ils conditionnent le nombre de pattes du microcontrleur Ils sont les plus utilises dans les montages microcontrleur car se sont des lignes dont l'tat logique, haut ou bas, est directement contrlable par programme. En sorties, les lignes sont gnralement charges de commander des relais, des triacs, des LED ou des afficheurs. Par mesure d'conomie ou mme parfois de "ralisabilit", on cherche toujours rduire le nombre de ports d'entres/sorties ncessaires.
34
Les microcontrleurs
Configur en sortie
2 montages : symtrique (totem-pole), collecteur ouvert (open drain) Comportant essentiellement deux transistors qui ne sont jamais passant en mme temps. Il existe un autre type de montage de l'tage de sortie o seul le transistor cabl la masse (transistor "du bas") est prsent. Le signal de sortie est prendre sur le collecteur de ce transistor, d'o l'appelation de collecteur ouvert pour un tel montage. Ce transistor se comporte comme un interrupteur la masse, ouvert ou passant, correspondant respectivement aux tats de sortie H ou L, dans le montage totem-pole. Pour retrouver un signal logique 5V/0V en sortie du montage collecteur ouvert, il faut rajouter une rsistance de tirage 5V.
De nombreux microcontrleurs proposent des ports qui peuvent servir d'entre et de sortie par souci d'conomie de place. On par exemple commander un afficheur LED est scruter un clavier sur un unique port. La lecture du clavier peut tre faite pendant des temps morts amnags entre deux commandes d'affichage. Laffichage Si le microcontrleur dispose de sorties fort courant (10mA), on peut connecter directement une LED avec une rsistance de limitation de courant la broche du circuit. C'est le cas de quelques ports de la famille 6805 de Motorola ou de la famille ST7 de STMicroelectronics. Si ces ports n'existent pas, il reste la solution du banal transistor intercaler entre la LED et le contrleur. Dans le cas o on utiliserait plusieurs afficheurs 7 segments LED, on doit raliser un multiplexage. Les afficheurs sont allums tour tour. Si les pas de programmation sont assez rapides, La persistance rtinienne donne alors l'impression d'un affichage continu. Les segments peuvent tre connects directement sur les sorties du microcontrleur ou si on ne dispose pas assez de lignes de sorties, on peut faire appel un dcodeur BCD / 7 segments. Lorsque pour des problmes d'autonomie, de dissipation de puissance ou de consommation se posent, on prfrera recourir un afficheur cristaux liquides. Ils sont cependant plus difficiles mettre en uvre. De nombreux fabricants intgrent dsormais une interface spcifique pour commander ces afficheurs LCD. 35
Les microcontrleurs
LED (Sortie fort courant (High sink) ) : utilisation dune rsistance de limitation
+5V
Pb0
R = 220 330 Ohms
Pb0
2N222A
36
Les microcontrleurs
Montage Relais
Les interrupteurs lecture de bouton poussoir la rsistance de tirage au 0 volt (push pull) permet dimposer un 0 logique sur lentre du circuit TTL.
la rsistance de tirage au 5 volt (pull up) permet dimposer un 1 logique sur lentre du circuit TTL.
Les claviers Lorsqu'il s'agit de n'utiliser que quelques boutons poussoirs, il suffit de les connecter aux lignes d'entres (un par ligne). Cependant, il est souvent indispensable de mettre en place un clavier ; il n'est alors plus possible de rserver une ligne par bouton. Une solution consiste faire appel a un encodeur de clavier externe qui recevra N touches en entres et fournira un code sur P bits en sortie avec N= 2^P. Ainsi, 16 touches peuvent tre codes sur 4 bits. Une autre solution, celle du clavier en matrice n'utilise pas de circuit externe. Comme le montre la figure, les touches sont places l'intersection des lignes et des colonnes du quadrillage ralis par les deux groupes de quatre fils. Il suffit alors de localiser le court-circuit entre une ligne et une colonne lorsqu'une touche est enfonce. Cette localisation se fait en deux temps (logiciel). Les lignes sont mises au niveau logique bas et les colonnes au niveau haut ; on connat la colonne se trouve la touche utilise. On inverse le rle des lignes et des colonnes pour trouver la ligne. Connaissant la ligne et la colonne, on retrouve la touche enfonce. Cette dernire solution est la plus intressante puisqu'elle ne ncessite qu'une dizaine
37
Les microcontrleurs de ligne en assembleur, elle ne ncessite pas de circuit supplmentaire et ralise une conomie de lignes d'entres/sorties. Mode de connexion d'un clavier cbl en matrice
Les mmoires externes Que ce soit pour utiliser des microcontrleurs sans ROM interne, pour ajouter de la RAM ou un circuit d'interface, il est parfois utile se faire sortir le bus interne. Cela n'est possible qu'avec les microcontrleurs possdant un mode tendu. Dans ce cas, la solution la plus employe par les fabricants est de redfinir certaines lignes d'entres/sorties parallles comme bus d'adresses et bus de donnes. Par conomie, il arrive que les lignes d'adressage et de donnes soient multiplexes. dmultiplexage adresse/donnes sur un microcontrleur Motorola
Exemple du MC68HC11A8 o le bus de donnes est multiplex avec les 8 bits de poids faible du bus d'adressage sur le port C du microcontrleur alors que les bits de poids fort du dus d'adressage sont disponibles sur le port B. La ligne AS (Address Strobe) sert ce multiplexage.
38
Les microcontrleurs
cest au moyen du fichier du type prm que au moment de ldition le compilateur fait le lien entre le vecteur dinterruption et le nom de la routine dinterruption associe lvnement et dclare dans le programme. le vecteur dinterruption contiendra alors ladresse du dbut de la routine (adresse code sur 16 bits)
39
Les microcontrleurs
Les constructeurs fournissent les extensions pour fonctionner sur microcontrleurs : Modifications pour pouvoir fonctionner sur microcontrleurs : Diffrentiation des proprits des RAM et ROM pour intgrer la notion dentre/sortie
Exemple : Le modificateur volatile permet une donne de pouvoir tre modifie par le programme, mais aussi par un vnement extrieur. Cest le cas des registres dentres, des registres dtat dun priphrique, etc.. volatile unsigned char PADR; volatile unsigned char SPISR; // port A data register // SPI Status Register 40
Les microcontrleurs
Implmentation particulire de chaque fabricant pour pouvoir mettre en uvre les spcificits des microcontrleurs.
Exemple : La directive #pragma TRAP_PROC qui permet de dclarer les routines dinterruptions. Les pointeurs near et far dans la dfinition des pointeurs pour optimiser ladressage. La premire catgorie est normalise et commune tous les compilateurs. La seconde est propre chaque compilateur. Plusieurs compilateurs existent pour le ST7. Nous choisissons le compilateur Hiware.
41
Les microcontrleurs
quand elle doivent figurer en page 0 le compilateur doit le savoir #pragma DATA_SEG SHORT MY_RAM char page0VAR ; //dfini dans le fichier LINK
le linker alloue la mmoire squentiellement dans lordre des dclaration et optimise lespace mmoire quand une variable nest pas utilise. Attention la dclaration des registres matriels : dans le fichier de LMINK on doit rajouter + chaque fichier objet Volatile signifie que la variable peut tre modifie par le matriel FILE.C #pragma DATA_SEG SHORT REG_AREA volatile char ADCDR; volatile char ADCCSR; #pragma DATA_SEG DEFAULT . FILE.PRM NAMES FILE.O+ . PLACEMENT REG_AREA in NO_INIT 0x0070 TO 0x0072
42
Les microcontrleurs 3.2.2. Les variables en page zro Codage sur un octet. Un nombre max de donnes devra tre stock en page zro, plus particulirement celle dont lusage est le plus frquent. Pour affecter une variable en page zro, deux mthodes : Cration dun segment code avec lattribut SHORT : #pragma DATA_SEG SHORT FAST_DATA int FastVariable ; Lutilisation du segment prdfini _ZEROPAGE. Ce segment est dfini par le compilateur qui y stocke ses variables temporaires. On peut y ajouter ses propres variables. #pragma DATA_SEG _ZEROPAGE int FastVariable ; Les segments sont dfinis dans un fichier de paramtrage utilis par le link et dextension prm. On peut revenir tout moment au segment par dfaut des variables par : #pragma DATA_SEG DEFAULT 3.2.3. Les constantes En C la notion de constante nexiste pas. On peut appliquer le modificateur const devant une variable Const int SIZE = 100 ; Ce modificateur gnre un message derreur lors dune tentative dcriture sur cette constante. SIZE = 200 ; // un message derreur est gnr Inconvnient de cette mthode : consomme de la mmoire en RAM. Le compilateur propose loption Cc qui permet de stocker des constantes dans un segment particulier en ROM nomm ROM_VAR, sans rserver lespace quivalent en RAM. Exemple : const char HEXADECIMAL[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} ; lattribut const associ loption de compilation Cc permet de ne pas encombrer la RAM avec ses 16 valeurs. mot cl : const const char table[]={} ; const char *table[]={} ;
43
Les microcontrleurs
quand une constante doit tre stocke dans une zone spcifique de la ROM, on doit utiliser la pragma CONST_SEG #pragma CONST_SEG MY_ROM //placement dclar dans le fichier de LINK const char table[]={} ; 3.2.4. Stockage en mmoire EEPROM Permet de conserver certains paramtres lorsque le composant est mis hors tension. Les donnes sont accessibles en lecture/criture Afin que ces donnes soient stockes aux addresses de LEEPROM, un segment particulmier est cr par lintermdiaire dune pragma : #pragma DATA_SEG MyEEPROM 3.2.5. Allocation de bouts de code #pragma CODE_SEG MY_ROM void FctName1(void){..} #pragma CODE_SEG DEFAULT void FctName2(void){..} 3.2.6. Accs la mmoire via des pointeurs en mode LARGE (-Mi ou Mx option) pour accder une donne en page 0 via un pointeur utiliser prfrentiellement le mot cl near char * near FunctionName (char * near ptr) {return ( (char * near) ptr + 1 ;} en mode SMALL (-Ms option) pour accder une donne en dehors de la page 0 via un pointeur utiliser prfrentiellement le mot cl far
44
Les microcontrleurs
tous les registres dun modle de la famille ST7 seront regroups dans un fichier source : ici map72311.c Le segment DATA_SEG SHORT SPI est dfini entre les adresses 21h et 23h au moment du link par le fichier de paramtrage utilis : *.prm (Linker Parameter File) // MEMORY LOCATION SETTING SECTIONS // some declarations ASPI = READ_WRITE 0x21 TO 0x23 ; // more declarations PLACEMENT // some declarations SPI INTO ASPI; // more declarations
45
Les microcontrleurs ATTENTION : ldition de lien optimise le code en liminant, dans chacun des segments les registres non utiliss par le programme et remplit les addresses laisses vides en dcalant les adresses des registres suivants. Pour linterdire doptimisation on rajoute le signe + dans la partie NAMES du fichier de paramtrage.7 NAMES prog1.o map72311.o+ start07.o ansi.lib END 3.3.2. Lecture, criture et test dun bit dans un registre Test dun bit dans un registre prenons par exemple le bit 7 du registre TASR. Ce bit t dfini dans st72251.h par la ligne : #define ICF1 0x07 //Input Capture Flag 1 bit pour tester ce bit on utilise : if ( TASR & ( 1 << ICF1 ) ) // test si le bit ICF1 (bit 7) est 1 (1 << ICF1) = (1 dcal gauche 7 fois gauche) (10000000)=0x80 le & avec TASR permet de masquer tous les autres bit de TASR Mise 1 ou 0 dun bit dans un registre #define BIT4 0x04 SPIDR | = (1 << BIT4) ; //mise 1 du bit 4 de SPIDR
(1 << BIT4) = (1 dcal gauche 4 fois gauche) (00010000)=0x10 ralise un OU logique entre SPIDR et 0x10 rappel : 1 | 0 = 1, 0 | 0 =0, 1 | 1 =1 SPIDR & = ~(1 << BIT4) ; //mise 0 du bit 4 de SPIDR ralise un ET logique entre SPIDR et le complment de 0x10 cad (11101111) rappel : 1 & 0 = 0, 0 & 0 =0, 1 & 1 =1
46
Les microcontrleurs 3.3.3. Configuration des registres lors dinitialisation de priphriques objectif : syntaxe la plus explicite en cas de relecture ou de modification du programme dans le code source linitialisation des priphriques TACR1 = ( 1 << ICIE ) | // interruption sur capture valid ( 0 << OCIE ) | // interruption sur comparaison ( 0 << TOIE ) | // interruption sur dbordement ( 0 << OLVL2 ) | // Dmarrage cycle avec sortie niveau bas ( 0 << IEDG1 ) | // Sens de la transition active ( 0 << OLVL1 ) | // Fin cycle avec sortie niveau haut dans map72311.h // Timers A&B Control Register 1 bit definition #define ICIE #define OCIE #define TOIE #define OLVL2 #define IEDG1 #define OLVL1 0x07 0x06 0x05 0x02 0x01 0x00 // Input capture interrupt enable // Output compare interrupt enable // Timer overflow interrupt enable // Output level 2 // Input edge 1 // Ouput level 1
3.3.4. Utilisation de macros pour les oprations sur les bit Exercice SetBit, ClrBit ChgBit AffBit MskBit set/clear a selected bit in a byte variable. invert the selected bit value (0->1 or 1->0). set with a chosen value a selected bit in a byte variable. select some bits in a byte variable and copy them in another byte variable. The "MskBit" command allows to select some bits in a source variables and copy it in a destination var (return the value). return the logic value of a selected bit in a byte variable.
ValBit
BitSet, BitClr set/clear a defined bit in the hardware register map return the logic value of a defined bit. BitVal Comments : - VAR : Name of the character variable where the bit is located. - Place : Bit position in the variable (7 6 5 4 3 2 1 0) - Value : Can be 0 (reset bit) or not 0 (set bit) The "ValBit" command returns the value of a bit in a char variable: the bit is reseted if it returns 0 else the bit is set. Manipuler les bits partir des variables This method generates not an optimised code yet. #define SetBit(VAR,Place) #define ClrBit(VAR,Place) ( VAR |= (1<<Place) ) ( VAR &= ((1<<Place)^255) ) 47
Les microcontrleurs #define ChgBit(VAR,Place) ( VAR ^= (1<<Place) ) #define AffBit(VAR,Place,Value) ((Value) ? \ (VAR |= (1<<Place)) : \ (VAR &= ((1<<Place)^255))) #define MskBit(Dest,Msk,Src) ( Dest = (Msk & Src) | ((~Msk) & Dest) ) #define ValBit(VAR,Place) (VAR & (1<<Place)) Manipuler les bits partir des adresses This method generates the most optimized code. #define AREA 0x00 // The area of bits begins at address 0x10 #define BitClr(BIT) ( *((unsigned char *) (AREA+BIT/8)) &= (~(1<<(7-BIT%8))) ) #define BitSet(BIT) ( *((unsigned char *) (AREA+BIT/8)) |= (1<<(7-BIT%8)) ) #define BitVal(BIT) ( *((unsigned char *) (AREA+BIT/8)) & (1<<(7-BIT%8)) )
48
Les microcontrleurs
49
Les microcontrleurs
si A et X sont utiliss les 2 dernires valeurs sont stockes dans lOVERLAP cela permet en fait certaine optimisation : char AddChar (char p1, char p2) { return(p1+p2) ; } seul p1 est stock dans lOVERLAP en assembleur on a : LD p1,X ADD A,p1 RET
50
Les microcontrleurs Astuces et criture optimise du C Quand la cible de la programmation est un microcontrleur, il faut en permanence garder lesprit que lespace mmoire est limit et que la rapidit dexcution du programme nest pas infinie. On va viter la programmation approximative pas trop gnante pour un pc. Qques rgles pour fournir un code conomique : Cration dune fonction lorsquun groupe dinstructions est rpt plusieurs fois exemple for ( p1 = string1, p2 = string2 ; ( *p2 = *p1) ; p1++ ,p2++) ; une seule ligne dcriture pour une tache puissante. cette ligne de code copie une chane de caractre dans une autre, en recopiant chaque octet dun emplacement mmoire vers un autre. Si lon doit rpter cette ligne plusieurs fois dans le programme il est avantageux den faire une fonction Remplacement des multiplications ou divisions par des dcalages Les multiplications ou les divisions sont des gros consommateurs de temps machine. Quand le multiplicateur ou le diviseur a pour valeur une puissance de 2 , il faux raliser un decalage. Exemple : A = B / 16 ; Sera remplac par : A = B >> 4 ; Dans ce cas le compilateur cr un code optimis de manipulation des bits. Limitation de la taille des variables leur minimum (unsigned) char signed char unisgned int (short) signed int (short) unsigned long signed long float, double 8 bits 16 bits 32 bits IEEE32 0 -128 0 -32768 0 -2147483648 1.17E-38F 255 127 65535 32767 4294967295 2147483647 3.40E+38F
Pas de long int quand les int suffisent Surtout pas de float ! (les calculs en float ncessitent des routines occupant un important espace mmoire) (de plus certaines difficults dans les tests dgalit.) Attention lutilisation de long ou de float dans les routines dinterruptions ! Une architecture 8 bit est par construction plus efficace pour une manipulation de donnes de type char.
51
Les microcontrleurs
Limiter les calculs mathmatiques (trigo, log, ..) Prvoir des tables de valeurs pr calcules, par exemple stockes en EEPROM Attention aux oprations inutiles ! Par exemple : (Ai/b) = (Ai)/b possibilit de rutilisation des variables du code.. stratgie daffectation des noms MOD_FILE.c #define MOD_MACRO char Mod_cVar ; int MOD_iFct(void) {} Macro ou fonction gnrique prfrer les fns gnriques aux macros. Sauf si macro trs courtes et optimises Note : tous les bloques dinstructions rpts doivent tre remplacs par une fonction si possible. Variables Statiques Doivent tre dclares en variable statiques : les variables globales utilises dans le module ou elles sont dclares les fonctions utilses uniquement dans le module o elles sont dclares une variable permanente locale dans une fonction static char module_var ; static void module_fct (void) {} void exported_fct (void) { char tmp_local_var ; static char perm_locxal_var ; } (MAJUSCULE)
52
Les microcontrleurs variables volatilles le qualificateur volatile doit tre ajout devant chaque dclaration de registre hardware pouvant tre modifi par le matriel. Cela permet au compilateur de dsactiver loptimisation de la mmoire. LAssembleur en ligne : HLI pour certaines instruction trs spcifique au ST7, le langage C peut ne pas tre appropri. Pour cela le compilateur permet dinsrer des lignes de code HLI (high level inline assembleur) par exemple pour grer de timings spcifiques. asm LD A,X ; asm { LD A,X ; LD Y,A ; } 1 seule instruction
instructions en block
tous les type de donnes du programme en C sont accessible dans avec lassembleur en ligne. #define CST 10 struct {char field1 ; caher field2 ;} str ; char var, array[10] ; .. asm { LD A, 0x0xA100 CP A, #CST LD A, str.field2 LD A, array[4] LD A,#var acces aux variables LD A,#LOW(VAR) par addresse LD A,#HIGH(VAR) CALL fct } Note : le caractre # est utilisation pour concatner des chanes de caractres, et comme les instructions du ST7 utilise # poyr les valeures immdiates, le compilateur HIWARE C permet dutilser la pragma NO_STRING_CONSTR qui dsactive les ordre au preprocesseur. Exemple : #pragma NO_STRING_CONSTR #define LDA10LDA,#10 asm LDA10; acces direct la mmoire LD A, 0xA100 CP A, #0x0A LD A,str :0x1 LD A,array :0x07 LD A,#var LD A,#LOW(VAR) LD A,#HIGH(VAR) CALL fct
53
Les microcontrleurs
Vcc (+5v)
le circuit de reset
(sensible un niveau bas)
+V
c 1
horlog e
Quart z
R
c 2
Alimentation et horloge Le microcontrleur doit tre choisi en fonction de la faon dont est alimente l'application (secteur ou pile) et de la tension d'alimentation des autres lments du circuit. Dans la plupart des cas, les microcontrleur utilisant la technologie CMOS et HCMOS sont les plus adapts. Sur tous les microcontrleurs actuels, le gnrateur d'horloge est intgr. Il ne reste plus qu' placer un composant externe pour en fixer la frquence d'utilisation. Il faut donc se reporter la documentation technique du constructeur pour connatre la plage d'utilisation du circuit. Pour certains circuits, la consommation est fortement lie la frquence d'utilisation. Ainsi, pour des raisons d'autonomie, Il est plus judicieux de rduire la frquence d'horloge des applications qui n'ont pas besoin d'une frquence leve. Selon les fabricants et les familles, l'horloge interne est configure partir d'un quartz, d'un rsonateur cramique ou d'un gnrateur de signaux carrs. Le quartz offre une base de temps trs stable. Il est utilis lorsqu'on a besoin d'une rfrence de temps trs prcise. Le rsonateur cramique est moins prcis que le quartz mais cote moins cher. Il permet cependant de rythmer prcisment des oprations sur de courtes priodes. Le gnrateur de signaux carrs externe est utilis assez rarement. On le rencontre lorsqu'on a besoin de faire fonctionner plusieurs microcontrleurs.
54
Les microcontrleurs
Il est mme possible de piloter l'oscillateur d'horloge avec une rsistance. C'est le cas de certains circuits de la famille 6805 de Motorola ou PIC de Microchip. La stabilit de la frquence n'est alors que de +/- 20 %, mais est suffisante pour un grand nombre d'applications et permet de faire des conomies de composants et de place. fig.2 : Les diffrentes configurations d'horloge
55
Les microcontrleurs
Les microcontrleurs
Dans certains cas, un simulateur suffit tester la plupart des fonctionnalits d'un programme. L'mulateur est en fait un programme sur une machine qui reproduit le fonctionnement de l'unit centrale. Les entrs/sorties y sont reprsentes par des octets qu'on prsente ou qu'on lit. On ne pourra pas non plus tester l'application en temps rel. Un simulateur n'apporte donc pas toutes les possibilits qu'un mulateur, mais limine un grand nombre d'erreurs et suffit pour des applications sans entres/sorties particulires et sans notion de temps. Une fois la mise au point du programme acheve, on peut faire les derniers tests selon deux cas. Si on dsire utiliser des versions OTP, on programmera des EEPROM ou UVPROM quivalentes. Cela permet doprer d'ultimes modifications. Si par contre, on dsire utiliser des versions programmes par masque, il faudra envoyer le programme au fabricant qui produira en retour une pr-srie et attendra l'accord pour commencer la production en srie.
57
Les microcontrleurs Le dveloppement d'une application Au niveau industriel, la conception d'une application se droule en plusieurs tapes. Aprs avoir choisi la solution matrielle au problme, on peut commencer penser un organigramme pour le programme. Puis, viennent le choix du langage et la programmation en elle-mme. Par mulation ou simulation, on test ensuite le programme et l'application. On y apporte les correctifs ncessaires au bon fonctionnement avant d'envoyer le programme au fabricant. Dans le cas o on ne disposerait que de moyens rduits ou que la quantit de pice est juge insuffisante pour justifier des crdits importants, on peut toujours choisir des microcontrleurs qui possdent une version EEPROM ou UVPROM. On fera alors des tests directement sur l'application. A l'aide des quelques lignes d'entres/sorties, de LEDS, on peut ajouter temporairement des instructions inutiles l'application mais qui servent suivre l'volution du programme et en vrifier le bon fonctionnement. Les constructeurs commercialisent parfois des kits de dveloppement des prix intressants pour faire connatre leurs produits. Ces kits comprennent un assembleur, un simulateur, une carte de programmation et de la documentation sur le microcontrleur.
Choix matriels
Ecriture du programme
Test du programme
Test de l'application
Organigramme de dveloppement
58
Les microcontrleurs
lditeur de lien permet une gestion complte de lorganisation de la mmoire du microcontrleur cible. Cette gestion est contenue dans un fichier dextension prm. Ce fichier doit contenir les informations suivantes : Le nom du fichier absolu dextension abs rsultant de ldition de lien LINK prog1.abs La liste des fichiers objets devant tre lis NAMES prog1.o map72311.o+ start07.o // Tout programme en C Hiware doit tre li au fichier start07.o ansi.lib END La liste des sections selon lesquelles la mmoire est organise : Une section est un bloc dadresses continues caractris par un nom et par ses proprits : READ_ONLY, READ_WRITE, PAGED, NO_INIT. (No_INIT : permet de ne pas effacer le contenu des variables dune section, lors du dmarrage ou redmarrage du programme) utilit : Chacune de ces sections contient des parties de code objet (donnes ou programme) Les sections sont organises en segments SECTIONS APORTS ASPI = = NO_INIT READ_WRITE 0x00 TO 0x17; 0x21 TO 0x23; 59
Les microcontrleurs ATIMERA END La liste des segments (Placement) Un segment est une suite continue doctets reprsentant un bloc dinstruction ou de donnes. Ce bloc est positionn dans la mmoire en lattribuant une section. PLACEMENT PORTS TIMERA SPI END INTO APORTS; INTO ATIMERA; INTO ASPI; = READ_WRITE 0x31 TO 0x3F;
Exemple le segment SPI contient 3 octets (unsigned char) : SPIDR (SPI Data Register) SPICR (SPI Control Register) SPISR (SPI Status Register) (si un segment est de taille suprieure la section qui lui est attribue, ldition de lien chouerait et le fichier .abs ne serait pas gnr) La taille de la pile STACKSIZE = 0x40 ; La liste des vecteurs dinterruption et de dmarrage. Les vecteurs sont caractriss par un nom de fonction auquel le programme dinterruption doit se brancher. Pour chaque type dinterruption la localisation mmoire est reporte. VECTOR ADDRESS 0xFFEA TimerAInterupt VECTOR ADDRESS 0xFFEC spi_rt VECTOR ADDRESS 0xFFFE _Startup ! lditeur de lien produit, en plus du fichier .abs, un fichier .map qui rsume les adresses des segments, des variables, ainsi que des informations utiles pour le dbogage.
60
Les microcontrleurs
#define DisableInterrupts {asm SIM;} #define EnableInterrupts {asm RIM;} #pragma DATA_SEG _ZEROPAGE unsigned long val1,val2,val3,i; void init(void); void init_timer(void); // routine d'initialisation des varibles et I/O // routine d'initialisation de l'horloge
void main(void) { DisableInterrupts; MISCR1=(0<<SMS)| (1<<CP0)| (1<<CP1)| (0<<IS20)| (0<<IS21)| (0<<MC0)| (0<<IS10)| (1<<IS11); init(); init_timer(); EnableInterrupts; while(1) { } } void init(void) { //entree
// mode normal fCpu=fosc/2=8Mhz // inoperant pour SMS=0 // inoperant pour SMS=0 // pas de clock ext // pour que l'interruption ei3 sur le port B soit // en front descendant
61
Les microcontrleurs
ClrBit(PBDDR,3); SetBit(PBOR,3); //sortie SetBit(PBDDR,2); SetBit(PBOR,2); } void init_timer(void) { TACR1=(0<<ICIE)| (1<<OCIE)| (0<<TOIE)| (0<<FOLV2)| (0<<FOLV1)| (0<<OLVL2)| (0<<IEDG1)| (0<<OLVL1); //config LED //pb3 (interrupteur) en entre interruption
//output compare
TACR2=(0<<OC1E)| (0<<OC2E)| (0<<OPM)| (0<<PWM)| (1<<CC1)| //ftimer=fcpu/8 (0<<CC0)| //ftimer=1Mhz (0<<IEDG2)| (0<<EXEDG); TAOC1HR=0xF4; TAOC1HR=0x0F; } #pragma TRAP_PROC SAVE_REGS void eit3_rt(void) { TAOC1HR=0x1E; //registres haut pour base de temps ? TAOC1LR=0x84; //registres bas pour base de temps ? } #pragma TRAP_PROC SAVE_REGS void tima_rt(void) { if (ValBit(TASR,TOF)) { ChgBit(PBDR,2); asm { ld a,TASR ld a,TAOC1LR } //mise 0 du timer perptuel TACR TACLR=0; } } //registres haut pour base de temps ? //registres bas pour base de temps ?
62
63
Les microcontrleurs
64