0

TUTO XMEGA : Entrées/Sorties

La dernière version de cette article est disponible sur le WIKI.

Les entrées/Sorties des XMEGA sont regroupés par port de 8 bits. Ces ports s’appellent PORTx où x est la lettre du port. Exemple : PORTA, PORTB. Les Pin indivituelles s’appellent Pxn où x correspond au nom du port et n au numéro de la pin. Exemple : PA0

La direction

Chaque pin peut être utilisée en sortie ou en entrée. Ce choix se définit dans le registre DIR. Si DIRn est à “0” la pin est paramétrée en entrée si DIRn est à “1” la pin est configurée en sortie.

Entrée “0”
Sortie “1”
PORTR.DIR = 0xFF; //Met port R en sortie

Etat d’une sortie

L’état de la sortie est contrôlé par le registre OUT. La sortie passera à VCC si OUTn est à “1” et la sortie passera à 0V si la OUTn est à “0”

0V “0”
VCC “1”
PORTR.OUT = 0x0F; //Met PR0 à PR3 3.3V et PR4 à PR7 à 0V

Lecture de l’état d’une entrée

L’état logique d’une entrée peut être obtenu par une lecture du registre IN.

unsigned char EtatPortA;
EtatPortA = PORTA.IN;

Configuration

Chaque Pin peut avoir une configuration particulière. Ce paramétrage est réalisé via le registre PINnCTRL.

Nom Configuration de l’entrée/sortie
PORT_OPC_TOTEM_gc 0 ou VCC
PORT_OPC_BUSKEEPER_gc Mémorise le dernier état sur l’entrée via une résistance Pull-up ou Pull-down
PORT_OPC_PULLDOWN_gc Pull-down sur l’entrée
PORT_OPC_PULLUP_gc Pull-up sur l’entrée
PORT_OPC_WIREDAND_gc OUT=1 → H, OUT=0 → 0V (Collecteur ouvert)
PORT_OPC_WIREDANDPULL_gc OUT=1 → Pull-Up, OUT=0 → 0V (Collecteur ouvert avec résistance de tirage)
PORT_OPC_WIREDOR_gc OUT=1 → VCC, OUT=0 → H
PORT_OPC_WIREDORPULL_gc OUT=1 → VCC, OUT=0 → Pull-Down
PORT_OPC_BUSKEEPER_gc permet de maintenir un niveau logique sur un fil qui passe en haute impédance et ainsi éviter un état indéterminé sur l’entrée.
PORTA.PIN0CTRL |= PORT_OPC_PULLUP_gc; //Activation de la résistance de tirage à l'état haut sur PIN0 du PORT A

Sur les PIN déclenchant des interruptions, il est possible de définir le mode de déclenchement.

PORTA.PIN0CTRL |= PORT_ISC_RISING_gc;
Nom Configuration de l’entrée
PORT_ISC_BOTHEDGES_gc Front montant et descendant
PORT_ISC_RISING_gc Front montant
PORT_ISC_FALLING_gc Front descendant
PORT_ISC_LEVEL_gc Niveau bas
PORT_ISC_INPUT_DISABLE_gc Désactivation du buffer d’entrée
PORT_ISC_INPUT_DISABLE_gc permet de réduire la consommation quand la pin n’est pas utilisée ou utilisée en analogique. Dans ce cas, l’entrée sera dans le registre IN sera toujours à 0
PORT_ISC_LEVEL_gc il est possible de faire une detection sur niveau haut en inversant l’entrée

Inversion

Il est possible d’inverser une entrée. Appliquer 0V sur l’entrée donnera un “1” logique et inversement, appliquer VCC donnera un “0”.

PORTA.PIN0CTRL |= PORT_INVEN_bp;

Interruption

Chaque entrée a 2 interruptions. Activer une interruption se fait en 3 étapes :

  1. Configurer le registre PINnCTRL (Choix du mode de déclenchement, front montant etc …)
  2. Mettre à “1” le bit correspondant à l’entrée dans le registre INT0MASK
  3. Définir le niveau de priorité en paramétrant les registres INT0LVL et INTLVL
La priorité sélectionnée doit être activée dans le PMIC (Programmable Multilevel Interrupt Controler). Le flag d’interruption global doit également être activé

Sortie de veille

Quand l’XMEGA se met en veille sont horloge est désactivée. Un changement sur l’entrée doit être détecté de maniéré asynchrone. Tous les modes de déclenchement (front montant, niveau etc …) ne sont pas possible sur toutes les pin. Seule la PIN2 de chaque port permettra un reveil du microcontroleur quelque soit le mode de déclenchement choisi. Pour les autres PIN, il faudra soit les paramétrer en PORT_ISC_BOTHEDGES_gc ou en PORT_ISC_LEVEL_gc.

admin

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.