¿Puede alguien explicarme detalladamente sobre DDRx, PORTx, PINx en AVR?

-1

Bueno, esta podría ser una pregunta realmente tonta, pero realmente no entiendo estos 3, Mi principal confusión es, ¿por qué necesitamos tres de ellos? ¿Por qué no podemos r / w en el puerto como el registro normal? (Por favor, no votes abajo). Y también de buscar en la web, alguien menciona la resistencia de pullups, y ahora estoy muy confundido ...

    
pregunta Sumanto Dinar

2 respuestas

3

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.

    
respondido por el vicatcu
0

DDR controla la habilitación de salida en las etapas del controlador.

PORT controla la señal de entrada para las etapas del controlador.

PIN está conectado a la salida del comparador entre el pin y el voltaje de referencia.

En principio, sería posible combinar PORT y PIN con un montón de puertas adicionales, pero no hay nada que ganar con eso.

    
respondido por el Simon Richter

Lea otras preguntas en las etiquetas