Escogieron agrupar los bits de control en registros por función. Solo necesitan tres bits de control por pin. Usar un registro por pin es un desperdicio, y con 8 pines por puerto, necesitaría 24 bits de estado de control, que vale 3 registros, de todos modos. Ellos meten eso en dos registros al contextualizar el significado de los bits PORT. Agruparlo de manera diferente también podría ser un software feo de bajo nivel.
Los bits admiten directamente la ruta de datos para un pin de E / S. El DDR es el registro de dirección de datos.
Si un bit DDR es alto, el pin se configura como una salida y el valor del bit PORT correspondiente establece el valor del pin HIGH o LOW.
Si un bit DDR está bajo, el pin se configura como una entrada, y si se establece el bit PORT correspondiente, se habilita una resistencia de pull-up interna; de lo contrario, el pin está flotando sujeto a circuitos externos. En cualquier caso, el bit PIN correspondiente refleja el estado lógico del pin, ALTO o BAJO.
Si lees suficiente código avr-gcc, verás mucho uso si la macro _BV construye máscaras de bits, lo que puede ser una forma útil de manipular un puerto completo de 8 bits con estado en una instrucción para una funcionalidad paralela .
Actualizar a solicitud de aclaración
Para cada pin, debe codificar el siguiente estado de control en la arquitectura AVR8.
- si el pin está configurado como entrada o salida
- para la entrada, si la resistencia de extracción interna está habilitada o no.
- para la salida, qué valor se debe dirigir al pin
- para la entrada, qué valor binario está en el pin
No hay forma de codificar toda esa información en un bit por pin. Ya comprimen parte de ese estado al contextualizar el significado de los bits del PUERTO según los bits DDR correspondientes.
¿Podría ser codificado de manera diferente? Claro, pero la arquitectura es lo que es en hardware. Debe comprender el diagrama de bloques de pines de E / S en la hoja de datos para comprenderlo completamente. Al hacerlo, debe quedar claro cómo estos bits de control para cada pin influyen en la ruta de datos.
Los bits de PIN no son realmente bits de control. Juntos, tres estados de control están codificados por dos bits por pin entre los registros DDR y PORT.