Projet

Général

Profil

« Précédent | Suivant » 

Révision 898

Ajouté par anclaud il y a environ 4 ans

Fonction rectrame et checksum OK

Voir les différences:

branch/CLAUD/sp4c12/SP41c/SP41c/uart0.h
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] );
}
branch/CLAUD/sp4c12/SP41c/SP41c/DefaultSession.hsf
[WINDOW_POSITION_STATE_DATA_VD3]
[WINDOW_POSITION_STATE_DATA_VD4]
[WINDOW_Z_ORDER]
"D:\TP_sp4_CLAUD\sp4c12\SP41c\SP41c\uart0.c"
"D:\TP_sp4_CLAUD\sp4c12\SP41c\SP41c\uart0.h"
"D:\TP_sp4_CLAUD\sp4c12\SP41c\SP41c\uart0.c"
"D:\TP_sp4_CLAUD\sp4c12\SP41c\SP41c\ncrt0.a30"
[TARGET_NAME]
"" "" 1701667150
branch/CLAUD/sp4c12/SP41c/SP41c/SessionM32C_E8a_SYSTEM.hsf
"{55384715-F881-421C-A548-D7D1ABE158E1}PDMRCtrlViews" "0"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_DENORMAL_MODE" "0"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_EVAL_ROUND_MODE" "0"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_0" "00000000000000A7"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_1" "000000000000007A"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_10" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_11" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_12" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_13" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_14" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "0000000000FE0000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "000000000000C400"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_15" "0000000000000400"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_16" "0000000000FE0394"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_17" "0000000000FFFD00"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_18" "0000000000000652"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_19" "0000000000000A00"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_2" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_20" "0000000000000081"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_21" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_22" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_23" "0000000000000000"
......
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_33" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_34" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_35" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_4" "000000000000065E"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_5" "0000000000020000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_6" "0000000000000664"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_7" "0000000000000400"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_8" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_9" "0000000000000000"
"{64753FED-D387-4B8C-A91D-D3419C869C07}C_REGISTER_REG_COUNT" "36"
......
"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_SAMPLEING_RATE" "1000"
"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ECX_IMAGE_VIEW" "0,0,0,0,0,0"
"{AC411480-6F0A-11D5-8EB6-00004CC34E9D}ImageCtrlViews" "0"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchCtrlViews" "0"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchCtrlViews" "4"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth0" "120"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth1" "150"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth12" "150"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth2" "120"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ColWidth3" "200"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0000" "carac[2], 10, 0, P, Col, Hex, N"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0000_SCOPE" "Current Scope,"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0001" "nb_caractere, 10, 0, P, Col, Hex, N"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0001_SCOPE" "Current Scope,"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0002" "trame_ok, 1, 0, P, Col, Hex, MN"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEM0002_SCOPE" "Current Scope,"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd0ECX_WATCH_ITEMCnt" "3"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth0" "120"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth1" "150"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth12" "150"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth2" "120"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ColWidth3" "200"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd1ECX_WATCH_ITEMCnt" "0"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth0" "120"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth1" "150"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth12" "150"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth2" "120"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ColWidth3" "200"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd2ECX_WATCH_ITEMCnt" "0"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth0" "120"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth1" "150"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth12" "150"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth2" "120"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ColWidth3" "200"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWnd3ECX_WATCH_ITEMCnt" "0"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndInitial_Radix" "0"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndInstanceKey0" "{WK_00000001_WATCH}SP41cSessionM32C_E8a_SYSTEM"
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndRecentFile_WatchRecord" ""
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndRecentFile_WatchSave" ""
"{B266D880-6FA1-11D5-8613-00A024591A38}WatchWndUpdate_Interval" "100"
......
0
[WINDOW_POSITION_STATE_DATA_VD1]
"Help" "TOOLBAR 0" 59419 1 5 "0.00" 0 0 0 0 0 17 0 "" "0.0"
"{WK_00000001_CmdLine}" "WINDOW" 59422 0 2 "0.25" 180 0 0 350 200 17 0 "32771|32772|32778|<<separator>>|32773|32774|<<separator>>|32820|<<separator>>|32801|32824" "0.0"
"{WK_00000001_IO}SP41cSessionM32C_E8a_SYSTEM" "WINDOW" 59422 0 1 "0.49" 180 0 0 350 200 18 0 "32817|32826|32819|32820|32821" "0.0"
"{WK_00000001_OUTPUT}" "WINDOW" 59422 0 0 "0.51" 180 683 371 350 200 18 0 "36756|36757|36758|36759|<<separator>>|36746|36747|<<separator>>|39531|<<separator>>|39500|39534|<<separator>>|36687" "0.0"
"{WK_00000001_CmdLine}" "WINDOW" 59422 0 2 "0.20" 180 0 0 350 200 17 0 "32771|32772|32778|<<separator>>|32773|32774|<<separator>>|32820|<<separator>>|32801|32824" "0.0"
"{WK_00000001_IO}SP41cSessionM32C_E8a_SYSTEM" "WINDOW" 59422 0 3 "0.25" 180 0 0 350 200 18 0 "32817|32826|32819|32820|32821" "0.0"
"{WK_00000001_OUTPUT}" "WINDOW" 59422 0 1 "0.25" 180 683 371 350 200 18 0 "36756|36757|36758|36759|<<separator>>|36746|36747|<<separator>>|39531|<<separator>>|39500|39534|<<separator>>|36687" "0.0"
"{WK_00000001_WATCH}SP41cSessionM32C_E8a_SYSTEM" "WINDOW" 59422 0 0 "0.50" 180 0 0 350 200 18 0 "32781|32783|<<separator>>|32771|32829|32772|32827|32773|<<separator>>|32786|<<separator>>|32810|32811|32831" "0.0"
"{WK_00000002_WORKSPACE}" "WINDOW" 59420 0 0 "1.00" 259 683 371 350 200 18 0 "" "0.0"
"{WK_TB00000001_STANDARD}" "TOOLBAR 0" 59419 0 2 "0.00" 0 0 0 0 0 18 0 "" "0.0"
"{WK_TB00000002_EDITOR}" "TOOLBAR 0" 59419 0 0 "0.00" 0 0 0 0 0 18 0 "" "0.0"
branch/CLAUD/sp4c12/SP41c/SP41c/uart0.c
#include "sfr32c87.h"
#include "uart0.h"
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_2 = 0;
ps0_3 = 1;
}
void uart0_tx(char c)
{
while(!ti_u0c1);
u0tb = c;
}
char uart0_rx()
{
while(!ri_u0c1);
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 = 1;
int trame_ok;
int nb_caract = 0;
char char_recu;
char checksum = 0;
char checksum_fin_trame[2]; // Les 2 derniers caract?res de la trame
while(uart0_rx() != '$');
buffer[0] = '$';
while((char_recu = uart0_rx()) != '*')
{
buffer[i]= char_recu;
i++;
checksum = checksum ^ char_recu; // OU exclusif
}
buffer[i] = '*';
checksum_fin_trame[0] = uart0_rx();
checksum_fin_trame[1] = uart0_rx();
if (checksum == hex2int(checksum_fin_trame)){
trame_ok = 1;
}
else
{
trame_ok = 0;
}
nb_caract = i;
return nb_caract;
}
int hex2int(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] );
}
void main(void)
{
char c;
char buffer;
int i, nb_caractere;
uart0_init();
//c = '3';
//c = uart0_rx();
//uart0_tx(c);
while(1)
{
char trame[128];
c = uart0_rx();
uart0_tx(c);
nb_caractere = rectrame(trame);
for (i=0 ; i <= nb_caractere ; i++)
{
uart0_tx(trame[i]);
}
//alphabet();
}
// test hex2int (valid? sous codeblocks)
/*
char carac[2];
printf("saisir caractere :");
scanf("%c", &carac[0]);
scanf("%c", &carac[1]);
printf("%d", hex2int(carac));
*/
}

Formats disponibles : Unified diff