Entienda la hoja de datos de Atmega168P

1

Estoy en el proceso de leer el documento mencionado anteriormente de aquí .

En la página 21, segundo párrafo en la sección 8.5 I/O Memory , la línea 6 se muestra a continuación:

  

Al usar los comandos específicos de E / S IN y OUT, se deben usar las direcciones de E / S 0x00 - 0x3F.

Sin embargo, en la página 224, fila 1 de la tabla, primera columna, Assembly Code Example tiene la última línea de la siguiente manera:

out TWCR, r16

Pero según la declaración de la página 21, la instrucción anterior es incorrecta ya que TWCR tiene la dirección de memoria 0xBC como se indica en la fila 6 de la página 39.

¿Hay algo mal aquí o lo entiendo mal?

Por favor ayuda.

Editar: archivo de definiciones

    
pregunta Babu James

1 respuesta

3

Lo estás entendiendo mal. Sí, TWCR tiene una dirección memoria de 0xBC, pero esa no es su dirección IO.

Hay dos formas de acceder al puerto: a través de IO y a través de la memoria. En C, cuando asigna un valor a esa dirección, cambia la dirección para que sea la dirección IO en su lugar y utiliza una instrucción de entrada o salida en lugar de instrucciones de carga o almacenamiento.

- editar -

Mirando el archivo de definiciones que has publicado, hay un poco de esto:

; ***** I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions
....
.equ    TWCR    = 0xbc  ; MEMORY MAPPED

Sospecho que la hoja de datos es incorrecta. No sería sorprendente que toda la sección sobre el TWI se haya copiado literalmente de otra hoja de datos cuya interfaz TWI está asignada a IO no asignada a la memoria, como ATMega32. No es raro.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas