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
.Print 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
1) Zeit in µs die der Bitsendezeit anhand der Baudrate abgezogen oder hinzugefügt werden soll. Diese Eigenschaft vor .baud setzen. Dient dazu um eine eventuelle Dilatation in der Übertragung anzugleichen.