root/branch/FRAISSE/sp4c12/SP4c12/SP4c12.c @ 912
769 | lefraisse | /***********************************************************************/
|
|
/* */
|
|||
/* FILE :SP4c12.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. */
|
|||
/***********************************************************************/
|
|||
786 | lefraisse | #include "sfr32c87.h"
|
|
769 | lefraisse | ||
786 | lefraisse | void uart0_init(void);
|
|
void uart0_tx(char c);
|
|||
842 | lefraisse | char uart0_rx();
|
|
void alphabet(void);
|
|||
899 | lefraisse | int hex2int(char*c);
|
|
842 | lefraisse | int rectrame(char* buffer);
|
|
786 | lefraisse | ||
899 | lefraisse | ||
769 | lefraisse | void main(void)
|
|
{
|
|||
842 | lefraisse | char c = 'A'; //Utilis? pour la fonction alphabet
|
|
int i=0,j;
|
|||
char table[10][80];
|
|||
786 | lefraisse | uart0_init();
|
|
842 | lefraisse | ||
786 | lefraisse | while(1){
|
|
899 | lefraisse | char trame[80];
|
|
rectrame(trame);
|
|||
842 | lefraisse | //alphabet(); test alphabet
|
|
/* arriv?e d'un caract?re sur le port s?rie
|
|||
uart0_tx(c);
|
|||
uart0_rx();
|
|||
uart0_tx(c+1);
|
|||
*/
|
|||
/*while (i<10){
|
|||
[buffer, j] = rectrame(buffer);
|
|||
if (j==63){
|
|||
for (i;i<j;i++){
|
|||
uart0_tx(buffer[i]);
|
|||
}
|
|||
i++;
|
|||
}
|
|||
}
|
|||
i=0;*/
|
|||
786 | lefraisse | }
|
|
}
|
|||
void uart0_init(void){
|
|||
pd6_1=0;
|
|||
pd6_2=0;
|
|||
ps0_1=0;
|
|||
ps0_2=0;
|
|||
ps0_3=1;
|
|||
u0mr=0x05;
|
|||
769 | lefraisse | ||
786 | lefraisse | //Initialisaton du Registre U0SMR
|
|
u0smr = 0x00;
|
|||
u0smr2 = 0x00;
|
|||
u0smr3 = 0x00;
|
|||
u0smr4 = 0x00;
|
|||
//Initialisaton du Registre U0C0
|
|||
clk1_u0c0 = 0;
|
|||
clk0_u0c0 = 1;
|
|||
899 | lefraisse | crs_u0c0 = 0;
|
|
786 | lefraisse | crd_u0c0 = 1;
|
|
nch_u0c0 = 0;
|
|||
ckpol_u0c0 = 0;
|
|||
uform_u0c0 = 0;
|
|||
//Initialisaton du Registre U0BRG
|
|||
u0brg = 0x20;
|
|||
//Initialisaton du Registre U0C1
|
|||
899 | lefraisse | te_u0c1 = 1;
|
|
re_u0c1 = 1;
|
|||
786 | lefraisse | //uoirs_u0c1 = 0;
|
|
u0rrm_u0c1 = 0;
|
|||
u0lch_u0c1 = 0;
|
|||
sclkstpb_u0c1 = 0;
|
|||
//Initialisaton du Registre S0TIC
|
|||
ilvl0_s0tic = 0;
|
|||
ilvl1_s0tic = 0;
|
|||
ilvl2_s0tic = 0;
|
|||
ir_s0tic = 0;
|
|||
//Initialisaton du Registre S0RIC
|
|||
ilvl0_s0ric = 0;
|
|||
ilvl1_s0ric = 0;
|
|||
ilvl2_s0ric = 0;
|
|||
ir_s0ric = 0;
|
|||
769 | lefraisse | }
|
|
786 | lefraisse | ||
void uart0_tx(char c){
|
|||
842 | lefraisse | while (ti_u0c1=0); //attente
|
|
786 | lefraisse | u0tb=c;
|
|
}
|
|||
842 | lefraisse | char uart0_rx(){
|
|
899 | lefraisse | while (!ri_u0c1); //attente
|
|
842 | lefraisse | return u0rb;
|
|
}
|
|||
void alphabet(void){
|
|||
char ch='A';
|
|||
int i;
|
|||
for (i=0;i<26;i++){
|
|||
uart0_tx(ch);
|
|||
ch+=1;
|
|||
}
|
|||
}
|
|||
int hex2int(char *c){
|
|||
int i;
|
|||
int d;
|
|||
899 | lefraisse | ||
842 | lefraisse | for (i=0;i<2;i++){
|
|
//Pour des chiffres, la valeur hexad?cimal correspond ? la valeur d?cimal
|
|||
if ( (c[i]>'0') && (c[i]<'9')){
|
|||
899 | lefraisse | c[i]-='0';
|
|
842 | lefraisse | }
|
|
//La valeur d?cimale de A est 10 et au max on aura la lettre F en hexa
|
|||
else if ((c[i]>'A')&&(c[i]<'F')){
|
|||
899 | lefraisse | c[i]-=55;
|
|
842 | lefraisse | }
|
|
}
|
|||
899 | lefraisse | d=c[0]+16*c[1];
|
|
842 | lefraisse | return d;
|
|
}
|
|||
899 | lefraisse | ||
int rectrame(char *buffer){
|
|||
int i=0,j=0;
|
|||
char checksum, c;
|
|||
char fin_trame[]={'0','0'};
|
|||
int verifchecksum;
|
|||
while (uart0_rx()!='$'); //attente d'une trame
|
|||
//Reception trame dans buffer et calcul du checksum avec un OU exclusif sur chaque caract?re de la trame
|
|||
c=uart0_rx();
|
|||
while (c!='*'){
|
|||
buffer[i]=c;
|
|||
c=uart0_rx();
|
|||
i++;
|
|||
if ((buffer[i]!='$')&&(buffer[i]!='*')){
|
|||
checksum^= buffer[i]; //ou exclusif sur chaque caract?re de la trame
|
|||
}
|
|||
}
|
|||
//R?c?ption des 2 caract?res apr?s le * de la trame dans la cha?ne fin_trame (utile pour le checksum)
|
|||
while (j<2){
|
|||
fin_trame[j]= uart0_rx();
|
|||
j++;
|
|||
}
|
|||
//V?rification entre le checksum calcul? tout au long de la trame et celui calcul? par la converion du champ en hexa apr?s '*'
|
|||
verifchecksum = hex2int(fin_trame);
|
|||
//if (verifchecksum!=checksum){
|
|||
// i=0;
|
|||
//}
|
|||
return i;
|
|||
}
|
|||
/*int irectrame(char *buffer){
|
|||
int etat =1
|
|||
switch(etat){
|
|||
case 1: if (
|
|||
}
|
|||
}*/
|