K (Baustelle weg, minimale Anpassung) |
K (nur Rechtschreibung korrigiert) |
||
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
USI ('''U'''niversal '''S'''erial '''I'''nterface) steht für Universelle serielle Schnittstelle, die vor allem in kleineren Atmel AVR Controllern, wie zB. beim [[ATtiny2313|ATTiny2313]], aber auch in einigen ATMegas anzutreffen ist. | USI ('''U'''niversal '''S'''erial '''I'''nterface) steht für Universelle serielle Schnittstelle, die vor allem in kleineren Atmel AVR Controllern, wie zB. beim [[ATtiny2313|ATTiny2313]], aber auch in einigen ATMegas anzutreffen ist. | ||
− | Wie der Name schon aussagt, kann diese Schnittstelle universell eingestellt werden um unterschiedliche Funktionen auszuführen. | + | Wie der Name schon aussagt, kann diese Schnittstelle universell eingestellt werden, um unterschiedliche Funktionen auszuführen. Sie ist hauptsächlich dafür gedacht, verschiedene Arten der seriellen Kommunikation auszuüben. |
Zeile 11: | Zeile 11: | ||
= Alternative Funktionen = | = Alternative Funktionen = | ||
− | Wenn die Schnittstelle nicht für die serielle Kommunikation verwendet wird, gibt es, wegen der universellen Auslegung, weitere Möglichkeiten sie trotzdem zu verwenden. Dies wären: | + | Wenn die Schnittstelle nicht für die serielle Kommunikation verwendet wird, gibt es, wegen der universellen Auslegung, weitere Möglichkeiten, sie trotzdem zu verwenden. Dies wären: |
* Halb-Duplex Asynchrone Datenübertragung | * Halb-Duplex Asynchrone Datenübertragung | ||
* 4-Bit Counter (0-15) mit verschiedenen Taktquellen | * 4-Bit Counter (0-15) mit verschiedenen Taktquellen | ||
* 12-Bit Timer/Counter in Verbindung mit Timer0 | * 12-Bit Timer/Counter in Verbindung mit Timer0 | ||
* externer Interrupt, löst bei jeder Flanke aus | * externer Interrupt, löst bei jeder Flanke aus | ||
− | * Software Interrupt, kann durch | + | * Software Interrupt, kann durch Setzen in einem USI-Register ausgelöst werden |
Zeile 95: | Zeile 95: | ||
|} | |} | ||
</div> | </div> | ||
− | ::Ist der Timer0 als Taktquelle ausgewählt, kann je nach AVR ein Timerüberlauf | + | ::Ist der Timer0 als Taktquelle ausgewählt, kann je nach AVR ein Timerüberlauf oder ein Comparematch den Impuls für das USI-Modul auslösen. |
− | ::Die Taktleitung SCL muss dabei jeweils per Software umgeschaltet (getoggelt) werden, am einfachsten | + | ::Die Taktleitung SCL muss dabei jeweils per Software umgeschaltet (getoggelt) werden, am einfachsten in einer Timer-ISR ''USITC'' setzen. |
:*'''USICLK''' Clock Strobe | :*'''USICLK''' Clock Strobe | ||
− | ::Bei Softwaretakt | + | ::Bei Softwaretakt wird beim Setzen dieses Bits das Schieberegister (''USIDR'') um ein Bit weitergeschoben und der Counter um eins hochgezählt. Der Ausgang wechselt noch im gleichen CPU-Takt auf den neuen Bitwert. |
::Bei externer Taktquelle siehe vorhergehende Tabelle für die Verwendung von USICLK. | ::Bei externer Taktquelle siehe vorhergehende Tabelle für die Verwendung von USICLK. | ||
− | ::Das | + | ::Das Auslesen von USICLK ergibt immer 0. |
:*'''USITC''' Toggle Clock Port Pin | :*'''USITC''' Toggle Clock Port Pin | ||
− | ::Beim | + | ::Beim Setzen wird der Zustand von USCK/SCL gewechselt (0->1 oder 1->0) |
::Bei externer Taktquelle (siehe Tabelle bei USICSx) kann der 4-Bit-Zähler um eins hochgezählt werden. | ::Bei externer Taktquelle (siehe Tabelle bei USICSx) kann der 4-Bit-Zähler um eins hochgezählt werden. | ||
− | ::Das | + | ::Das Auslesen von USITC ergibt immer 0. |
Zeile 112: | Zeile 112: | ||
==== USIBR ==== | ==== USIBR ==== | ||
:USI Buffer Register, alle 8 bit | :USI Buffer Register, alle 8 bit | ||
− | :Dieses Register kann nur gelesen werden, entspricht aber eigentlich dem USIDR-Register. Es hat den Vorteil, das das letzte empfangene Byte hier gehalten wird, und die zeitliche Abfolge zum | + | :Dieses Register kann nur gelesen werden, entspricht aber eigentlich dem USIDR-Register. Es hat den Vorteil, das das letzte empfangene Byte hier gehalten wird, und die zeitliche Abfolge zum Auslesen der Daten aus USIDR nicht mehr so kritisch ist, da z.B. nach einem ACK bei TWI das USIDR schon um ein Bit weitergeschoben wird. |
==== USIPP ==== | ==== USIPP ==== | ||
Zeile 129: | Zeile 129: | ||
* [[TWI]] - Two-wire Serial Interface | * [[TWI]] - Two-wire Serial Interface | ||
* [[SPI]] - Serial Peripheral Interface | * [[SPI]] - Serial Peripheral Interface | ||
+ | * [[Bascom und USI-Kommunikation]] - Bascom-Beipiele um USI als I2C zu verwenden | ||
* [http://www.atmel.com/dyn/resources/prod_documents/doc2561.pdf Atmel_AVR310] - Using the USI module as a I2C master | * [http://www.atmel.com/dyn/resources/prod_documents/doc2561.pdf Atmel_AVR310] - Using the USI module as a I2C master | ||
* [http://www.atmel.com/dyn/resources/prod_documents/doc2560.pdf Atmel_AVR312] - Using the USI module as a I2C slave | * [http://www.atmel.com/dyn/resources/prod_documents/doc2560.pdf Atmel_AVR312] - Using the USI module as a I2C slave | ||
− | |||
= Weblinks = | = Weblinks = |
Aktuelle Version vom 26. November 2008, 14:25 Uhr
USI (Universal Serial Interface) steht für Universelle serielle Schnittstelle, die vor allem in kleineren Atmel AVR Controllern, wie zB. beim ATTiny2313, aber auch in einigen ATMegas anzutreffen ist.
Wie der Name schon aussagt, kann diese Schnittstelle universell eingestellt werden, um unterschiedliche Funktionen auszuführen. Sie ist hauptsächlich dafür gedacht, verschiedene Arten der seriellen Kommunikation auszuüben.
Inhaltsverzeichnis
Hauptfunktionen
Die Hauptfunktionen sind
Alternative Funktionen
Wenn die Schnittstelle nicht für die serielle Kommunikation verwendet wird, gibt es, wegen der universellen Auslegung, weitere Möglichkeiten, sie trotzdem zu verwenden. Dies wären:
- Halb-Duplex Asynchrone Datenübertragung
- 4-Bit Counter (0-15) mit verschiedenen Taktquellen
- 12-Bit Timer/Counter in Verbindung mit Timer0
- externer Interrupt, löst bei jeder Flanke aus
- Software Interrupt, kann durch Setzen in einem USI-Register ausgelöst werden
USI-Register
Hier eine kurze Beschreibung der für den USI Betrieb notwendigen Register
USIDR
- USI Data Register, alle 8 bit
- Über dieses Register wird direkt auf das serielle Register zugegriffen, ohne Puffer dazwischen, auch während gerade ein Byte übertragen wird, anders als bei echtem TWI !
USISR
- USI Status Register
Bit: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Name: | USISIF | USIOIF | USIPF | USIDC | USICNT3 | USICNT2 | USICNT1 | USICNT0 |
- Das Statsregister enthält die Interruptflags, den Status der Datenleitungen und den 4-Bit Counter
- USISIF Startbedingung Interrupt Flag
- Bei TWI: Wenn eine Startbedingung erkannt wurde, wird dieses Flag gesetzt, und ein Interrupt ausgelöst falls USISIE im Controlregister gesetzt ist.
- Die Taktleitung wird solange gehalten, bis das Flag zurückgesetzt wird, siehe auch Clock Stretching.
- Anderer Modus: Bei externer Takquelle wird bei jeder Flanke an USCK dieses Flag gesetzt.
- Um das Flag zurückzusetzen muss es gesetzt werden.
- USIOIF Counter Overflow Interrupt Flag
- Wenn der Counter überläuft (15 + 1), wird dieses Flag gesetzt, und ein Interrupt ausgelöst falls USIOIE im Controlregister gesetzt ist.
- Bei TWI: Die Taktleitung wird solange gehalten, bis das Flag zurückgesetzt wird, siehe auch Clock Stretching.
- Um das Flag zurückzusetzen muss es gesetzt werden.
- USIPF Stopbedingung Interrupt Flag (nur bei TWI)
- Wenn eine Stopbedingung erkannt wurde, wird dieses Flag gesetzt, es kann kein Interrupt generiert werden.
- Um das Flag zurückzusetzen muss es gesetzt werden.
- USIDC Data Output Collision (nur bei TWI)
- Tritt auf, wenn gleichzeitg ein anderer Busteilnehmer auf den Bus zugreift (Multimaster).
- USICNTx Wert des 4-Bit-Zählers
- Aktueller Wert des Zählers, kann jederzeit gelesen oder neu beschrieben werden. Zählt bei jeder Flanke (fallend oder steigend) der Taktquelle um eins hoch (siehe USICSx im Controlregister).
USICR
- USI Control Register
Bit: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Name: | USISIE | USIOIE | USIWM1 | USIWM0 | USICS1 | USICS0 | USICLK | USITC |
- Im Controlregister wird der Modus eingestellt, Taktquelle ausgewählt und Interruptanforderungen aktiviert
- USISIE Startbedingung Interrupt ermöglichen (nur bei TWI)
- Wenn eine Startbedingung erkannt wurde und global Interrupts erlaubt sind, wird ein Interrupt ausgelöst.
- USIOIE Counter Overflow Interrupt ermöglichen (nur bei TWI)
- Wenn ein Zählerüberlauf aufgetreten ist und global Interrupts erlaubt sind, wird ein Interrupt ausgelöst.
- USIWMx Modus wählen:
USIWM1 | USIWM0 | Modus |
---|---|---|
0 | 0 | kein Modus PortPins können normal verwendet werden. |
0 | 1 | Three-wire Modus, bzw. SPI Es werden die Pins DO, DI und USCK verwendet. |
1 | 0 | TWI für Master und Slave Es werden die Pins SDA und SCL verwendet. |
1 | 1 | TWI für Slave, Es werden die Pins SDA und SCL verwendet. Gleicher Modus wie 10 bis auf diese Zusatzfunktion: Die Taktleitung wird beim Zählerüberlauf gehalten bis die Software dieses freigibt (USIOIF = 1), siehe auch Clock Stretching |
- USICSx Taktquelle wählen (in Verbindung mit USICLK):
USICS1 | USICS0 | USICLK | Takquelle Schieberegister |
Taktquelle Counter |
---|---|---|---|---|
0 | 0 | 0 | keine Taktquelle | keine Taktquelle |
0 | 0 | 1 | Software (USICLK) | Software (USICLK) |
0 | 1 | X | Timer/Counter0 | Timer/Counter0 |
1 | 0 | 0 | extern, positive Flanke | extern, beide Flanken |
1 | 1 | 0 | extern, negative Flanke | extern, beide Flanken |
1 | 0 | 1 | extern, positive Flanke | Software (USITC) |
1 | 1 | 1 | extern, negative Flanke | Software (USITC) |
- Ist der Timer0 als Taktquelle ausgewählt, kann je nach AVR ein Timerüberlauf oder ein Comparematch den Impuls für das USI-Modul auslösen.
- Die Taktleitung SCL muss dabei jeweils per Software umgeschaltet (getoggelt) werden, am einfachsten in einer Timer-ISR USITC setzen.
- USICLK Clock Strobe
- Bei Softwaretakt wird beim Setzen dieses Bits das Schieberegister (USIDR) um ein Bit weitergeschoben und der Counter um eins hochgezählt. Der Ausgang wechselt noch im gleichen CPU-Takt auf den neuen Bitwert.
- Bei externer Taktquelle siehe vorhergehende Tabelle für die Verwendung von USICLK.
- Das Auslesen von USICLK ergibt immer 0.
- USITC Toggle Clock Port Pin
- Beim Setzen wird der Zustand von USCK/SCL gewechselt (0->1 oder 1->0)
- Bei externer Taktquelle (siehe Tabelle bei USICSx) kann der 4-Bit-Zähler um eins hochgezählt werden.
- Das Auslesen von USITC ergibt immer 0.
In ganz neuen AVR Tiny Controllern (wie dem ATTiny261, ATTiny24 und ATTiny25) sind weitere Register zu finden:
USIBR
- USI Buffer Register, alle 8 bit
- Dieses Register kann nur gelesen werden, entspricht aber eigentlich dem USIDR-Register. Es hat den Vorteil, das das letzte empfangene Byte hier gehalten wird, und die zeitliche Abfolge zum Auslesen der Daten aus USIDR nicht mehr so kritisch ist, da z.B. nach einem ACK bei TWI das USIDR schon um ein Bit weitergeschoben wird.
USIPP
- USI Pin Position
Bit: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Name: | – | – | – | – | – | – | – | USIPOS |
- USIPOS USI Pin Position
- Es ist möglich, die Datenleitungen auf einen alternativen Port zu legen, wenn dieses Bit gesetzt wird. Die alternative Position ist aber auch festgelegt, man schaltet nur zwischen den Möglichkeiten um.
Quellen
Siehe auch
- I2C - Details zu I2C
- TWI - Two-wire Serial Interface
- SPI - Serial Peripheral Interface
- Bascom und USI-Kommunikation - Bascom-Beipiele um USI als I2C zu verwenden
- Atmel_AVR310 - Using the USI module as a I2C master
- Atmel_AVR312 - Using the USI module as a I2C slave
Weblinks
- [1] - Forum-Artikel, in dem eine Bascom-Lib vorgestellt wird, um die Bascom-I2C-Befehle mit dem USI-Modul als Master zu verwenden.
- [2] - Forum-Artikel, der letztendlich dazu geführt hat diesen Wiki-Artikel zu erstellen. Mit einigen Beispielprogrammen.
--Linux 80 19:19, 18. Nov 2006 (CET)