STM32F0 GPIOx_ODR vs GPIOx_BSRR

2

Aparte de la estructura de registro, ¿cuál es la diferencia entre GPIOx_ODR y GPIOx_BSRR?
¿Es GPIOx_BSRR una capa de abstracción para GPIOx_ODR? Sé que un cambio en GPIOx_BSRR "cambiará" el GPIOx_ODR pero, ¿cómo y cuáles son las diferencias?

Más información:

  • registra la página de descripción-162 de STM32F0advanced ARM.pdf
  • MCU STM32F051R8
  • Tablero STM32F0DISCOVERY
  • compilador arm-none-eabi-gcc -v gcc versión 4.8.3
pregunta Hugo

1 respuesta

5

El BSRR tiene campos de bits que le permiten establecer y borrar bits en un puerto de forma atómica, sin una operación de lectura-modificación-escritura. En lugar de leer el valor ODR, ordenarlos con los bits para establecerlos y volver a escribirlos, simplemente realice una única escritura de 32 bits en el BSRR para establecer o solo los bits relevantes.

Esto a menudo significa que no tiene que deshabilitar las interrupciones o usar otras protecciones de concurrencia cuando se utiliza el BSRR, y resulta en un código más pequeño y más rápido para las operaciones de twiddling de bits.     

respondido por el Colin D Bennett

Lea otras preguntas en las etiquetas