Estoy tratando de trabajar en UART para AVR. Después de configurar los registros de velocidad en baudios UBRRnX, estoy tratando de configurar el registro UCSRnA.
Estoy tratando de configurar el segundo bit, U2XO. ¿Cuál es la forma correcta de hacerlo?UCSR0A = (1 << U2X0)
o
UCSR0A = UCSR0A | (1 << U2X0)
( Observe el operador OR en la segunda declaración )
En este caso:
UCSR0A = (1 << U2X0);
1<<U2XO = 00000010
, 1 se desplaza a la izquierda a la posición U2XO, por lo que cuando le da este valor a UCSR0A, el contenido del registro será:
UCSR0A = 00000010
Esta operación establecerá todos los bits en 0 excepto el U2X0, por ejemplo, si RXC0 se hubiera establecido en 1 , entonces esta operación lo borraría en 0 . Si no está al tanto de esto, eso podría causarle algún dolor de cabeza más adelante.
En este:
UCSR0A = UCSR0A | (1 << U2X0);
que es igual a esto:
UCSR0A |= (1<<U2X0);
Aquí configura solo el segundo bit a uno y deja el resto sin cambios, lo cual es preferible, porque no cambiará algo accidentalmente. El contenido será:
// UCSRA0 = xxxxxxxx before operation something is in the register
UCSR0A = UCSR0A | (1 << U2X0); // OR current with 00000010
// UCSRA0 = xxxxxx1x something OR 1 will be 1
donde x
es el valor sin cambios/anterior del bit. Si x
es 1, 1 O 0 seguirá siendo 1 y si x
es 0, 0 O 0 seguirá siendo 0 .
Así que sugiero la segunda manera, porque de esa manera es más fácil rastrear qué bit está configurado y cuál no, y no cambiará la configuración aplicada previamente por error.
am3
Bence Kaulics
Ignacio Vázquez-Abrams
Bence Kaulics