You are on page 1of 64

Les microcontrleurs

Dpt ME - Otion SIIC 2me anne 2005-2006 ver 4.0

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.3. Les Priphriques du ST7 ................................................................................................. 27


2.3.1. Programmation et configuration des priphriques ......................................................................... 27 2.3.2 Les Timers ........................................................................................................................................ 29 2.3.3. Le Convertisseur analogique/numrique (CAN) ............................................................................. 33 2.3.4. Les ports dentres/sorties parallles ............................................................................................... 34

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

3.3. Les registres des Priphriques ......................................................................................... 45


3.3.1. Dclaration des registres .................................................................................................................. 45 3.3.2. Lecture, criture et test dun bit dans un registre ............................................................................. 46 3.3.3. Configuration des registres lors dinitialisation de priphriques.................................................... 47 3.3.4. Utilisation de macros pour les oprations sur les bit........................................................................ 47

3.4. Programmation des Interruptions ...................................................................................... 49

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.

Les microcontrleurs En conclusion :

un peu de calcul beaucoup dentres


capteurs multiples logique (0,5v) tension

des sorties varies


afficheur LCD, LED relais

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

Unit arithmtique et logique UAL

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

1.2. Excution de programme


a) Rgles dun systme programmable Le systme doit respecter les 4 rgles suivantes : 1) Les instructions et les donnes sont dans une mmoire unique, banalise, accessible en lecture/criture 2) Les contenus de la mmoire sont accessibles par leurs adresses 3) La commande de lensemble, lexcution des oprations se fait de manire squentielle (sauf indication expresse). Lexcution dune opration doit tre termine avant le lancement de la suivante. 4) Lunit de traitement contient un jeu complet des oprations de lalgbre de Boole (au minimum). Le programme est une suite de nombres qui code les instructions du langage de programmation. Les donnes sont dune part ce qui est trait sous le contrle des instructions et dautre part les rsultats du calcul. Excution dune commande (1 plusieurs cycles horloge) : Fetch = aller chercher le code de la prochaine instruction Decode = analyse du code pour savoir quelle opration excuter Execute = excuter linstruction => UAL Write back = criture du rsultat en mmoire (ou registre) Exemple : Lunit centrale lit linstruction LD A,100 en mmoire centrale. Elle dcode linstruction : il faut charger le registre A avec la valeur contenue dans la case mmoire n100 Lunit centrale lance lexcution : demande de lecture de la mmoire ladresse 100. Elle rcupre la valeur lue et enfin la range dans A. Elle met jour le compteur PC, et lon continu : lecture de linstruction suivante.

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)

Fetch Decode Execute Write


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

1.3. Les Interruptions


a) Principes Afin dagir en rponse un vnement extrieur sans ncessiter de scrutation continue, les processeur possdent un mcanisme dinterruption. Celui-ci offre la possibilit de modifier le droulement du programme lors de loccurrence de lvnement extrieur. Ladjonction au processeur dune ligne dinterruption permet, lorsque cette ligne devient active, dengendrer une requte dinterruption. Le processeur appelle alors automatiquement une procdure appele routine dinterruption qui se trouve une position prdfinie indique via le vecteur dIT.. On distingue deux type dinerruptions : les interruptions provenant de priphriques ouvert sur le monde exterieur (reset, bouton poussoir, clavier, changement dtat dun signal exterieur, communication serie, les interruptions provenant de priphriques internes (timer,passage par zero dun compteur interne,..)

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)

Interruptions externes ROM UVPROM OTPROM

Entre des compteurs

Contrleur dinterruptions

Timer 1 RAM EEPROM BUS Timer 0 Interface spcifique Ports srie

CPU Contrleur de bus

Horloge

Ports dentres/sorties

Quartz externe ou interne

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

2.2. Etude du microcontrleur 8 bits ST7


a) Les registres internes

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

2.3. Les Priphriques du ST7


2.3.1. Programmation et configuration des priphriques Les registres des priphriques matriels

8 bits Poids fort


b b b b b b b b

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

Fcpu vers lUC

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

/4 /2 ftimer=fcpu/prediv /8 External Horloge du temporisateur

29

Les microcontrleurs

1 registre de status : TASR


TASR
ICF1 OCF1 TOF ICF2 OCF2 0 0 0

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

LED (Sortie normal) : utilisation dun transistor 2N222A


+5V

RLIM 4.7 kOhms

Pb0
2N222A

Afficheurs 7 segments multiplexs

Commande de puissance Transistor MJ 3001

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

2.4. Les interruptions


Remarque : un seul vecteur dinterruption pour plusieurs vnements possibles Cas du timer : au niveau logiciel pour connatre lorigine prcise de lvnement il faudra tester les diffrents fanions ou flag.

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

III. Utilisation du langage C


Pourquoi utiliser le langage C ? Lintrt principal : Ncessit de dvper en langage volu ; lassembleur proche du langage machine est trop peu lisible est mal adapts une architecture complexe de programme. Il existe de nombreux langage de haut niveau : Certain dvps pour des microcontrleurs, dautres largement rpandus dans les ordinateurs ont ts adapts aux besoins des microcontrleurs. Cest le cas du C. Avantages : le C reste proche du matriel (mise 1 ou 0 dun bit dun port dentre sortie) le C est structur (prog. Facilement divisible en bloc = fonctions,..) 1 seule ligne de C peut produire plusieurs centaines dinstructions assembleur = simplification du code source, et fiabilit. Souplesse de travail de part la portabilit globale dun programme en C (hors gestion ente/sortie) Portabilit entre diffrents types de microcontrleurs de la mme famille Inconvnients : Le C destin lorigine pour de gros ordinateurs mmoire centrale. Une mme mmoire pour le programme, les donnes. Dans un microcontrleur le programme dans une mmoire lecture seule, les donnes dans une mmoire en lecture criture mais volatile (modifiable par vnement extrieur autre que programme). Le C na pas doutils standard pour grer ces diffrences. Les interruptions doivent et peuvent tre crites en C. les interruptions ne sont pas des concepts du langage C.

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.

3.1. Organisation mmoire du ST7 et options de compilation


Le programme est crit en ROM, les variables sont crites en RAM. Le programmeur doit spcifier dans un fichier de paramtrage, les adresses des zones mmoires afin que lditeur de liens sache placer chacun des segments composant le code. Il doit contenir la memory map. Lespace mmoire disponible est propre chaque modle de microcontrleur. Pour optimiser les accs mmoire, le compilateur Hiware propose 4 modles dorganisation de la mmoire. Adressage direct : les variables sont stockes en page zero (Short Addressing) 0080h 00FFh cest un adressage court sur un octet (avantage longueur du code gnr et rapidit dexcution) Adressage tendu : Les variables sont situes des adresses 0100h Modle Small Variables locales Variables globales Adressage direct Adressage direct Rsultat
Seules les donnes constantes ont un adressage tendu ou peuvent tre adrsses par des pointeur far A nutiliser que pour de petites applications

Small extended Large Large extended

Adressage tendu Adressage direct (>100h) Adressage direct Adressage tendu


Mode par defaut, bien adapt au ST7 Permet lutilisation dun grand nombre de variables, locales ou globales. Peu adapt aux memory map des ST7

Adressage tendu Adressage tendu

41

Les microcontrleurs

3.2. Allocation des variables


3.2.1. La zone DEFAULT_RAM par dfaut les variables sont stockes dans la zone DEFAULT_RAM. Certaine variables doivent cependant avoir des addresses fixes, commes les registres des priphriques ou autre variables forces en page 0) //ANSI C #define VAR (*(char *) (0x0010)) //ST7 #pragma DATA_SEG MY_RAM char VAR ; //LAddresse de VAR est fixe 0x0010 //dfini dans le fichier LINK (*.prm)

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

3.3. Les registres des Priphriques


Les registres des priphriques sont des variables localises dans la mmoire de donnes en page zro. A linverse des variables utilisateur ces registres sont situs des adresses fixes prdfinies par construction dans le contrleur. 3.3.1. Dclaration des registres Considrons le registre PADR est ladresse absolue 008 de la mmoire Premire mthode : Cette mthode cre un pointeur absolu sur le registre au moyen dune macro #define PADR * ((unsigned char *)(8)) PADR = 0x10 ; // crire 10h (00010000) sur le port A PADR &= ~0x10 ; // mise zro du bit 4 du port A Seconde mthode : Elle consiste attribuer un segment pour chaque priphrique lintrieur duquel les registres sont dfinis comme une suite de variables du type unsigned char. Cette suite est ordonne selon la position physique des registres dans la memory map de la RAM du composant. Exemple du priphrique SPI : // Serial Peripheral Interface #pragma DATA_SEG SHORT SPI extern volatile unsigned char SPIDR; extern volatile unsigned char SPICR; extern volatile unsigned char SPISR;

// SPI Data Register // SPI Control Register // SPI Status Register

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

3.4. Programmation des Interruptions


des pragma spcifiques pour la gestion des interruptions du ST7 ont t rajoutes. les routines dinterruptions La pragma TRAP_PROC devant la dfinition dune fonction produit linstruction IRET la place de RET la fin de la fonction #pragma TRAP_PROC void InterruptFct (void) {} Note : pour scuriser les vecteurs dinterruption inutiliss il vaut mieux les diriger vers un bout de code vide (dummy_rt) maintenant on doit associer la fonction dinterruption au vecteur dinterruption associ linterruption matriel : dans le fichier dextension .prm VECTOR ADDRESS 0xFFE0 dummy_rt VECTOR ADDRESS 0xFFE2 InterruptFct .. sauvegarde du contexte par dfaut le compilateur utilise 3 variables de stockage pour des oprations tendues. Ces variables sont _SEX (stockage indirect), _LEX (pour chargement indirect) et RZ (pour stockage temporaire) et sont stockes en page 0. Ces variables peuvent tre utilises nimporte quel moment et ne sont pas contrles par le programmeur, dans un premier temps on doit avant lutilisation dune routine sauvegarder le contexte de ces registres logiciel. On utilise la pragma SAVE_REGS #pragma TRAP_PROC SAVE_REGS void InterruptFct (void) {} dans un second temps aprs avoir vrifi si le code gnr de la routine dinterruption utilise ces variables, on peut supprimer ou non la pragma SAVE_REGS Note : lutilisation du SAVE_REGS rajoute 34 bytes au code et augmente le temps de latence de la routine dinterruption de 34cycles et la dure totale de la routine dinterruption de 79 cycles (10microsec avec fcpu=8MHz)

49

Les microcontrleurs

3.5. Langage C optimis pour microcontrleurs


Initialement crer pour les systmes UNIX, maintenant largement utilis dans les systmes embarqus. Le choix dutiliser le C dans les applis micro : Langage structur bas sur les types de donnes et des structure de contrle volue. Ca portabilit sur diffrents cibles micro Lobjet de ce chaptre est de montrer comment ecire un C optimis en taille de code et de donne. Nous verrons des instructions spcifiques rajoutes en se sens comme des instructions de compilation ou des pragma. stratgie des variables locales et paramtres normalement les variables locales et les paramtres sont stocks dans la pile. Pour gnrer un code plus optimis, le compilateur Hiware utilise une zone ram ddie appele OVERLAP (chevauchement) les instructions ST7 ne permettent pas un accs simple aux donnes de la pile (LD A,[SP,#n]). La solution requiert deux instructions assembleur (LD X,S puis LD A,[#0x10100+n,X] avec 0x0100 bas de la pile et n loffset de position de la donne) passage de paramtres et fonction char FunctionName registre A (char prmN, , OVERLAP char prm1, registre X char prm0) register A

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

Objectif : lisibilit, portabilit et robustesse (ncessaire en programmation Microcontrleur)

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

IV. La Mise en uvre


4.1. Mise en uvre matrielle
lalimentation
Rgulateur type 7805

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

4.2. Mise en uvre logicielle


Aprs avoir choisi le microcontrleur, il faut s'attaquer la phase de programmation. Nous allons maintenant tudier le systme de dveloppement. Assembleur et compilateur Un systme de dveloppement comporte en premier lieu un assembleur et un ou plusieurs compilateurs adapts au langage volu que l'on souhaite utiliser pour programmer. L'assembleur traduit les instructions crites en utilisant les mnmoniques du langage machine en code binaire excutable par le microcontrleur. L'enchanement des mnmoniques s'appelle le listing ou code source du programme alors que le code binaire s'appelle l'objet ou l'excutable. Le compilateur, quant lui, traduit les instructions crites en langage volu en code binaire excutable. L'ensemble de ces instructions constitue aussi un listing ou code source et le code binaire est appel code objet. Les systmes de dveloppement pour microcontrleur s'apparentent ainsi ceux qui existent sur les ordinateurs. Assembleur et compilateur doivent cohabiter sans heurt. Cela est d'autant plus vrai pour les microcontrleurs que les entres/sorties performantes et rapides se conoivent en assembleur. Un compilateur bien interface avec le langage machine permet de pouvoir crire des sous programmes directement en langage machine au sein du programme en langage volu. Une question vient l'esprit : pourquoi un langage pour en retranscrire un autre ? En fait, l'assembleur est pnible utiliser lorsqu'il s'agit de faire des calculs complexes car il est constitu d'instructions lmentaires. On prfre alors utiliser un langage volu. Par contre, l'assembleur, qui ne gnre pas de lignes supplmentaires dans le code, convient parfaitement lorsqu'il s'agit de manipuler les donnes des registres ou de commander les entres/sorties. On fait appel des machines dites "htes" pour faire fonctionner assembleur et compilateur. Ces machines htes, qui peuvent tre de simples PC, assemblent ou compilent le programme de l'application pour le transcrire en binaire excutable. Il faut toutefois garder en mmoire qu'un microcontrleur n'apportera jamais la puissance de calcul d'un super calculateur. Du fait que les mmoires des microcontrleurs sont de petite taille (de 2 32 Ko), le langage volu ne doit pas gnrer un grand nombre de ligne de code machine par ligne de langage. Emulateur et simulateur Avant de mette en uvre le programme, il est plus prudent de le tester. C'est le rle des mulateurs et simulateurs. L'mulateur est un montage clat du microcontrleur qu'il remplace. Toutes les fonctions y sont spares et reproduisent son comportement. Il est branch directement sur la maquette de l'application. Cette version clate permet d'avoir directement accs aux divers signaux internes. La mise au point du programme est d'autant plus facilite que l'mulateur fonctionne aussi vite que le microcontrleur qu'il remplace. Linconvnient de l'mulateur est son cot relativement lev. 56

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 Organigramme gnral

Choix du langage de programmation

Ecriture du programme

Test du programme

Test de l'application

Envoi du programme au fabricant

Test des chantillons de pr-srie

Accord au fabricant pour la srie

Organigramme de dveloppement

58

Les microcontrleurs

4.3. La chane de dveloppement ST7


Lditeur de lien HIWARE

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

4.4. Exemple de projet


main.c : Programme principal en langage C et assembleur en ligne (HLI) enviro.prm : fichier de link qui sert dfinir les zone mmoires des priphriques et des variables du programme en fonction du maping mmoire du microcontrleur. Dfinition galement des vecteurs dinterruption et des nom des routines dinterruption que lon retrouve dans le programme principal. defaut.env : fichier denvironnement qui contient les options de compilations ainsi que les diffrents path du projet. (Chemin du compilateur et du linker) enviro.mak : fichier make 4.4.1. Programme principal main.c
#include <hidef.h> #include "map72334.h" #include "lib_bits.h" // ST72334 memory and registers mapping // Predifined libraries working at bit level

#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

Les microcontrleurs 4.4.2. fichier de link enviro.prm


LINK led_i.abs NAMES main.o map72334.o+ start07.o ansi.lib END STACKTOP 0x1FF SECTIONS ZRAM = READ_WRITE 0x0080 TO 0x00FF; RAM = READ_WRITE 0x01FF TO 0x0200; /* pour le J4 */ ROM = READ_ONLY 0xE000 TO 0xFFFF; PLACEMENT PORT INTO NO_INIT 0X0000 TO 0X0016; MISC1 INTO NO_INIT 0X0020 TO 0X0020; MISC2 INTO NO_INIT 0X0040 TO 0X0040; SPI INTO NO_INIT 0X0021 TO 0X0023; INTO NO_INIT 0X0024 TO 0X0027; ITC INTO NO_INIT 0X0029 TO 0X0029; MCC WDG INTO NO_INIT 0X002A TO 0X002B; INTO NO_INIT 0X002C TO 0X002C; EEPROM INTO NO_INIT 0X0031 TO 0X003F; Timer_A INTO NO_INIT 0X0041 TO 0X004F; Timer_B SCI INTO NO_INIT 0X0050 TO 0X0057; ADC INTO NO_INIT 0X0070 TO 0X0071; DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM; INTO RAM; DEFAULT_RAM _ZEROPAGE, _OVERLAP INTO ZRAM; END VECTOR ADDRESS 0XFFEA tima_rt VECTOR ADDRESS 0XFFF0 eit3_rt /* VECTOR ADDRESS 0XFFF2 eit2_rt VECTOR ADDRESS 0XFFF6 eit0_rt VECTOR ADDRESS 0XFFF0 eit3_rt VECTOR ADDRESS 0XFFE0 dummy_rt VECTOR ADDRESS 0XFFE2 dummy_rt VECTOR ADDRESS 0XFFE4 eeprom_rt VECTOR ADDRESS 0XFFE6 sci_rt VECTOR ADDRESS 0XFFE8 timb_rt VECTOR ADDRESS 0XFFEA tima_rt VECTOR ADDRESS 0XFFEC spi_rt VECTOR ADDRESS 0XFFEE dummy_rt VECTOR ADDRESS 0XFFF0 eit3_rt VECTOR ADDRESS 0XFFF2 eit2_rt VECTOR ADDRESS 0XFFF4 eit1_rt VECTOR ADDRESS 0XFFF6 eit0_rt VECTOR ADDRESS 0XFFF8 mcc_rt VECTOR ADDRESS 0XFFFA dummy_rt */ VECTOR ADDRESS 0XFFFE _Startup

63

Les microcontrleurs

4.4.3. fichier denvironnement defaut.env


LIBPATH=C:\HIWARE\LIB\ST7C\include GENPATH=*C:\HIWARE\LIB\ST7C;*C:\Projets\Active vision\Asservissement\ST7-232\led334 OBJPATH=C:\Projets\Active vision\Asservissement\ST7-232\led334 ABSPATH=C:\Projets\Active vision\Asservissement\ST7-232\led334 TEXTPATH=C:\Projets\Active vision\Asservissement\ST7-232\led334 COMP=C:\HIWARE\PROG\CST7.EXE LINK=C:\HIWARE\PROG\linker.EXE FLAGS=-ml ERRORFILE= RESETSTACK=0x3FF

4.4.4. fichier make enviro.mak


#********************************************** EXECUTABLE COMMAND DEFINES **** ENV = default.env CC = $(COMP) #**************************************************** OBJECT FILES DEFINES **** OBJ_LIST = map72334.o main.o start07.o #************************************* MAIN FILES COMPILE & LINK (LEVEL 3) **** led_i.abs : $(ENV) $(OBJ_LIST) enviro.prm $(LINK) enviro.prm main.o : $(ENV) lib_bits.h map72334.h hidef.h ansi.lib start07.h main.c $(CC) main.c #************************************** LEVEL 0 FILE COMPILE (.o generate) **** map72334.o : $(ENV) map72334.h $(CC) map72334.c

64

You might also like