root/branch/smseck/sp4c12/sp4c1/SP4c1/SP4c1.c @ 849
849 | smseck1 | /***********************************************************************/
|
|
/* */
|
|||
/* 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);
|
|||
}
|