Acceso GPIO en Cortex-M4: Lectura-Modificación-Escritura vs Atomic

Recientemente me encontré con la función de banda de bits en el núcleo Cortex-M4 y cómo proporciona una solución para evitar condiciones de carrera al alternar bits de registros. El M4 también tiene un registro BSRR dedicado para realizar la manipulación de bits atómicos en los puertos GPIO, entiendo que usar esto hace que la aplicación sea segura para subprocesos

¿Hay alguna desventaja en este enfoque en comparación con el método de lectura-modificación-escritura generalmente utilizado para alternar pines GPIO? Si no, ¿por qué se proporcionan registros GPIO_ODR para los núcleos de cortex-m? .

Tome este caso: ¿alternar 8 pines (puede ser un puerto en total) al mismo tiempo? ¿Cual es mas rápido?
@ammar.cma el BSRR/BRR puede cambiar hasta 16 bits a la vez si están en el mismo puerto. Pero lo que estos registros no pueden permitir es transferir datos arbitrarios con una instrucción fija eficiente.

Respuestas (2)

Supone que todas las operaciones en los puertos IO están a nivel de bit. Escribí una interfaz LCD externa hace un tiempo que usaba Px0..Px7 para la interfaz de datos y Px8 para el control de escritura. Esto me permitió transmitir directamente un píxel (color de 16 bits) a la pantalla usando una secuencia de cuatro escrituras GPIO_ODR. Si hubiera usado BSRR, habría tenido que traducir los datos de píxeles sin procesar en máscaras de bits para ese registro. Esto habría ralentizado las cosas significativamente.

No especificó la MCU particular en cuestión, pero el registro BSRR es específico para las piezas ST Micro Cortex-M.

El registro BSRR proporciona una funcionalidad similar a la función de banda de bits que forma parte de la arquitectura Cortex-M con respecto a la operación atómica.

En cuanto a si el bit-banding tiene una desventaja en comparación con leer, modificar y escribir, el principal inconveniente es que solo pueden manipular un bit a la vez.

Tenga en cuenta que, a diferencia de las bandas de bits basadas en direcciones, BSRR y BRR permiten operaciones de bits múltiples, ya que operan con máscaras de bits.
Los puertos GPIO que Arm licencia con Cortex-M tienen una máscara integrada en la dirección del puerto, por lo que puede realizar una escritura atómica de los bits del puerto con una sola operación. El único proveedor que conozco que usa el diseño Arm GPIO es TI, aunque NXP lo hace de manera similar. Energy Micro/Silabs tiene puertos con registros set/clear.