¿Los registros AVR y los puertos deben inicializarse a cero?

9

Durante la rutina de inicialización de mi código, lo uso para hacer cosas como:

clr    r0  ; will always stay zero

y:

out    PORTA, r0; initialize ports
out    DDRA, r0
out    PORTB, r0
...

¿Es esto realmente necesario? ¿O puedo estar seguro de que esto se hace automáticamente al reiniciar? Especialmente, ¿puedo confiar en que todos los puertos se configuren como entradas de forma predeterminada para que no haya problemas con las votaciones externas cuando no se ejecuta ningún código?

    

3 respuestas

6

Los puertos de E / S de un AVR se configuran en INPUT / Tri-State / Hi-Z (DDRx = 0x00) al reiniciarse. La mayoría de los microcontroladores (si no todos) tienen este comportamiento. Es el estado más seguro para un pin. Así que sí, puede confiar en los puertos que se configurarán automáticamente como entradas.

Algunos extractos y el ATmega16 muestran exactamente eso:

  

Los pines del Puerto C se establecen en tres cuando una condición de restablecimiento se activa,   incluso si el reloj no está funcionando.

    
respondido por el m.Alin
4
  • La inicialización del puerto SIEMPRE es una buena idea, independientemente de lo que diga la hoja de datos.

  • Si la hoja de datos no dice nada, entonces es una idea absolutamente vital.

Solo necesita definir el contenido de los datos del puerto si le importa lo que sucederá cuando su programa se ejecute.

Si no le importa el resultado, no tiene que configurar los bits de datos del puerto :-).

Si los fabricantes dicen explícitamente en las hojas de datos que los bits de datos del puerto están configurados o borrados, entonces pueden ser PERO, es TODAVÍA es una muy buena idea inicializarlos de todos modos. Las "condiciones de contorno" son donde la mayoría de las cosas van mal, por ejemplo, inicio de un bucle, final de un bucle, punto redondo de ajuste de la memoria intermedia circular, ... El arranque del procesador es un hardware equivalente. En un mundo real con ruidos, fallas y personas en él, ser realmente una buena idea es encargarse del destino de tus programas tanto como puedas. La inicialización del puerto es una parte fácil de esto.

    
respondido por el Russell McMahon
1

Ni los registros ni la SRAM se inicializan al reiniciar, solo algunos de los registros periféricos. Debes inicializar las cosas que usas.

    
respondido por el avakar

Lea otras preguntas en las etiquetas