root/branch/lashermes/sp4c12/SP4c1/SP4c1.c @ 879
751 | celasherme | /***********************************************************************/
|
|
/* */
|
|||
/* 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"
|
|||
869 | celasherme | // variable globale
|
|
int trame_ok;
|
|||
751 | celasherme | // initialisation du port serie
|
|
void uart0_init (void)
|
|||
{
|
|||
761 | celasherme | u0mr=0b00000101; // configuration UART mode 8bit data length, internal clock , parity disabled , TX RX not inverted
|
|
751 | celasherme | ||
// on n'utilise pas
|
|||
u0smr=0x00;
|
|||
u0smr2=0x00;
|
|||
u0smr3=0x00;
|
|||
u0smr4=0x00;
|
|||
// pour configurer la frequence f8=(20Mhz/8) , CTS function not selected ,CTS function disabled ,LSB first
|
|||
u0c0=0b00010001;
|
|||
u0brg=32;
|
|||
/// transmit bit operation enable and receive operation enable
|
|||
u0c1=0x00;
|
|||
761 | celasherme | pd6_0=0;
|
|
pd6_1=0;
|
|||
pd6_2=0;
|
|||
pd6_3=1;
|
|||
751 | celasherme | ||
ps0_0=0;
|
|||
ps0_1=0;
|
|||
ps0_2=0;
|
|||
ps0_3=1;
|
|||
u0c1=0b00000101;
|
|||
}
|
|||
void uart0_tx(char c) // envoyer un caractere sur la liaison serie
|
|||
{
|
|||
761 | celasherme | while (ti_u0c1 !=1); // on attend que le port serie soit libre
|
|
u0tb=c; //ecriture dans le registre de transmition
|
|||
751 | celasherme | }
|
|
761 | celasherme | char uart0_rx(void) // r?ception d?un caract?re sur le port s?rie
|
|
751 | celasherme | {
|
|
761 | celasherme | while (ri_u0c1 !=1); //attendre que le port serie soit libre
|
|
return u0rb;
|
|||
751 | celasherme | }
|
|
869 | celasherme | int hex2int (char * c) // permet de convertir de l'hexa vers le decimal
|
|
{
|
|||
int i;
|
|||
int a;
|
|||
for (i=0;i<2;i++)
|
|||
{
|
|||
if (c[i] >= '0' && c[i]<='9')
|
|||
{
|
|||
c[i]=c[i]-'0';
|
|||
}
|
|||
else
|
|||
{
|
|||
c[i]=c[i]-55;
|
|||
}
|
|||
}
|
|||
a =(c[1] + 16*c[0]);
|
|||
return a;
|
|||
}
|
|||
852 | celasherme | ||
869 | celasherme | char checksum=0;
|
|
852 | celasherme | ||
int rectrame(char * Buffer)
|
|||
{
|
|||
int i=0;
|
|||
char c;
|
|||
869 | celasherme | ||
char calc_checksum[2];
|
|||
char verif_checksum;
|
|||
while(uart0_rx()!='$'); // on attend d'avoir le debut de la trame avec $
|
|||
c = uart0_rx(); // sinon on lit deux fois un uart different
|
|||
while(c!='*') // tant qu'on atteint pas la fin de la trame avec *
|
|||
852 | celasherme | {
|
|
869 | celasherme | Buffer[i]= c; // on met dans le buffer la trame
|
|
i=i+1; // on incremente de 1
|
|||
checksum=checksum^c; // ^ pour le ou exclusif entre toutes les valeurs
|
|||
852 | celasherme | c = uart0_rx();
|
|
869 | celasherme | ||
852 | celasherme | }
|
|
869 | celasherme | calc_checksum[0]=uart0_rx();
|
|
calc_checksum[1]=uart0_rx();
|
|||
verif_checksum =hex2int(calc_checksum);
|
|||
if ( (int) checksum == hex2int(calc_checksum))
|
|||
{
|
|||
trame_ok=1;
|
|||
//uart0_tx('O');
|
|||
}
|
|||
else
|
|||
{
|
|||
trame_ok=0;
|
|||
}
|
|||
852 | celasherme | return i;
|
|
}
|
|||
751 | celasherme | void main(void)
|
|
{
|
|||
761 | celasherme | ||
852 | celasherme | // char c='A'; // on lui dit de commancer par 'A'
|
|
761 | celasherme | /*while(1) // emet en boucle le meme carac
|
|
{
|
|||
for(i=0;i<26;i++) // pour i<26 lettres de l'aphabet donc pour ne pas depasser le Z
|
|||
{
|
|||
carac='A'+i; // on incremente A de 1 pour passer a la lettre suivante
|
|||
uart0_tx(carac); // on affiche la nouvelle lettre a chaque fois
|
|||
}
|
|||
}*/
|
|||
852 | celasherme | char c1,c2;
|
|
char trame[100]; // tableau pour stocker la trame
|
|||
uart0_init(); // initialisation
|
|||
761 | celasherme | while(1)
|
|
751 | celasherme | {
|
|
852 | celasherme | //uart0_tx(uart0_rx()+1);//On utilise la fonction tx pour ecrire sur le terminal le resultat que renvoie rx
|
|
761 | celasherme | ||
869 | celasherme | // c1=(char)(rectrame(trame)/10); // On divise par 10 pour avoir 6 car l'uart n'envoi qu'un carac par carac
|
|
// c2=(char)(rectrame(trame)%10); // on recupere le modulo de la division soit ici 2 donc les unit? pour au final avoir 62
|
|||
761 | celasherme | ||
869 | celasherme | // uart0_tx(c1+48);
|
|
// uart0_tx(c2+48);
|
|||
uart0_tx(rectrame(trame)+48);
|
|||
if (trame_ok==1)
|
|||
{
|
|||
uart0_tx('O');
|
|||
uart0_tx('K');
|
|||
}
|
|||
if (trame_ok==0)
|
|||
{
|
|||
uart0_tx('N');
|
|||
uart0_tx('O');
|
|||
uart0_tx('N');
|
|||
}
|
|||
852 | celasherme | }
|
|
751 | celasherme | }
|