SoftUart
SoftUart ist das in LunaAVR implementierte Software-Uart-Interface und eine vereinfachte Uart-Emulation. Es können beliebige Port-Pins als RX/TX definiert werden. SoftUart nutzt 1 Start und 1 Stop-Bit (Standard-Konfiguration). Die Baudrate ist frei einstellbar. Wie auch beim Hardware-Uart ist die Fehlerrate zu beachten. Es sollte eine Baudrate gewählt werden, bei der die Fehlerrate minimal ist. Möglich sind Baudraten bis zu einem Maximum von ca. 1/100 der Taktrate des Controllers (200000 Baud @ 20 Mhz).
Die Initialisierung erfolgt einmalig und besitzt dann globale Gültigkeit. Änderungen an der Initalisierung oder den verwendeten Pins sind nachträglich zur Laufzeit nicht vorgesehen. Da für optimale Geschwindigkeit und Effizienz vom Präprozessor vorberechnete Konstantwerte Verwendung finden, muss die Initialisierung textuell vor dem ersten Funktionsaufruf erfolgen.
Eigenschaften (nur schreiben) | ||
---|---|---|
Name | Beschreibung | Wert |
.Mode = | Signalmodus festlegen | normal, inverted |
.PinRxd = | Rxd-Pin (Empfang) festlegen | Port.n |
.PinTxd = | Txd-Pin (Senden) festlegen | Port.n |
.Baud = | Baudrate festlegen | Konstante |
.AdjustDelay = | Bit-Time justieren 1) | Konstante |
Methoden | |||
---|---|---|---|
Name | Beschreibung | Typ | r/w |
Ausgabe mehrerer Werte, siehe Print. | - | schreiben | |
.InpStr([echo,[breakChar]]) | Liest maximal 254 Zeichen von der Schnittstelle und bricht ab, wenn breakChar (Vorgabewert: 13) eintrifft. Ist echo Null (Vorgabewert: 1), wird ein Echo zum Sender unterbunden. Die beiden Parameter sind optional. | string | lesen |
.ReadByte | Byte lesen (warten bis Zeichen verfügbar) | byte | lesen |
.ReadWord | Word lesen (warten bis Zeichen verfügbar) | word | lesen |
.ReadInteger | Integer lesen (warten bis Zeichen verfügbar) | integer | lesen |
.ReadLong | Long lesen (warten bis Zeichen verfügbar) | long | lesen |
.ReadSingle | Single lesen (warten bis Zeichen verfügbar) | single | lesen |
.Read sramAdresse,Anzahl | Angegebene Anzahl Bytes lesen und in den Arbeitsspeicher schreiben (wartet bis alle Zeichen gelesen). | - | lesen |
.ReadC sramAdresse | Bytes lesen und in den Arbeitsspeicher schreiben (Wartet bis ein Nullbyte gelesen wurde, das Nullbyte wird nicht gespeichert.). | - | lesen |
.ReadP sramAdresse | Bytes lesen und in den Arbeitsspeicher schreiben (Das erste empfangene zeichen beziffert die zu lesende Anzahl Bytes. Wartet bis alle Zeichen gelesen.). | - | lesen |
.WriteByte | Byte schreiben (warten bis Ausgabe bereit) | byte | schreiben |
.WriteWord | Word schreiben (warten bis Ausgabe bereit) | word | schreiben |
.WriteInteger | Integer schreiben (warten bis Ausgabe bereit) | integer | schreiben |
.WriteLong | Long schreiben (warten bis Ausgabe bereit) | long | schreiben |
.WriteSingle | Single schreiben (warten bis Ausgabe bereit) | single | schreiben |
.Write sramAdresse,Anzahl | Angegebene Anzahl Zeichen aus Arbeitsspeicher schreiben (wartet bis alle Zeichen geschrieben). | - | schreiben |
.WriteC sramAdresse | Mehrere Zeichen aus Arbeitsspeicher schreiben bis Nullbyte erscheint (wartet bis alle Zeichen geschrieben mit Ausnahme des Nullbytes). | - | schreiben |
.WriteP sramAdresse | Mehrere Zeichen aus Arbeitsspeicher schreiben, das erste Zeichen beziffert die Anzahl (wartet bis alle Zeichen geschrieben. | - | schreiben |
.CWrite flashAdresseBytes,Anzahl | Angegebene Anzahl Zeichen aus Flashspeicher schreiben (wartet bis alle Zeichen geschrieben). | - | schreiben |
.CWriteC flashAdresseBytes | Mehrere Zeichen aus Flashspeicher schreiben bis Nullbyte erscheint (wartet bis alle Zeichen geschrieben mit Ausnahme des Nullbytes). | - | schreiben |
.CWriteP flashAdresseBytes | Mehrere Zeichen aus Flashspeicher schreiben, das erste Zeichen beziffert die Anzahl (wartet bis alle Zeichen geschrieben. | - | schreiben |
.Dump | Hexdump-Ausgabe zum Debugging, siehe Dump. | - | aufrufen |
Hinweis
Da die Emulation per Software erfolgt und das Timing für eine korrekte Übertragung sehr wichtig ist, werden während des Sendens oder Empfangens eines Zeichens die Interrupts deaktiviert.
Beispiel
avr.device = attiny2313 avr.clock = 20000000 avr.stack = 4 ' SoftUart Example: simple terminal ' Setup Pins you want to use and baud rate first SoftUart.PinRxd = PortB.0 ' Receive Pin: RXD SoftUart.PinTxd = PortB.1 ' Transmit Pin: TXD SoftUart.Baud = 19200 ' Baud rate up to 1/100 of avr.clock (200000 baud @ 20 Mhz) dim a as byte SoftUart.Write 12 ' clear terminal SoftUart.Print " > "; ' the prompt do a=SoftUart.Read ' wait and get byte from input select case a case 13 SoftUart.Write 13 ' CR SoftUart.Write 10 ' LF SoftUart.Print " > "; ' the prompt default SoftUart.Write a endselect loop