¿Cómo funciona el registro BSRR?

1

En los GPIO de algunos microcontroladores basados en ARM, se le proporciona un registro BSRR en el que puede escribir para realizar cambios atómicos en un registro de salida de puertos.

Por ejemplo, para establecer Port A Bit 5 en 1 simplemente haces GPIOA->BSRR = (1<<5)

Esto alivia el problema de la atomicidad para que no tenga que realizar una secuencia de lectura-modificación-escritura. Sin el BSRR tendrías que hacer GPIOA->ODR |= (1<<5) .

¿Cómo funciona el registro BSRR bajo el capó? ¿Se borra solo para que la próxima vez que desee establecer un bit no quede el bit anterior todavía?

Si quisiera establecer el bit 2 y luego el bit 6, puedo hacer primero GPIOA->BSRR = (1<<2) y luego hacer GPIOA->BSRR = (1<<6) pero ¿el bit 2 todavía no se configurará desde mi llamada anterior?

    
pregunta Taako

1 respuesta

3

Hay es una especie de lectura-modificación-escritura, pero se realiza en lógica / hardware sin tiempo entre la lectura y la escritura. La declaración en Verilog sería:

GPIOA <= GPIOA | cpu_write_data;

Esto genera una lógica donde hay una puerta OR antes del registro y los nuevos datos se OR-OR con los datos antiguos y se almacenan en el registro. Los bits de datos que escribe y que son SET (alto) creará un 1 solo en esas ubicaciones. Todo el bit que escriba que esté claro (bajo) permanecerá sin cambios. Si se configuró el bit, permanece establecido, si el bit está claro, permanece limpio.

simular este circuito : esquema creado usando CircuitLab

Equivalente puede borrar bits utilizando:

GPIOA <= GPIOA & ~cpu_write_data;

Los bits de datos que escribe y que son SET (alto) creará un 0 solo en esas ubicaciones. Todos los demás bits permanecen sin cambios.

Se vuelve un poco más complejo tener todas estas operaciones de conjuntos de bits y de compensación de bits implementadas en paralelo en el mismo registro, pero eso es solo una cuestión de más lógica (multiplexores, decodificadores de direcciones, etc.)

    
respondido por el Oldfart

Lea otras preguntas en las etiquetas