Frédéric Praca
2015-07-26 11:41:37 UTC
Bonjour à tous en ce dimanche pluvieux (au moins chez moi),
je suis confronté à un problème lié aux clauses de représentation et à
l'affectation d'une valeur dans une des composantes de l'enregistrement
concerné.
La définition de l'enregistrement est la suivante :
type Control_Register_1 is
record
Send_Break : Boolean;
Receiver_WakeUp : Boolean;
Receiver_Enable : Boolean;
Transmitter_Enable : Boolean;
IDLE_Interrupt_Enable : Boolean;
RXNE_Interrupt_Enable : Boolean;
Transmission_Complete_Interrupt : Boolean;
TXE_Interrupt_Enable : Boolean;
PE_Interrupt_Enable : Boolean;
Parity_Selection : Parity;
Parity_Control_Enable : Boolean;
WakeUp_Method : Wakeup_Methods;
Length : Word_Length;
USART_Enable : Boolean;
Oversampling_Mode : Oversampling_Modes;
end record with Size => 32;
for Control_Register_1 use
record
Send_Break at 0 range 0 .. 0;
Receiver_WakeUp at 0 range 1 .. 1;
Receiver_Enable at 0 range 2 .. 2;
Transmitter_Enable at 0 range 3 .. 3;
IDLE_Interrupt_Enable at 0 range 4 .. 4;
RXNE_Interrupt_Enable at 0 range 5 .. 5;
Transmission_Complete_Interrupt at 0 range 6 .. 6;
TXE_Interrupt_Enable at 0 range 7 .. 7;
PE_Interrupt_Enable at 0 range 8 .. 8;
Parity_Selection at 0 range 9 .. 9;
Parity_Control_Enable at 0 range 10 .. 10;
WakeUp_Method at 0 range 11 .. 11;
Length at 0 range 12 .. 12;
USART_Enable at 0 range 13 .. 13;
Oversampling_Mode at 0 range 15 .. 15;
end record;
Lorsque que j'essaye de mettre à True le champ Receiver_Enable qui se
trouve être le 3ème bit du premier octet, automagiquement, le 3ème bit du
second octet passe à True.
Le seul moyen d'obtenir les bonnes valeurs dans mon registre est de
passer par une initialisation complète du registre par aggrégat.
Qu'est-ce que je n'ai pas compris ou pas lu ?
Fred
je suis confronté à un problème lié aux clauses de représentation et à
l'affectation d'une valeur dans une des composantes de l'enregistrement
concerné.
La définition de l'enregistrement est la suivante :
type Control_Register_1 is
record
Send_Break : Boolean;
Receiver_WakeUp : Boolean;
Receiver_Enable : Boolean;
Transmitter_Enable : Boolean;
IDLE_Interrupt_Enable : Boolean;
RXNE_Interrupt_Enable : Boolean;
Transmission_Complete_Interrupt : Boolean;
TXE_Interrupt_Enable : Boolean;
PE_Interrupt_Enable : Boolean;
Parity_Selection : Parity;
Parity_Control_Enable : Boolean;
WakeUp_Method : Wakeup_Methods;
Length : Word_Length;
USART_Enable : Boolean;
Oversampling_Mode : Oversampling_Modes;
end record with Size => 32;
for Control_Register_1 use
record
Send_Break at 0 range 0 .. 0;
Receiver_WakeUp at 0 range 1 .. 1;
Receiver_Enable at 0 range 2 .. 2;
Transmitter_Enable at 0 range 3 .. 3;
IDLE_Interrupt_Enable at 0 range 4 .. 4;
RXNE_Interrupt_Enable at 0 range 5 .. 5;
Transmission_Complete_Interrupt at 0 range 6 .. 6;
TXE_Interrupt_Enable at 0 range 7 .. 7;
PE_Interrupt_Enable at 0 range 8 .. 8;
Parity_Selection at 0 range 9 .. 9;
Parity_Control_Enable at 0 range 10 .. 10;
WakeUp_Method at 0 range 11 .. 11;
Length at 0 range 12 .. 12;
USART_Enable at 0 range 13 .. 13;
Oversampling_Mode at 0 range 15 .. 15;
end record;
Lorsque que j'essaye de mettre à True le champ Receiver_Enable qui se
trouve être le 3ème bit du premier octet, automagiquement, le 3ème bit du
second octet passe à True.
Le seul moyen d'obtenir les bonnes valeurs dans mon registre est de
passer par une initialisation complète du registre par aggrégat.
Qu'est-ce que je n'ai pas compris ou pas lu ?
Fred