Révision 898
Ajouté par anclaud il y a environ 4 ans
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
Fonction rectrame et checksum OK