GELE5343 Chapitre 2 : Révision de la programmation en C



Documents pareils
1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Introduction au langage C

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

MICROCONTROLEURS PIC PROGRAMMATION EN C. V. Chollet - cours-pic-13b - 09/12/2012 Page 1 sur 44

Cours de Systèmes d Exploitation

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

UE C avancé cours 1: introduction et révisions

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

La programmation des PIC en C. Les fonctions, les interruptions.

Temps Réel. Jérôme Pouiller Septembre 2011

UE Programmation Impérative Licence 2ème Année

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Cours d Algorithmique et de Langage C v 3.0

Conférence sur les microcontroleurs.

Algorithmique et Programmation, IMA

Ordinateurs, Structure et Applications

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Rappels Entrées -Sorties

Cours 7 : Programmation d une chaîne d acquisition

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

PIC EVAL Dev Board PIC18F97J60

Réalisation d un réseau de capteurs de température sans fil basé sur le protocole ZigBee

Le langage C. Séance n 4

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Programmation système I Les entrées/sorties

Chap III : Les tableaux

Programmer en JAVA. par Tama

Fiche technique CPU 315SN/PN (315-4PN33)

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Carte ARDUINO UNO Microcontrôleur ATMega328

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Bases de programmation. Cours 5. Structurer les données

Fiche technique CPU 314SC/DPM (314-6CG13)

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

SYSTEME DE PALPAGE A TRANSMISSION RADIO ETUDE DU RECEPTEUR (MI16) DOSSIER DE PRESENTATION. Contenu du dossier :

Programmation en langage C

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Introduction à la Programmation Parallèle: MPI

VIII- Circuits séquentiels. Mémoires

Initiation. àl algorithmique et à la programmation. en C

Le langage C. Introduction, guide de reference

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Claude Delannoy. 3 e édition C++

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Programmation système de commandes en C

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

as Architecture des Systèmes d Information

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Arguments d un programme

IV- Comment fonctionne un ordinateur?

La programmation des ATMEL AVR

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Description du logiciel Modbus RTU

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Exécutif temps réel Pierre-Yves Duval (cppm)


Configuration de TCPIPconfig.h

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Java Licence Professionnelle CISII,

1 Recherche en table par balayage

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Structure d un programme

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Version beta. Station Météo 12/11/2012. Réalisation d un Station Météo avec Webserver composée de capteurs Grove et d un module Wifi Flyport.

COMMUTEL PRO VM3 INTERFACE GSM VOIX POUR EMULATION DE LIGNE RTC ET TRANSMETTEUR DE SMS D ALERTES ET TECHNIQUES.

TP 1. Prise en main du langage Python

Programmation C. J.-F. Lalande. 15 novembre 2012

SUPPORT DE COURS. Langage C

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

QUESTION 1 {2 points}

TD Architecture des ordinateurs. Jean-Luc Dekeyser

1.6- Génération de nombres aléatoires

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Plan du cours Cours théoriques. 29 septembre 2014

La technologie Java Card TM

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Compilation (INF 564)

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Flowcode - Mode d'emploi

Le prototype de la fonction main()

GELE5222 Chapitre 9 : Antennes microruban

PROGRAMMATION D'UN MICROCONTRÔLEUR

Les structures. Chapitre 3

OS Réseaux et Programmation Système - C5

Une introduction à Java

Programmation impérative

Transcription:

GELE5343 Chapitre 2 : Révision de la programmation en C Gabriel Cormier, Ph.D., ing. Université de Moncton Hiver 2013 Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 1 / 49

Introduction Contenu 1 Introduction 2 Flot de programmation 3 Variables et évaluations 4 Boucles 5 Optimisation 6 Compteur 7 Interruptions 8 Ports Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 2 / 49

Introduction Rappel : C On s intéresse seulement aux commandes communes de programmation pour des microcontrôleurs. Ressources web : www.cprogramming.com C: Wikipedia The C book Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 3 / 49

Flot de programmation Flot de programmation Déclarations Initialisation des fonctions Commandes de préprocesseur Programme principal main() Fonctions Définitions Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 4 / 49

Flot de programmation Déclarations Commandes avec # sont pour le préprocesseur Préprocesseur : passe à travers le document 1 fois avant de compiler #include <stdio.h> : Va chercher le contenu du fichier stdio.h pour le placer dans le fichier actuel #define foo bar : cherche pour foo dans le fichier et le remplace par bar. Utile pour des constantes. #pragma : Commandes propres à l implémentation : dépend du compilateur. Si ces commandes ne sont pas comprises par le compilateur, elles sont ignorées. Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 5 / 49

Variables et évaluations Types de variables Entiers : int : entier, à 32 bits. Utilisera 4B en mémoire. De 2 31 à 2 31 1 short : entier à 16 bits (2B en mémoire). De 2 15 à 2 15 1 long long : entier à 64 bits (8B en mémoire). De 2 63 à 2 63 1 unsigned : permet d avoir des entiers positifs seulement. Ex : unsigned short, de 0 à 65 535 char : pour des caractères ; 8 bits. Utile pour des compteurs de 128 à 127 (ou 0 à 255). Ex : int i = 22 ou int i = 0x0016 (en hexadécimal) Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 6 / 49

Variables et évaluations Types de variables Autres : float : chiffre à virgule flottante, 32 bits long double : chiffre à virgule flottante à 64 bits Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 7 / 49

Variables et évaluations Quel type utiliser? Multiplication Bits Cycles Performance relative Int Float char 8 6 1 short 16 6 1 int 32 6 1 long long 64 21 3.5 float 32 71 11.8 1 long double 64 159 26.5 2.23 Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 8 / 49

Variables et évaluations Vecteurs et matrices On ajoute des parenthèses carrées lors de la déclaration. char c[10] : matrice de 10 entiers de 8 bits Le premier élément est l élément 0 : Selon l exemple, on a c[0] à c[9]. Il faut initialiser le vecteur au complet avant de l utiliser ; on ne peut pas avoir de matrice de dimension inconnue. Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 9 / 49

Variables et évaluations Évaluation de variables Évaluations logiques Faux est représenté par 0 Vrai est représenté par n importe quel entier sauf 0 : opérateur OU (OR) && : opérateur ET (AND)! : opérateur NON (NOT) Ex : Si a = 17 et b = 1, a b est VRAI a && b est VRAI!a est FAUX Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 10 / 49

Variables et évaluations Comparaison de variables == est égal à!= n est pas égal à > plus grand que >= plus grand ou égal à < plus petit que <= plus petit ou égal à Exemple : si a = 10, a>1 est VRAI -a >= 0 est FAUX a == 17 est FAUX a!= 3 est VRAI Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 11 / 49

Variables et évaluations Incrémentation Deux autres opérateurs : ++ : i++ équivalent à i = i+1 -- i-- équivalent à i = i-1 Peut être appliqué avant ou après une assignation. Ex : soit a = 0 et b = 1 : a = b++ donne a = 1, b = 2 a = ++b donne a = 2, b = 2 Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 12 / 49

Boucles Boucles Trois types principaux de boucles : Boucle for Boucle while Boucle do - while Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 13 / 49

Boucles Boucle for char i ; f o r ( i =0; i <5; i ++) { // f a i r e q uelque chose // s e r a e x é c u t é pour i = 0, 1, 2, 3 e t 4 } Les trois arguments : i=0 : initialise le compteur i<5 : vérifie s il faut s arrêter avec une expression logique i++ : incrémente le compteur Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 14 / 49

Boucles Boucle while while ( x ) { // f a i r e q uelque chose } x : n importe quelle expression logique Le code dans la boucle sera exécuté aussi longtemps que x est vrai. Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 15 / 49

Boucles Boucle do do { // f a i r e q ue l q u e chose } while ( x ) x : n importe quelle expression logique Le code dans la boucle sera exécuté 1 fois, puis ensuite aussi longtemps que x est vrai. Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 16 / 49

Optimisation Optimisation du programme Espace mémoire limité sur un microcontrôleur Espace RAM limité Il faut faire plus attention à la programmation Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 17 / 49

Optimisation Mémoire Éviter les grosses librairies (ex : printf) Éviter l allocation dynamique de mémoire Éviter les structures complexes Attention aux déclarations de variables (ne pas utiliser int si char est suffisant) Les calculs en virgule flottante sont beaucoup plus longs Il peut être plus efficace d utiliser des tables pour les fonctions complexes (sin, cos, etc.) que de faire le calcul directement. Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 18 / 49

Compteur Compteurs Le PIC32 a 6 compteurs, mais seulement 5 devraient être utilisés. Le compteur de coeur du CPU ne devrait pas être utilisé (il est cependant accessible). Les compteurs utilisent l horloge de périphérique (qui est plus petite ou égale à l horloge CPU). Contrôlés par 3 SFR (Special Function Register), ex pour Timer1 : TMR1 : contient la valeur (16 bit) du compteur T1CON : contrôle l activation et le mode d opération PR1 : Période du compteur (16 bit : valeur max 65 535) Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 19 / 49

Compteur Compteurs Timer1 est 16 bits, Timer2 à Timer5 peuvent être combinés pour 32 bits (mais 16 bits par défaut) Les compteurs utilisent l horloge de périphérique PBCLK Il faut régler le diviseur d horloge FBDIV correctement (valeur par défaut = 8 ; PBCLK = CLK/8) ; Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 20 / 49

Compteur Compteurs Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 21 / 49

Compteur Compteurs T1CON : Bit 15/7 Bit 14/6 Bit 13/5 Bit 12/4 Bit 11/3 Bit 10/2 Bit 9/1 Bit 8/0 15 : 8 TON FRZ SIDL TMWDIS TMWIP 7 : 0 TGATE TCKPS < 1 : 0 > TSYNC TCS Les bits 16 à 31 ne sont pas utilisés Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 22 / 49

Compteur Compteur T1 TON : Active le compteur TCS : Horloge du compteur : 0 = horloge interne TCKPS : Multiplicateur ; 00 = 1, 01 = 8, 10 = 64, 11 = 256 SIDL : comportement en mode inactif du CPU (0 si pas important) TSYNC : Synchronisation avec une horloge externe = 1 (0 sinon) TGATE : Pour horloge externe FRZ : Pour le débogage (0 par défaut) Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 23 / 49

Compteur Exemple Supposons qu on veut un compteur de période 0.2s, avec une horloge de 36MHz interne. T = 1 f pb M P S P Rx où f pb est la fréquence de l horloge de périphérique, M P S est le multiplicateur du compteur, et PRx est le nombre de cycles nécessaire pour avoir le délai voulu. donc PRx = 28 125. 0.2 = 1 (256)(P Rx) 36 106 Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 24 / 49

Compteur Exemple (suite) Avec Timer1 : TON = 1 : Activer le Timer TCS = 0 : On utilise l horloge interne TCKPS = 11 : Multiplicateur = 256 TGATE = 0, TSYNC = 0 : On utilise l horloge interne SIDL = 0 : Mode veille pas important Bit 15/7 Bit 14/6 Bit 13/5 Bit 12/4 Bit 11/3 Bit 10/2 Bit 9/1 Bit 8/0 15 : 8 TON FRZ SIDL TMWDIS TMWIP 7 : 0 TGATE TCKPS < 1 : 0 > TSYNC TCS T1CON = 1000 0000 0011 0000 T1CON = 0x8030 PR1 = 28 125 Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 25 / 49

Compteur Compteurs T2CON : Bit 15/7 Bit 14/6 Bit 13/5 Bit 12/4 Bit 11/3 Bit 10/2 Bit 9/1 Bit 8/0 15 : 8 TON SIDL 7 : 0 TGATE TCKPS < 2 : 0 > T32 TCS Les bits 16 à 31 ne sont pas utilisés. TCKPS est 3 bits pour Timer2-5 Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 26 / 49

Compteur Compteur T2 TON : Active le compteur TCS : Horloge du compteur : 0 = horloge interne TCKPS : Multiplicateur ; (valeur à 3 bits) 000 = 1, 001 = 2, 010 = 4, 011 = 8 100 = 16, 101 = 32, 110 = 64, 111 = 256 SIDL : comportement en mode inactif du CPU (0 si pas important) T32 : 0 = mode 16 bit, 1 = mode 32 bit Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 27 / 49

Interruptions Interruptions Interruption : événement interne ou externe qui demande rapidement l attention du CPU PIC32 : 64 sources d interruption L action à effectuer : ISR (Interrupt Service Routine) Généralement asynchrone 3 4 cycles entre l interruption et l action correspondante Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 28 / 49

Interruptions Exception Exception : perturbe le fonctionnement normal du programme Exception Interruption Reset Erreur mémoire Division par 0 Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 29 / 49

Interruptions Quelques règles... Le compilateur s occupe des procédures complexes d interruption, si : Le ISR ne retourne pas de valeur (type void) : asynchrone Aucun paramètre est retourné au ISR (paramètre void) N est pas appelé par d autres fonctions Idéalement, ne devrait pas appeler d autres fonctions : rendement Le langage C n a pas été conçu pour utiliser des interruptions... Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 30 / 49

Interruptions Sources d interruption Sources externes : 5 pins externes avec détection du niveau 22 pins externes branchées au module de notification de changement 5 entrées Input Capture 5 sorties Output Compare 2 interfaces port série (UART) 4 interfaces séries synchrone (SPI et I 2 C) 1 port parallèle Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 31 / 49

Interruptions Sources d interruption Sources internes : 1 compteur interne 32 bit 5 compteurs internes 16 bit 1 convertisseur analogique-numérique 1 module comparateur analogique 1 horloge et calendrier 1 contrôleur Flash 1 moniteur d horloge 2 interruptions logiciel 4 canaux DMA Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 32 / 49

Interruptions Priorités Chaque source d interruption a 7 bits de contrôle : Interrupt Enable : -IE ; un seul bit : 0, l événement ne génère pas d interruption ; 1, l interruption peut être évaluée. La valeur par défaut est 0 pour toutes les interruptions. Interrupt Flag : -IF ; un seul bit, est activé (valeur 1) chaque fois que l événement a lieu, indépendamment de IE. If faut le remettre à 0 manuellement à la fin de la routine d interruption, sinon l interruption est ré-activée immédiatement. Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 33 / 49

Interruptions Priorités Group Priority Level : -IP ; il y a 7 niveaux de priorité, de ipl1 à ipl7. Si deux interruptions ont lieu en même temps, celle avec la priorité la plus élevée est effectuée en premier. Nécessite 3 bits. Par défaut, toutes les interruptions sont à ipl0. Subpriority Level : 4 niveaux de priorité dans le même groupe En cas d équivalence, le tableau 5.2 pp. 86 88 donne les priorités. Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 34 / 49

Interruptions Déclarations ou void a t t r i b u t e ( ( i n t e r r u p t ( i p l X ), v e c t o r ( 0 ) ) ) I n t e r r u p t H a n d l e r ( void ) { // code i c i } #pragma i n t e r r u p t I n t e r r u p t H a n d l e r i p l X v e c t o r 0 void I n t e r r u p t H a n d l e r ( void ) { // code i c i } InterruptHandler est le nom de l interruption Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 35 / 49

Interruptions Déclarations : macros PIC32 void I S R ( 0, i p l X ) I n t e r r u p t H a n d l e r ( void ) { // code i c i } Définit dans sys/attribs.h Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 36 / 49

Interruptions Librairie Librairie int.h : #include <int.h> Plusieurs macros pour simplifier l implantation Compris dans #include <plib.h> Macros commencent par m : INTEnableSystemSingleVectoredInt() : fonction pour initialiser correctement le module de contrôle des interruptions. À utiliser!!! mxxsetintpriority( x) : Assigne le niveau de priorité de l interruption XX. Les abréviations sont données dans le tableau 5.2 pp. 86 88 du manuel. mxxclearintflag() : permet de remettre à 0 le IF d une interruption. Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 37 / 49

Interruptions Interruption : Exemple #i n c l u d e <p32xxxx. h> #i n c l u d e <p l i b. h> // i n c l u s macros pour i n t e r r u p t i o n s i n t count ; #pragma i n t e r r u p t I n t e r r u p t H a n d l e r i p l 1 v e c t o r 0 void I n t e r r u p t H a n d l e r ( void ) { count++; mt2clearintflag ( ) ; // IF = 0 } main ( ) { PR2 = 1 5 ; // P é r i o d e du compteur T2CON = 0 x8030 ; // C o n t r ô l e du compteur m T 2 S e t I n t P r i o r i t y ( 1 ) ; // P r i o r i t é 1 à cause de i p l 1 I N T E n a b l e S y s t e m S i n g l e V e c t o r e d I n t ( ) ; mt2intenable ( 1 ) ; } w h i l e ( 1 ) ; Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 38 / 49

Interruptions Interruptions multiples Priorité résout seulement une partie du problème Décide seulement laquelle est exécutée si 2 sont déclenchées en même temps Si une interruption est déjà active, qu arrive-t il si une 2e est déclenchée? Par défaut, il faut attendre la fin de l interruption avant de déclencher la 2e. Parfois une interruption de plus haute priorité doit interrompre une de moindre priorité Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 39 / 49

Interruptions Interruptions multiples On doit manuellement réétablir les interruptions aussitôt dans le ISR Nécessite une instruction assembleur MIPS asm("ei") : réactiver les interruptions (enable interrupt) Vérifier par code la source de l interruption : ex, mt3getintflag() pour vérifier si l interruption liée à Timer3 a été déclenchée Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 40 / 49

Interruptions Interruptions multiples : Exemple v o i d I S R ( 0, i p l 1 ) I n t e r r u p t H a n d l e r ( v o i d ) { asm ( e i ) ; i f ( mt3getintflag ( ) ) { // code m T 3 C l e a r I n t F l a g ( ) ; } e l s e i f ( mt2getintflag ( ) ) { // code m T 2 C l e a r I n t F l a g ( ) ; } } main ( ) { PR3 = 2 0 ; // P é r i o d e du compteur 3 ; exemple PR2 = 1 5 ; // P é r i o d e du compteur 2 ; exemple T3CON = 0 x8030 ; // C o n t r ô l e du compteur T2CON = 0 x8030 ; // C o n t r ô l e du compteur m T 3 S e t I n t P r i o r i t y ( 3 ) ; // P l u s haute p r i o r i t é m T 2 S e t I n t P r i o r i t y ( 1 ) ; I N T E n a b l e S y s t e m S i n g l e V e c t o r e d I n t ( ) ; mt3intenable ( 1 ) ; mt2intenable ( 1 ) ; w h i l e ( 1 ) ; } Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 41 / 49

Interruptions Interruptions multiples Les versions plus récentes du PIC ont les interruptions imbriquées par défaut L exemple précédent n est plus recommandé La commande asm("ei") est activée par défaut à l appel de la routine On modifie l appel à la routine : void ISR Single( 0, ipl1) InterruptHandler( void) Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 42 / 49

Interruptions Interruptions multiples : approche multi-vecteurs Le PIC32 offre une approche alternative pour gérer des interruptions multiples Vecteurs multiples et registres multiples Tableau 5.3 pp. 99 100 montre les différents vecteurs du PIC32 64 vecteurs pour 96 interruptions (limites dues au MIPS) Ex : Timer1 : le vecteur est TIMER 1 VECTOR, vecteur no 4 Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 43 / 49

Interruptions Interruptions multiples : approche multi-vecteurs L utilisation de vecteurs différents accélère l application des interruptions Pour vitesse max, utiliser ipl7 : registres spéciaux L approche imbriquée est quand même valide Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 44 / 49

Interruptions Interruptions multiples : approche multi-vecteurs : Exemple v o i d I S R ( TIMER 3 VECTOR, i p l 7 ) T 3 I n t e r r u p t H a n d l e r ( v o i d ) { // code m T 3 C l e a r I n t F l a g ( ) ; } v o i d I S R ( TIMER 2 VECTOR, i p l 1 ) T 2 I n t e r r u p t H a n d l e r ( v o i d ) { asm ( e i ) ; // code m T 2 C l e a r I n t F l a g ( ) ; } } main ( ) { PR3 = 2 0 ; // P é r i o d e du compteur 3 ; exemple PR2 = 1 5 ; // P é r i o d e du compteur 2 ; exemple T3CON = 0 x8030 ; // C o n t r ô l e du compteur T2CON = 0 x8030 ; // C o n t r ô l e du compteur m T 3 S e t I n t P r i o r i t y ( 7 ) ; // P l u s haute p r i o r i t é m T 2 S e t I n t P r i o r i t y ( 1 ) ; I N T E n a b l e S y s t e m S i n g l e V e c t o r e d I n t ( ) ; mt3intenable ( 1 ) ; mt2intenable ( 1 ) ; w h i l e ( 1 ) ; } Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 45 / 49

Ports Ports entrée-sortie (I/O) Ports A à G sont programmables I/O TRISx : direction, 1 = Input, 0 = Output. Ex : TRISA = 1 veut dire que le port A est en mode entrée. PORTx : lecture / écriture au port. Ex : PORTD = 0x0020 veut dire que le bit 5 du port D est haut. En mode lecture, acceptent jusqu à 5 V en entrée. En mode sortie, la tension est 3.3 V Par défaut, les ports sont en mode lecture (Input) Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 46 / 49

Ports Librairies La librairie plib.h donne accès à plusieurs macros Ex : mportasetbits( BIT 8 BIT 10) Ex : PORTSetBits( IOPORT A, BIT 8 BIT 10) Pour régler les ports comme entrée ou sortie : PORTSetPinsDigitalIn(IOPORT x, BIT y) PORTSetPinsDigitalOut(IOPORT x, BIT y) Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 47 / 49

Ports Lecture Fonctions et macros de lecture : mportxread() mportxreadbits() PORTRead(IO PORT ID) : lecture de tous les bits PORTReadBits(IO PORT ID, bits) : lecture des bits spécifiés Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 48 / 49

Ports Écriture Fonctions et macros d écriture : mportxwrite(bits) mportxsetbits(bits) mportxclearbits(bits) mportxtogglebits(bits) PORTWrite(IO PORT ID) : écriture de tous les bits PORTSetBits(IO PORT ID, bits) : écriture des bits spécifiés (à 1) PORTClearBits(IO PORT ID, bits) : écriture de 0 aux bits spécifiés PORTToggleBits(IO PORT ID, bits) : inverse la valeur des bits spécifiés Gabriel Cormier (UdeM) GELE5343 Chapitre 2 Hiver 2013 49 / 49