Envoie des coordonnées GPS et de l'heure via bus CAN
Par Bayoumi Chaïmaa et Comte-Gaz Quentin (encadré par M. Pepin)
 Tout Fichiers Fonctions Variables Pages
Envoie des coordonnées GPS et de l'heure via bus CAN

Introduction

Le code présenté a été crée par Bayoumi Chaïmaa et Comte-Gaz Quentin.
Carte utilisée : Blackfin 537

Le projet consistait à :

UART-DMA (GPS)

Voici les différentes fonctions/interruptions liées à l'UART-DMA :

UART0_init(void) (Initialisation de l'UART 0 ainsi que le DMA (pour le gps))
UART0_read(void) (Lecture d'un octet via l'UART 0 (gps) sans attente)
UART0_send(char c) (Ecriture d'un octet via l'UART 0 (Hyperterminal du PC))
EX_INTERRUPT_HANDLER(Uart0_ISR) (Interruption de reception d'un char via l'UART 0 (GPS))
EX_INTERRUPT_HANDLER(Uart0_tx_DMA_ISR) (Interruption de transmission d'une trame via l'UART0-DMA9 (Hyperterminal du PC))
Init_Interrupts(void) (Fonction d'initialisation des interruptions CAN et UART0-DMA9 ainsi que leurs priorités associées)

Bus CAN

Voici les différentes fonctions/interruptions liées au bus CAN :

init_CAN(void) (Initialisation du bus CAN ainsi que des mailboxes à utiliser)
preparation_mailbox(unsigned char *data, int taille_data, int mbID) (Préparation des mailbox d'envoie (uniquement l'heure et la position –> mailboxes 20 et 21))
EX_INTERRUPT_HANDLER(Can_tx_ISR) (Interruption de fin de transmission d'une trame CAN via le bus CAN)
EX_INTERRUPT_HANDLER(Can_rx_ISR) (Interruption de reception d'une demande CAN via le bus CAN)
Init_Interrupts(void) (Fonction d'initialisation des interruptions CAN et UART0-DMA9 ainsi que leurs priorités associées)

Variables globales

Voici les différentes variables globales utilisées :

buffer [100] (buffer pour l'UART)
buffer_can[100] (buffer pour le CAN)
buffer_can_ready (protection pour éviter d'envoyer une trame via CAN alors qu'elle est en cours d'édition via UART0)
flag_fin_can (flag de fin d'envoie CAN)
flag_irq_tx (flag de fin d'envoie UART0)
position_buffer (position du buffer de l'UART)

Pour plus d'informations sur ces variables, je vous conseille de consulter la page suivante :
Globals.html

Pour aller plus loin

Notre programme est fonctionnel. Cependant, pour avoir un projet ne contenant aucune faille, on pourrait utiliser un RTOS afin de protéger les ressources critiques (notre flag flag_fin_can ainsi que l'utilisation de pSIC_IMASK dans les interruptions ne sont que des substituts à des sémaphores).
Voici une liste des RTOS compatibles avec la carte Blackfin 537 :
https://en.wikipedia.org/wiki/Blackfin#Supported_operating_systems.2C_RTOSs_and_kernels


Voici également une capture d'écran montrant que le programme fonctionne correctement :
Demo