Avr ist die Basis-Klasse (der Controller). Die Eigenschaft „Device“ muss als erste Eigenschaft vor allen Anderen gesetzt werden.
Eigenschaften (nur schreiben) | ||
---|---|---|
Name | Beschreibung | Wert |
Avr.Device=Controllername | Controller-Klasse wählen1) | Name |
Avr.Clock=Konstante | Taktrate in Hz 2) | > 0 |
Avr.Stack=Konstante | Stackgröße in Bytes. | > 1 |
Avr.Isr.<InterruptAdr>=Isr-Label | Direktes Setzen einer Interrupt-Serviceroutine.3) | Adresse |
Avr.CodeStartAddr=Adresse | Startadresse des Codes setzen, z.Bsp. für Bootloader „avr.CodeStartAddr = LARGEBOOTSTART“. Führt dazu, dass der erzeugte Maschinencode ab der angegebenen Adresse im Programmspeicher geschrieben wird. | Adresse (Wordorientiert) |
Eigenschaften (nur lesen) | ||
Name | Beschreibung | Typ |
Ergebnis = Avr.StackPointer | Aktuelle Position des Stackpointers | word |
Eigenschaften (lesen/schreiben) | ||
Name | Beschreibung | Typ |
Avr.<Portname>[.<datatype>] | Direkter Zugriff auf sämtliche Ports des Controllers. Die optionale Angabe eines Datentyps (byte, word, integer, long, ..) spezifiziert die Zugriffsart beim lesen/schreiben. | Vorgabe: byte |
Avr.<Portname>.<Bit> | Direkter Zugriff auf die Bits des angegeben Ports. | byte |
Methoden | ||
Name | Beschreibung | |
Avr.Interrupts.enable | Globale Interrupts einschalten | |
Avr.Interrupts.disable | Globale Interrupts ausschalten | |
Avr.Idle | Ruft das Idle-Event auf, sofern vorhanden. |
avr.device = atmega32 // Atmega32 avr.clock = 8000000 // 8 Mhz Taktrate avr.stack = 32 // 32 Bytes Programmstack // Programmcode
Die Größe des benötigten Stacks richtet sich nach der Anzahl der Parameter und lokalen Variablen, sowie der Verschachtelungstiefe von Methodenaufrufen. Bei Verschachtelten Aufrufen addieren sich die benötigten Anzahl bytes. Eine Methode benötigt mindestens 2 bytes (Rücksprungadresse). Hinzu kommen die Parameter und deklarierte Variablen (sofern vorhanden).
Neben den abgebildeten Objekten und Funktionen kann man wie in C/Assembler auf die Ports des Controllers direkt zugreifen. Weiterhin sind alle im Datasheet benannten controllerspezifischen Bitnamen bzw. Eigenschaften der jeweiligen Ports standardmäßig definiert. Im Editor der Luna-IDE werden sie bei korrekter Schreibweise/Existenz auf dem aktuell im Source definierten Controller farblich hervorgehoben. Die Ports und Namen werden beim Einladen und Speichern der Source-Datei anhand der avr.device-Eigenschaft aktualisiert.
Allgemein gilt:
value = avr.SREG 'default datentyp ist byte avr.TCNT1.Word = value 'wortbreiten Zugriff spezifizieren (schreibend) value = avr.TCNT1.Word '(lesend)
Siehe Hierzu: Ermitteln von Controllerspezifischen Werten und Konstanten.
avr.device = atmega32 // Atmega32 avr.clock = 8000000 // 8 Mhz Taktrate avr.stack = 32 // 32 Bytes Programmstack dim a as word dim b as byte avr.TIMSK = 1<<TOIE1 or 1<<OCIE1A ' Timer 1 und Compare1A aktivieren a.LowByte = avr.TCNT1L ' Low-Byte des Timer-Counters lesen a.HighByte = avr.TCNT1H ' High-Byte des Timer-Counters lesen avr.TCNT1H = a.HighByte ' High-Byte des Timer-Counters schreiben (beim Schreiben immer High-byte zuerst!) avr.TCNT1L = a.LowByte ' Low-Byte des Timer-Counters schreiben avr.DDRA.PINA0 = 1 b = avr.PORTA.PINA0 avr.Isr.ICP1Addr = myIsr do loop isr myIsr [..] endisr