R8C/1B problème de reception uart1

Postby gatsby94 » Fri Aug 24, 2007 12:00 am

salut j'ai un problème de reception avec l'uart1 du R8C/1B.

volà j'ai un clavier avec le même micro qui envoi des travail à partir du UART1 voici le code ça marche nikel:

/**********************************************************************/
/* Transfert du scenario par defaut */
/**********************************************************************/

void transfert_scenario_defaut(void)
{
while (trn_cnt != (req_cnt) & flag_transmission == 0)
{

if (flag_transmission == 1)
{ // In transmission ?
if (ir_s0tic == 1)
{ // Transmission completed ?
ir_s0tic = 0; // Clear of the serial transmission flag
flag_transmission = 0; // Transmission completed
te_u0c1 = 0; // Transmission disabled
}
// Set a send data to send register from send data buffer
}
else
{
// Transmission completed counter = Request counter
u0tbl = trame[trn_cnt]; // Set transmission data
te_u0c1 = 1; // Transmission enabled
flag_transmission = 1; // Set transmission flag
trn_cnt += 1;
// Transmission completed counter +1
}
}
trn_cnt = 0; // Transmission counter clear
req_cnt = 0;
}

/***********************************************************************/
/* init_uart1_claivier_d_envoi */
/***********************************************************************/

void init_uart1(void)
{
u1mr = 0x05;
u1c0 = 0x00;
u1brg = 51; 9600 avec clock interne sans quartz
u1c1 = 0x01;
ucon = 0x30;
}


mais sur la carte de reception je ne comprens pas l'uart1 rentre en reception tout le temps sans que j'ai envoyé des données a partir du clavier. Et je n'ai pas mi dans les registres de config "recpetion continue".
voici le code de reception de la carte :

/*-----------------------initialisation-UART1--------------------*/

void init_uart(void)
{
u1mr = 0x05;
u1c0 = 0x08;
u1brg = 0x5F; 9600 avec clock interne avec quartz 14,7456MHz F1
u1c1 = 0x07;
ucon = 0xB0;

s1tic = 0;
ilvl1_s1ric = 1;
ir_s1ric = 0;
}

#pragma INTERRUPT reception_trame

void reception_trame(void)
{
while (ir_s1ric == 0);
{
ir_s1ric = 0;
ilvl1_s1ric = 0;
ilvl2_s1ric = 1;
tab_reception_emission[pointeur_trame] = u1rbl;
re_u1c1 = 1;
pointeur_trame ++;
temp_fin_trame = 10000;
flag_reception = 1;
}
}


;---------------------------------------------------------------
; variable vector section
;---------------------------------------------------------------
.section vector,ROMDATA ; variable vector table
.org VECTOR_ADR
.glb _ittimerC_cmp1
.glb _ittimerC_cmp0
.glb _reception_trame

.lword dummy_int ; vector 0
.lword dummy_int ; vector 1
.lword dummy_int ; vector 2
.lword dummy_int ; vector 3
.lword dummy_int ; vector 4
.lword dummy_int ; vector 5
.lword dummy_int ; vector 6
.lword dummy_int ; vector 7
.lword dummy_int ; vector 8
.lword dummy_int ; vector 9
.lword dummy_int ; vector 10
.lword dummy_int ; vector 11
.lword dummy_int ; vector 12
.lword dummy_int ; vector 13
.lword dummy_int ; vector 14
.lword dummy_int ; vector 15
.lword _ittimerC_cmp1 ; vector 16
.lword dummy_int ; vector 17
.lword dummy_int ; vector 18
.lword dummy_int ; vector 19
.lword _reception_trame ; vector 20
.lword dummy_int ; vector 21
.lword dummy_int ; vector 22
.lword dummy_int ; vector 23
.lword dummy_int ; vector 24
.lword dummy_int ; vector 25
.lword dummy_int ; vector 26
.lword dummy_int ; vector 27
.lword _ittimerC_cmp0 ; vector 28
.lword dummy_int ; vector 29
.lword dummy_int ; vector 30
.lword dummy_int


est ce quelque chose cloche pour vous dans mon code.
Merci d'avance.
gatsby94
 
Posts: 29
Joined: Fri Jan 17, 2014 4:38 pm

Postby sda » Fri Aug 24, 2007 12:00 am

Bonjour,

Je programme également sur un R8C1B, je suis parti avec un projet pré-défini sous HEW.
Pour les interruption je déclare de cette façon :

// uart1 receive (software int 20)
#pragma interrupt _uart1_receive(vect=20)
void _uart1_receive(void){}

pour le reste du code, ça m'a l'air correct.

Il y a une autre possibilité : sur l'entrée RX un front descendant (glitch ou perturbation) provoque un faux start bit...

SDA
sda
 
Posts: 24
Joined: Fri Jan 17, 2014 4:38 pm

Postby gatsby94 » Fri Aug 24, 2007 12:00 am

effectivement ça peut etre ça mais ce qui est bizarre c que lorsque je met un point d'arret dans la fonction d'interruption de reception il rentre dans le point d'arret sans donnée envoyées . puis je vaisun go pour qu'il continue et op il rentre de nouveau sans que j'ai aucune donnée envoyé.

autrement je fais comment pourchanger le front comme tu dis c dans le registre U1C0 bit CKPOL c ça?
gatsby94
 
Posts: 29
Joined: Fri Jan 17, 2014 4:38 pm

Postby gatsby94 » Fri Aug 24, 2007 12:00 am

au fait un glitch je veux ben mais à l'oscillo je n'ai aucun passage de 1 à 0 et pourtant je rentre bien dans l'interruption en permanence. JE me tire les cheveux depuis hier là dessus alors que c d'une simplicité normalement. Helpppppp
gatsby94
 
Posts: 29
Joined: Fri Jan 17, 2014 4:38 pm

Postby gatsby94 » Fri Aug 24, 2007 12:00 am

une dernière chose . Lorsque je regarde le registre s1ric en pas à pas lors de uart1_init j'ai beau avoir mis ir_s1ric à 0 il reste à 1 dans le registre. Donc en effet si il est à 1 il a une interruption pour le micro mais impossible de le mettre à 0 il reste à 1 koi que je fasse.
Qqun aurait il une idée ?
gatsby94
 
Posts: 29
Joined: Fri Jan 17, 2014 4:38 pm

Postby sda » Fri Aug 24, 2007 12:00 am

Re bonjour,

suite à tes postes voila une petite confirmation que tes init semble OK (commentaire sur tes registres).

Pour remettre le flag ri de u1c1 tu dois lire u1rb ex :
uchar dummy = u1rb;
Je fais cela après avoir initialisé les registres de l'uart... Essaye, on sait jamais?


SDA



u1mr = 0x05; //00000101
//||||||||__ 101=UART mode transfer data 8 bits long
//|||||_____ Internal clock
//||||______ 1 stop bit
//|||_______ Odd parity
//||________ Parity disabled
//|_________ Set to 0

u1c0 = 0x08; //00001000
//||||||||__ 00=Selects f1
//||||||____ set to 0
//|||||_____ Transmit register empty flag : No data in transmit register (transmit completed)
//||||______ set to 0
//|||_______ TXD1 pin is for CMOS output
//||________ CLK polarity select bit (not used then 0)
//|_________ LSB first

u1brg = 0x5F; 9600 avec clock interne avec quartz 14,7456MHz F1

u1c1 = 0x07; //Enable transmit and receive

ucon = 0xB0; //10110000
//||||||||__ Transmit buffer empty (UART0)
//|||||||___ Transmit buffer empty (UART1)
//||||||____ Disables continuous receive mode
//|||||_____ Set to 0
//||||______ TXD1,RXD1
//||________ Set to 0
//|_________ P1_5/RXD0/CNTR01/INT11/P1_7
sda
 
Posts: 24
Joined: Fri Jan 17, 2014 4:38 pm

Postby gatsby94 » Fri Aug 24, 2007 12:00 am

re
effet ms registres sont bons.
Mais je ne comprend c que tu direpar ir de U1C1 en lisant u1rb

il faut faire comme ça ?
explique moi

void init_uart(void)
{
unsigned char dummy = u1rb;
u1mr = 0x05; /* pas de parité / 1 stop / clock interne / 8 bits*/
u1c0 = 0x08; /* LSB first, clock f1 (14,7456MHz)*/
u1brg = 0x5F; /* 9600 bauds (=[f1 /(16*9600)]-1)*/
u1c1 = 0x07; /* Reception et emission autorisées.*/
ucon = 0xB0;
dummy = u1rb;
DISABLE_IRQ
s1ric = 0x09;


ENABLE_IRQ;

}
gatsby94
 
Posts: 29
Joined: Fri Jan 17, 2014 4:38 pm

Postby sda » Fri Aug 24, 2007 12:00 am

Page 157 (ref renesas) ou page 173 du PDF de la doc renesas du R8C1a1b (paragraphe 15, fig. 15.6) il y a une note qui dit :

The RI bit is set to 0 when the higher byte of the UiRB register is read out.

Fais la lecture à la fin de tes initialisations, mais vue comme tu as fais ça devrait suffir.
Par contre tu ne doit pas écrire 0x09 dans s1ric car le flag ir (bit3 de s1ric) ne doit être écrit que à 0. Donc s1ric = 0x08;

void init_uart(void)
{

unsigned char dummy;

u1mr = 0x05; /* pas de parité / 1 stop / clock interne / 8 bits*/
u1c0 = 0x08; /* LSB first, clock f1 (14,7456MHz)*/
u1brg = 0x5F; /* 9600 bauds (=[f1 /(16*9600)]-1)*/
u1c1 = 0x07; /* Reception et emission autorisées.*/
ucon = 0xB0;

DISABLE_IRQ
s1ric = 0x08;
ENABLE_IRQ;

dummy = u1rb;
}
sda
 
Posts: 24
Joined: Fri Jan 17, 2014 4:38 pm

Postby sda » Fri Aug 24, 2007 12:00 am

Excuse, petite erreur de ma part, dummy doit être de type entier :

unsigned int dummy; //au lieu de usigned char
sda
 
Posts: 24
Joined: Fri Jan 17, 2014 4:38 pm

Postby gatsby94 » Fri Aug 24, 2007 12:00 am

j'ai fait ce que tu m'as dit mais je rentre encore tout le temps dans _reception_trame et le bit de s1ric de veut jamais ce mettre à 0 qd n lui dit de se mettre à 0 c incroyable.

une parenthèse : tu disais de ne pas mettre à 1 le bit 3 de s1ric donc ce n'est pas 0x08 qu'il faut mettre mais 0x01.

voilà je n'y comprend pour rentre iltoujours la dedans vraiment un problème bloquant en plus à chaque fois il recoit 0x81 c etrange alors que je n'envoi rien et qu'il y a un Signal 5v en permanence sur loscillo sur l'entrée RXD1.
gatsby94
 
Posts: 29
Joined: Fri Jan 17, 2014 4:38 pm

Next

Return to R8C/13 (01-2006)

Who is online

Users browsing this forum: No registered users and 1 guest

cron