Configuración de los puertos de un microcontrolador AVR para uso SPI

Estoy tratando de configurar un ATtiny84A para usar con SPI, pero tengo cierta confusión con lo que se dice en la hoja de datos para configurar los puertos. El ATtiny84A tiene lo que la hoja de datos llama "funciones de puerto alternativo", por lo que cada puerto puede tener múltiples funciones. En mi caso con SPI, el pin que sirve para el reloj SPI también sirve para la funcionalidad de los puertos GPIO, un ADC, el reloj para I2C, entre otros (como se ve en la página 64 de la hoja de datos: Puerto A, Bit 4).

Lo que entiendo por lo que dice en la hoja de datos es que de alguna manera configura automáticamente el puerto cuando se establece una funcionalidad. Entonces, ¿qué sucede si trato de configurar varias de estas funciones de puerto a la vez? Por ejemplo, ¿qué sucede si configuro el ADC en el puerto A4 y el SPI que tiene su fuente de reloj en el puerto A4? No puedo encontrar una tabla que indique explícitamente cómo configurar el puerto que habilita o deshabilita otras funcionalidades, así que me imagino que se toma algún tipo de prioridad de función.

Además, ¿dónde está la información sobre cómo configurar el registro de dirección para permitir el paso del reloj SPI? Esto me confunde, porque como dije, la hoja de datos parece decir que el puerto se configura automáticamente; sin embargo, para que pueda canalizar el reloj a través del puerto A4, debo escribir un 1 en el registro de dirección (establecerlo como una salida) para que salga la fuente del reloj, pero no puedo encontrar ninguna información en la hoja de datos para respaldar este comportamiento .

Aquí hay un código de muestra para obtener un reloj continuo que sale del puerto de reloj SPI:

USICR   |=  (1 << USIWM0);  // Set Bit 4 (USIWM0) of the USICR register
USICR   &=~ (1 << USIWM1);  // Clear Bit 5 (USIWM1) of the USICR register

USICR   &=~ (1 << USICS0);
USICR   |=  (1 << USICS1);
USICR   |=  (1 << USICLK);  //Sets USITC as the clock source for the 4 bit counter.

DDRA |= (1 << DDA4); // Configure PortA4 as an output?

while(1)
{
    USICR |= (1 << USITC); // Toggle the SPI clock output.
}

EDITAR: resumiré la información sobre la que estoy específicamente confundido/no sé qué hacer con la hoja de datos:

Tabla 10-2, página 60: No estoy seguro de cuál es el propósito de estas señales de anulación al configurar funciones de puertos alternativos.

Tabla 10-5, página 64: Veo el reloj USI en esta tabla, pero no sé qué me dice el resto de la información que contiene. Veo que USCK está en la fila DI, pero no sé qué me dice eso para la configuración del puerto.

Es posible que deba proporcionar el enlace exacto a la hoja de datos a la que hace referencia. Ha habido una serie de revisiones y hay algunas formas diferentes de cada hoja de datos. En la hoja de datos más reciente (de MicroChip.com) no veo los elementos a los que hace referencia
@Nedd buen punto, parece que la hoja de datos que tengo es una versión diferente. Actualizaré la pregunta con los números de página y de tabla de la hoja de datos que aparece actualmente en la página de microchips para el ATtiny84.

Respuestas (1)

Creo que esta es la respuesta que buscas. Está en la página 130.

ingrese la descripción de la imagen aquí