zum Directory-modus

PIC-Controller-Schnittstellen

SSP-Modul im I²C-Modus

Werden zwei oder mehrere Mikrocontroller miteinander verbunden, so muss einer als Master und der andere als Slave konfiguriert werden. Dies geschieht wiederum im SSPCON-Register. Wird das Bit 2 gesetzt, so ist das Modul für den Slave-Betrieb konfiguriert. Dem Master obliegt es stets, die Initiative zu einer Kommunikation zu ergreifen. Außerdem ist es der Master, der in der Regel den Clocktakt (SCK) ausgibt. Peripheriebausteine fungieren normalerweise als Slaves. Sie werden vom Master aufgefordert, Daten abzugeben oder Daten zu empfangen. Es ist ein üblicher Fall, dass ein Master mehrere Slaves besitzt. Es gibt aber auch Multimasteranwendungen. Generell muß bei Master-Slave Anordnungen beachtet werden, dass beide die gleiche Clockpolarität haben (CKP). Da wie gesagt der Master den Clocktakt (SCK) bestimmt, kann er den Zeitpunkt des Beginns des Datentransfers selbst bestimmen. Der SCK braucht aber nur auf Output konfiguriert zu sein, wenn der Master auch an den Slave sendet. Ansonsten kann das Bit 3 des TRISC-Registers auf 1 gesetzt werden. Beim Slave muss der SCK auf Input konfiguriert sein. Dies geschieht im TRISC-Register durch Löschen von Bit 3. Erwähnt werden muss noch der RA5/SS-Pin, der den Betrieb im synchronen Slave Mode ermöglicht. Dazu muss die Schnittstelle im SSPCON-Register als Slave konfiguriert sein und das TRISA<5> Bit muss gesetzt sein, damit der synchrone Slave Mode aktiviert ist. Wenn der SS-Pin low ist, sind Emfang und Senden möglich und der SDO-Pin wird angesteuert. Wenn der SS-Pin hochgeht, wird der SDO-Pin nicht mehr angesteuert, auch wenn das aktuelle Byte noch nicht übertragen ist.

I²C-Modus

Der I²C-Modus (Inter-Integrated Circuit) dient hauptsächlich zur Ankopplung von seriellen EEPROM und Uhrenbausteinen. Bei dieser Schnittstelle, die von Philips Corporation als zweidrähtige Schnittstelle entwickelt wurde, sind zusätzlich noch Start-, Stop-bzw. Acknoledge-Prozeduren zu senden bzw. zu empfangen. Wenn Daten gesendet werden, ist ein Gerät Master und die übrigen werden als Slaves konfiguriert. Alle Teile des Slave-Protokolls sind in der Hardware des SSP-Moduls implementiert, während Teile des Master-Protokolls softwaremäßig adressiert werden müssen. Jedes Gerät hat dabei seine eigene Adresse. Um eine Sendung zu initialisieren, sendet der Master zunächst die Adresse des Gerätes, an das er die Daten senden will. Jedes Gerät prüft dabei, ob es seine Adresse ist. In dem Adresscode spezifiziert ein Bit, ob der Master lesen/schrieben will, und zwar von dem Gerät oder auf das Gerät. Entweder der Master sendet, dann empfängt der Slave, oder eben umgekehrt.

In Zeiten, in denen keine Daten transferiert werden, sind sowohl die RC3/SCL-Leitung als auch die Datenleitung (RC4/SDA) high. Die START und STOP -Konditionen bestimmen Anfang und Ende des Datentransports. Wenn der Start des Datentransports erwünscht ist, geht der SDA-Pin auf low wenn der SCL-Pin high ist. Der Datenstop erfolgt durch das Setzen des Bits der SDA-Leitung. Für das Auslösen dieser Konditionen ist wiederum der Master zuständig. Zum Adressieren der I²C Geräte gibt es zwei Adressformate. Das einfachste ist das 7-Bit Adressformat mit einem R/W (Read /Write Pulse)-Bit. Komplexer ist die 10-Bit Adresse mit einem R/W Bit.

Das SSPSTAT - Register zeigt den Status des Datentransfers an. Unter anderem werden die Informationen über die Detektion eines START- bzw. STOP-Bits angezeigt, sowie, ob das empfangene Byte zu den Daten gehört oder ob es sich um eine Adresse handelte. Auch ob es sich um einen Schreibe- oder Lesedatentransfer handelte, wird hier indiziert. Das SSPSTAT-Register kann nur gelesen werden.

Die Slave-Adresse wird in das SSPADD-Register geschrieben. Auch in diesem Modus ist das SSPBUF-Register das Pufferregister, in das Transferdaten geschrieben oder von dem Daten gelesen werden. Das SSPSR Register "schiebt" Daten in das oder aus dem Gerät. Wenn das komplette Byte übertragen wurde, wird der Wert in das SSPBUF-Register transferiert und das SSPIF gesetzt. Wenn das nächste Byte empfangen ist, bevor das Byte im Puffer gelesen wurde, wird das SSPOV-Bit (SSPCON<6>) gesetzt.

Seite 4 von 4>