Академический Документы
Профессиональный Документы
Культура Документы
P. Kauffmann
MODULE INFORMATIQUE EMBARQUEE
Communication srie
RS232
1. Prsentation
De nombreux systmes embarqus communiquent avec lextrieur via une liaison filaire,
radio ou infrarouge. Beaucoup de ces interfaces de communication utilisent la liaison srie
asynchrone RS232 pour se connecter au microcontrleur.
Dans ce TP de 2 h, nous allons mettre en place une application embarque qui gnre un
signal priodique quelle communique via un port srie RS232 directement au PC du poste de
travail qui fournira une IHM graphique dporte capable d'afficher sous forme de courbe
lvolution temporelle du signal en fonction du temps.
2. Objectif(s) oprationnel(s)
Devenir capable dcrire un pilote de priphrique RS232,
3. Organisation matrielle
Le TP sera ralis par un groupe de deux tudiants. Le TP fera l'objet dun rapport crit
contenant les rponses aux questions et le code des fonctions demandes, rendu en fin de
sance sur papier.
La liaison srie RS232 est un protocole de communication datant des annes 1950 largement
utilis durant toutes les priodes de l'informatique et qui reste essentiel de nos jours comme
interface pour les systmes de communication plus volus. Il a t conu au dpart pour
relier un ETTD (Elment Terminal de Traitement de Donnes), c'est dire un ordinateur,
imprimante, console, etc. un ETCD (Elment Terminal de Communication de Donnes),
c'est--dire un modem.
Nous allons utiliser cette liaison pour connecter notre systme embarqu base de RX62N
qui se comporte comme un ETCD au PC du poste de travail qui se comporte comme un
ETTD et qui nous servira dIHM.
Dans une liaison srie asynchrone il faut choisir plusieurs paramtres et faire des choix
identiques pour les deux entits connectes ensembles. Les choix faire sont :
la vitesse de transmission en Bauds : 110,, 9600, , 115200, ou plus (sous
condition),
la parit (paire, impaire ou sans),
le nombre de bits de donnes par caractre (5 8),
le nombre minimal de bits darrt (1, 1,5 ou 2),
le mode de contrle de flux (hard, soft ou absent).
En ce qui nous concerne, nous allons communiquer sans contrle de flux et sans parit, en 8
bits avec 1 bit darrt au moins et 115200 Bauds (vitesse maximale sur les PC).
Le RX62N dispose de six ports srie nomms SCI pouvant fonctionner dans divers modes
synchrones et asynchrones. Nous allons utiliser le SCI6 qui dispose dune prise DB9 en face
latrale gauche de la carte de prototypage.
N. B. : pour fonctionner correctement, il faut passer par un petit adaptateur DB9 qui permute
des broches car le brochage dorigine nest pas standard.
Nous allons connecter la DB9 de la carte de prototypage sur ladaptateur USB/srie du PC via
un cble srie. Cet adaptateur est reli par un pilote de priphrique au port srie COM1 du
PC (connecteur 9 broches situ larrire des machines de la salle de TP).
Pour exploiter le port srie on va raliser une classe sci minimaliste qui ne sait grer quun
port srie (le numro 6) et offre un service minimal avec un seul constructeur sci(uint8_t
priority, uint32_t speed) qui initialise le port srie et une seule mthode void
sciTrans(uint8_t * string) qui met dans le registre dmission du port srie le
premier caractre de la chane de caractres mettre avec linstruction SCI6.TDR =
m_sciTX6message[0]; .
Pour exploiter le port srie en full duplex sous interruption il faut aussi deux fonctions
sciSend() et sciReceive() qui ne peuvent pas tre des mthodes car ce sont des
fonctions dinterruption. Leur code est prsent sous cette forme aux paragraphes 6.3 et 6.4.
Toutefois, il est parfaitement possible dutiliser des mthodes de mme nom ; les fonctions
dinterruption se contentant alors dappeler ces mthodes. Cette manire de faire trs gnrale
doit tre privilgie.
Elles ont besoin davoir accs aux attributs publics suivants de la classe :
// for reception
volatile uint8_t m_sciRXmessage[128];
volatile bool m_sciRXfree;
// for transmission
volatile uint8_t m_sciTXmessage[64];
volatile bool m_sciTXfree;
sciSend() met sous interruption tous les caractres except le premier ; les caractres
tant prlevs dans le tampon dmission m_sciTXmessage[].sciReceive() reoit tous
les caractres sous interruption, les place dans le tampon m_sciRXmessage[] et dsactive
le fanion m_sciTXfree pour indiquer la fin de lopration.
6.2. Initialisation
Pour initialiser la liaison srie de SCI6 dans le microcontrleur on pourra utiliser le canevas
ci-aprs en ajoutant les valeurs numriques manquantes.
La mthode dmission du premier caractre place dans le fichier de classe sci.cpp aura
un code semblable celui donn ci-aprs :
void sciSend(void)
{
static uint8_t messByte = xx; // number of transmitted
characters
La fonction dinterruption, place dans le fichier de classe sci.cpp grant la rception, dont
le canevas complter est donn ci-aprs, assurera la rception sans gestion de flux. Cette
fonction inutilise dans limmdiat sera indispensable pour les TP suivants lorsque la
communication deviendra bidirectionnelle.
void sciReceive(void)
{
static uint8_t messByte = xx;
void sciSendEnd()
{
sci6.m_sciTXfree = true;
// inhibit end of transmission interrupt
SCI6.SCR.BIT.TEIE = 0;
}
void sciReceiveError()
{
// clear parity error
SCI6.SSR.BIT.PER = 0;
// clear framing error
SCI6.SSR.BIT.FER = 0;
// clear overrun error
SCI6.SSR.BIT.ORER = 0;
}
8. Manipulations
8.1. Dispositif embarqu communiquant
On se propose dutiliser le lien RS232 de la maquette vers le PC pour afficher la courbe dune
grandeur mesure par le RX62N. Comme, pour le moment, on na pas de capteur install sur
le systme embarqu, on simule le signal de mesure par un signal qui volue temporellement
priodiquement en dent de scie, signal gnr par une mthode ajoute la classe tps
nomme void tps::dentScie(). La mthode tps::dentScie()incrmente lattribut
m_dent (valeur initiale nulle) de 10 units chaque appel, et remet sa valeur 0 chaque
fois quelle atteint 400. Elle est excute 5 fois par seconde et lattribut m_dent est transmis
sur le port srie pour gnrer le signal dsir la mme frquence.