|
/***********************************************************************/
|
|
/* */
|
|
/* FILE :sp4c1.c */
|
|
/* DATE :Wed, Jun 02, 2021 */
|
|
/* DESCRIPTION :main program file. */
|
|
/* CPU GROUP :87B */
|
|
/* */
|
|
/* This file is generated by Renesas Project Generator (Ver.4.18). */
|
|
/* NOTE:THIS IS A TYPICAL EXAMPLE. */
|
|
/***********************************************************************/
|
|
#include "sfr32c87.h"
|
|
|
|
int trame_ok;
|
|
//les prototypes
|
|
void uart0_init (void);
|
|
void uart0_tx(char c);
|
|
void alphabet(char *chaine);
|
|
char uart0_rx(void);
|
|
int rectrame (char *buffer);
|
|
|
|
typedef enum
|
|
{
|
|
synchronisation,
|
|
reception,
|
|
checksum,
|
|
validation
|
|
} etat_machine;
|
|
etat_machine etat=synchronisation;
|
|
|
|
|
|
|
|
|
|
//Initialisation du port s?rie 0
|
|
void uart0_init(void)
|
|
{
|
|
u0mr = 0x05;
|
|
u0brg = 0x20;
|
|
u0c0 = 0x11;
|
|
u0c1 = 0x05;
|
|
pd6 = 0x08;
|
|
ps0 = 0x08;
|
|
psl0=0x00;
|
|
}
|
|
//Envoi d'un caract?re
|
|
void uart0_tx(char c)
|
|
{
|
|
while(ti_u0c1 !=1);
|
|
u0tb=c;
|
|
}
|
|
//Envoi une suite de caract?re de ?A? ? ?Z?
|
|
void alphabet(char *chaine)
|
|
{
|
|
int i=0;
|
|
while(chaine[i]!='\0')
|
|
{
|
|
uart0_tx(chaine[i]);
|
|
i++;
|
|
}
|
|
}
|
|
//fonction d'attente d'un caract?re sur la liaison s?rie et renvoie le caract?re suivant dans l'alphabet
|
|
char uart0_rx(void)
|
|
{
|
|
while(ri_u0c1!=1);
|
|
return u0rb;
|
|
}
|
|
/*int rectrame(char *buffer)
|
|
{
|
|
int i = 0;
|
|
char caractere_recu;
|
|
char checksum = '0';
|
|
|
|
caractere_recu = uart0_rx(); //lecture du caractere recu*
|
|
while ( caractere_recu != '$')//detection trame
|
|
{
|
|
i = 0;
|
|
checksum = 0;
|
|
}
|
|
|
|
while ( caractere_recu != '*') //memorisation de la trame re?ue
|
|
{
|
|
caractere_recu = uart0_rx();
|
|
buffer[i++] = caractere_recu;
|
|
checksum = checksum ^ caractere_recu;
|
|
}
|
|
|
|
return i ;
|
|
}*/
|
|
|
|
int rectrame(char *buffer)
|
|
{
|
|
int k=0;
|
|
int nombre_caractere_apres_etoile=0;
|
|
int nombre_caractere=0;
|
|
char caractere_recu;
|
|
char checksum_trame=0;
|
|
char checksum_fin_trame[];
|
|
char checksum_calculer=0;
|
|
|
|
while(1)
|
|
{
|
|
|
|
if (caractere_recu == '$')
|
|
{
|
|
nombre_caractere = 0;
|
|
etat=reception;
|
|
checksum_trame=0;
|
|
}
|
|
|
|
if (caractere_recu !='*')
|
|
{
|
|
buffer[nombre_caractere] = caractere_recu;
|
|
nombre_caractere++;
|
|
checksum_trame ^= caractere_recu;
|
|
nombre_caractere_apres_etoile = 0;
|
|
}
|
|
else
|
|
{
|
|
etat =checksum;
|
|
}
|
|
if (nombre_caractere_apres_etoile==2)
|
|
{
|
|
etat=validation;
|
|
checksum_calculer=hex_int(checksum_fin_trame);
|
|
}
|
|
nombre_caractere_apres_etoile++;
|
|
|
|
|
|
if (checksum_trame==checksum_calculer)
|
|
{
|
|
etat = synchronisation;
|
|
return nombre_caractere;
|
|
}
|
|
else
|
|
|
|
etat = synchronisation;
|
|
return 0;
|
|
|
|
return buffer[];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void main ()
|
|
{
|
|
char chaine[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
char buffer[80];
|
|
uart0_init();
|
|
while(1)
|
|
alphabet(chaine);
|
|
RecTrame(buffer);
|
|
|
|
}
|