Konfigurieren der Ports eines AVR-Mikrocontrollers für die SPI-Verwendung

Ich versuche, einen ATtiny84A für die Verwendung mit SPI zu konfigurieren, aber ich habe einige Verwirrung mit dem, was im Datenblatt zur Konfiguration der Ports gesagt wird. Der ATtiny84A hat, wie das Datenblatt nennt, "alternative Portfunktionen", sodass jeder Port mehrere Funktionen haben kann. In meinem Fall mit SPI dient der Pin, der die SPI-Uhr bedient, unter anderem auch der GPIO-Funktionalität des Ports, einem ADC, der Uhr für I2C (wie auf Seite 64 des Datenblatts zu sehen: Port A, Bit 4).

Was ich aus dem, was im Datenblatt steht, verstehe, ist, dass es den Port irgendwie automatisch konfiguriert, wenn eine Funktionalität festgelegt wird. Was passiert also, wenn ich versuche, mehrere dieser Portfunktionen gleichzeitig zu konfigurieren? Was ist zum Beispiel, wenn ich den ADC auf Port A4 und SPI konfiguriere, dessen Taktquelle auf Port A4 liegt? Ich kann keine Tabelle finden, die explizit angibt, wie der Port konfiguriert wird, der andere Funktionen aktiviert oder deaktiviert, also stelle ich mir vor, dass eine Art Funktionspriorität genommen wird?

Wo sind außerdem die Informationen zum Einstellen des Richtungsregisters, um den SPI-Takt durchzulassen? Das verwirrt mich, denn wie gesagt scheint das Datenblatt zu sagen, dass der Port automatisch konfiguriert wird; Damit ich die Uhr jedoch durch Port A4 leiten kann, muss ich eine 1 in das Richtungsregister schreiben (als Ausgang festlegen), damit die Taktquelle herauskommt, aber ich kann im Datenblatt keine Informationen finden, die dieses Verhalten untermauern .

Hier ist ein Beispielcode, um eine kontinuierliche Uhr aus dem SPI-Taktport zu bekommen:

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.
}

BEARBEITEN: Ich fasse die Informationen zusammen, über die ich speziell verwirrt bin / nicht weiß, was ich aus dem Datenblatt machen soll:

Tabelle 10-2, Seite 60: Ich bin mir nicht sicher, welchen Zweck diese überschreibenden Signale bei der Konfiguration alternativer Portfunktionen haben.

Tabelle 10-5, Seite 64: Ich sehe die USI-Uhr in dieser Tabelle, aber ich weiß nicht, was die restlichen darin enthaltenen Informationen mir sagen. Ich sehe, dass sich USCK in der DI-Zeile befindet, aber ich weiß nicht, was mir das über die Konfiguration des Ports sagt.

Möglicherweise müssen Sie den genauen Link zu dem Datenblatt angeben, auf das Sie sich beziehen. Es gab eine Reihe von Überarbeitungen und es gibt ein paar verschiedene Formen von jedem Datenblatt. Auf dem neuesten Datenblatt (von MicroChip.com) sehe ich die Artikel, auf die Sie sich beziehen, nicht
@Nedd guter Punkt, es scheint, dass das Datenblatt, das ich habe, eine andere Version ist. Ich werde die Frage mit den Seitenzahlen und Tabellenzahlen aus dem Datenblatt aktualisieren, das derzeit auf der Mikrochipseite für den ATtiny84 aufgeführt ist.

Antworten (1)

Ich glaube, das ist die Antwort, die Sie suchen. Es steht auf Seite 130.

Geben Sie hier die Bildbeschreibung ein