La derniere version de ce tuto est disponible sur le WIKI
Dans cette exemple, nous allons simplement faire clignoter une LED. Pour cela, nous allons avoir besoin de créer une temporisation avec la fonction “delay” de l’ASF.
Importer les librairies qui sont nécessaires. Cliquer sur ASF → ASF Wizard. Chercher les librairies suivants :
-
Delay routines (pour les temporisations)
-
GPIO – Généra purpose Input/Output
-
Generic board support (elle integre des fonctions qui seront necessaire pour utiliser la librairie delay)
-
IOPORT – Généra purpose Input/Output (Librairie que nous avons vu dans la partie entrée/sorties.
Cliquer sur Add pour importer les librairies dans votre projet.
La fonction delay est directement liée à la fréquence de fonctionnement de votre micro.
Il est donc important de la définir dans votre projet.
Pour cela, faites un clic droit sur “board_init()” selectionner “Goto implementation”.
Vous pouvez voir dans les includes, le fichier “board.h”. Ouvrer le en faisant un clic droit dessus puis en sélectionnant “Goto implementation”.
Vous pouvez voir dans ce fichier, l’ensemble des cartes de developpement d’ATMEL.
Vous trouverez en bas de la liste
#elif BOARD == USER_BOARD // User-reserved area: #include the header file of your board here (if any). # include “user_board.h“
Atmel a prevu un fichier “user_board.h” qui intégrera les informations spécifiques de votre carte. (Clic droit → Goto implementation.)
Si vous utilisez un quartz externe, il faudra décommenter les 3 lignes et les compléter avec les caractéristiques de votre carte.
La fréquence de votre horloge (Pour ma part, il s’agit d’un quartz de 32.768 Khz connecté sur les pin TOSC.
#define BOARD_XOSC_HZ 32768
Le type d’oscillateur externe
XOSC_TYPE_32KHZ | Quartz de 32.768Khz |
XOSC_TYPE_EXTERNAL | Signal d’horloge |
XOSC_TYPE_XTAL | Quartz de 0.4 à 16Mhz |
#define BOARD_XOSC_TYPE XOSC_TYPE_32KHZ
Le temps de stabilisation de votre oscillateur. Mettez 1ms pour être tranquille.
#define BOARD_XOSC_STARTUP_US 1000000
Ouvrez ensuite le fichier “conf_clock.h” dans le répertoire config de votre projet. Vous trouverez toute une série de lignes permettant de configurer vos horloges. Pour l’instant, nous allons juste nous intéresser aux premières.CONFIG_SYSCLK_SOURCE définit la source de votre horloge système qui peut être :
SYSCLK_SRC_RC2MHZ | Oscillateur 2Mhz interne |
SYSCLK_SRC_RC32MHZ | Oscillateur 32Mhz interne |
SYSCLK_SRC_XOSC | Oscillateur externe |
SYSCLK_SRC_XOSC | PLL |
Sélectionner le type d’horloge que vous utilisez.
Ouvrez le fichier main.c du projet et complétez avec :
#define LED IOPORT_CREATE_PIN(PORTR, 0) //LED = PR0 int main (void) { sysclk_init(); //Initialisation horloge système board_init(); //Initialisation de la carte //Initialisation des entrées/sorties ioport_init(); //Initialisation d'IOPORT ioport_set_pin_dir(LED, IOPORT_DIR_OUTPUT); //LED_ROUGE est une sortie while(1) { ioport_toggle_pin_level(LED); //Inverse l'état de la LED1 delay_ms(250); //Tempo de 250ms } }
Comme vous le savez les oscillateurs internes de l’XMEGA sont calibrés. Les valeurs de qualibration sont stockées dans le microcontrôleur mais ne sont pas cherchées automatiquement au démarrage. La fonction sysclk_init se charge de charger ces valeurs et paramétrer vos horloges comme vous l’avez indiqué dans votre projet