Soy un novato y estoy tratando de entender cómo funciona un registro particular (en lpc1347). Tal vez sea un problema común, tal vez es específico para placas lpc Me gustaría saber cómo funcionan los registros GPIO y PININT, así que empecé a aprender el manual lpc1347, pero estoy atascado en el punto mientras cambio el registro GPIO. Tomemos, por ejemplo, el registro GPIO llamado NOT, que cambia un pin a estado opuesto. Puedo modificarlo de dos maneras:
pointerToGPIO->NOT[0] |= 1 << pin;
o
pointerToGPIO->NOT[0] = 1 << pin;
NOTA: ambos funcionan correctamente. La primera forma se llama (seguramente) lectura-modificación-escritura, porque debo leer NO registrar, hacer O operación y guardarla. La segunda forma es guardar la máscara de pin directamente. He hecho una investigación simple y LPCOpen utiliza la segunda forma:
STATIC INLINE void Chip_GPIO_SetPinToggle(LPC_GPIO_T *pGPIO, uint8_t port,
uint8_t pin)
{
pGPIO->NOT[port] = (1 << pin);
}
Por supuesto, hay varios registros en el GPIO que debo modificar con máscaras OR / AND ... Mi pregunta es ¿Cómo puedo saber cuándo no tengo que hacer la operación de RMW y modificar el registro directamente? He buscado en el manual, pero no encontré ninguna mención de cómo distinguirlo. ¿Es alguna receta cómo hacerlo correctamente? ¿Debería el manual decirme la verdad o esto es un conocimiento general de cómo distinguirlo?