|
/***********************************************************************/
|
|
/* */
|
|
/* 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] );
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|