Ich will die serielle Schnittstelle UART1 verwenden. Das Handling soll in C geschrieben werden und den Interruppt verwenden. Wie ist das zu bewerkstelligen?
Wo ist das Problem? Aber wenn du es dir einfach machen willst, lad dir einfach eine embOS trial version von segger.com runter (gibts da für HEW und IAR), im Rtosinit.c findest du immer ne Initialisierung und Interrupt Bearbeitung für die Uarts ;-).
> Wie ist das zu bewerkstelligen?
Du liesst das Datenblatt und lernst so wie du den IRQ einschaltest.
Du liest die Doku ueber den Compiler und lernst so wie du eine
Interruptfunktion programmierst.
Du laesst dir von HEW entweder ein Assembler oder C Startupscript
erzeugen und traegst da den Namen deiner Funktion ein.
Olaf
Danke für eure Hilfe. Dann muss ich wohl einiges lesen. Dabei ist mir ein Dokument von Renesas in die Hände gefallen. In diesem Text wird das Grundsätzliche beschrieben. Meine Fragen: Ist diese Schema auf den r8c anwendbar? In welchen Dateien sind die die Funktionen abzulegen? z.b. von Seite 2 die Funktion void intr( void ) bzw. das Programm zum Retten der Register? auf der Rechten Seite sind mir die folgenden Zeilen unklar .section program .glb _intr _intr: für den Augenblick reichts mir ersteinmal. Vielen Dank für eure Hilfe
> Ist diese Schema auf den r8c anwendbar? NAja, ich hab es jetzt keine Lust dein PDF zu lesen, aber normalerweise zeichen sich R8C/M16C dadurch aus sehr kompatibel zu sein. Ausserdem stellt sich die Frage auf welchen R8C! Schliesslich ist das nur ein Oberbegriff fuer viele Prozessoren. > In welchen Dateien sind die die Funktionen abzulegen? In der Vergangenheit hat HEW ein Assembler Programm erstellt wenn du ein neues Project erzeugt hast. Dort konnte man halt die Funktion eintragen. Dein Beispiel duerfte darauf beruhen. Seit einiger Zeit kann man auch angeben das man ein C-Code haben will. Dann wird das halt dort eingetragen. Das koennte also ein bisschen davon abhaengen welche HEW/Compiler-Version man hat. Olaf
Bei einem C-Projekt legt die HEW die Datei intprg.c an, in der für alle Interruptvektoren des ausgewählten Prozessors eine leere Funktion definiert ist ala
1 | #pragma interrupt _brk(vect=0)
|
2 | void _brk(void){} |
D.h. die entsprechende Stelle auskommentieren und in der eigenen C-Datei entsprechend neudefinieren.
1 | // Include, Interruptvektor und Registername entsprechend anpassen
|
2 | #include "sfr_r823.h" |
3 | ...
|
4 | #pragma interrupt SerialReceive1(vect=20)
|
5 | void SerialReceive1(void) { |
6 | byte res = (byte)u1rb; |
7 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.