Projet

Général

Profil

/***********************************************************************/
/* */
/* FILE :SP41c.c */
/* DATE :Thu, Jun 03, 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. */
/***********************************************************************/

void uart0_init (void);
void uart0_tx(char c);
char uart0_rx(void);
void alphabet(void);
int rectrame (char * Buffer);
int hex_int(char *c);

void uart0_init()
{
/*
smd0_u0mr = 1
smd1_u0mr = 0
smd2_u0mr = 1
ckdir_u0mr = 0
stps_u0mr = 0
pry_u0mr = 0
prye_u0mr = 0
iopol_u0mr = 0
*/
u0mr = 0x05;
/*
clk0_u0c0 = 1
clk1_u0c0 = 0
crs_u0c0 = 0
txept_u0c0 = 0
crd_u0c0 = 1
nch_u0c0 = 0
ckpol_u0c0 = 0
uform_u0c0 = 0
*/
u0c0 = 0x11;
/*
te_u0c1 = 1
ti_u0c1 = 0
re_u0c1 = 1
ri_u0c1 = 0
uilrs_u0c1 = 0
uirrm_u0c1 = 0
uilch_u0c1 = 0
sclkstpb_u0c1 = 0
uiere_u0c1 = 0
*/
u0c1 = 0x05;
u0brg = 0x20; // m = 32
// Config port 6 pd6 = 0x08
pd6_1 = 0;
pd6_2 = 0;
ps0_1 = 0;
ps0_2 = 0;
ps0_3 = 1;
}

void uart0_tx(char c)
{
te_u0c1 = 1;
u0tb = c;
te_u0c1 = 0;
}

char uart0_rx()
{
while(ri_u0c1!=1)
{
return u0rb;
}
}

void alphabet(void) // a faire au debugger
{
int i;
for(i=65 ; i<91 ; i++) // A = 65 et Z = 90
{
uart0_tx(i);
}
}

int rectrame (char * buffer)
{
int i = 0;
int nb_caract = 0;
char char_recu;
char checksum_trame=0;
char checksum_fin_trame[3];
char calc_checksum = 0;
char_recu = uart0_rx();
while(char_recu != '$')
{
i = 0;
}
buffer[0] = '$';
while(char_recu != '*')
{
char_recu = uart0_rx();
buffer[i+1]= char_recu;
i++;
calc_checksum = calc_checksum ^ char_recu; // OU exclusif
}
nb_caract = i;
return nb_caract;
}


























int hex_int(char *c)
{
int i=0;

/**La boucle permet de travaller sur les deux derniers caract?res du checksum de la trame re?ue**/
for(i=0; i<2; i++)
{
/**si le caractere est entre 0 et 9 ->retranche en ascii '0', soit 48 en d?cimal**/
if(c[i]>='0' && c[i]<='9')
{
c[i] = c[i]-48;
}
/**si le caractere est superieur a 10, soit A en hex ->retranche le nombre 55**/
if(c[i]>='A')
{
c[i] = c[i]-55;
}
}

/**entier_cheksum= c[1] + 16*c[0]**/
return( c[1]+16*c[0] );
}






(10-10/10)