Also ich steig da immer noch nicht so ganz durch bei den ganzen Interrupts und wie man sie aktiviert und Einsetzt. Habe gerade mal so den Key-Interrupt durchschaut weil es dazu Beispiele gibt nur bei den anderen hakts noch etwas. Gibt es da ne gute Seite mit weiteren Beispielen oder eine auch für Einsteiger ;o) verständliche Anleitung ? THX
Danke aber soweit bin ich auch schon gekommen ;o) Naja irgendwo muss es doch einmal eine ordentliche Dokumentation geben wie man mit C die verschiedenen Interrupts anwendet ... und das in Verständlich ;o)
Welchen Compiler verwendest du denn? Beim den NC30 könnt ich dir ev. weiterhelfen... Gruß Peter
Na das klingt doch mal nach ner guten Nachricht ;o) ja, verwende den NC-30 (alte Version - ich glaube das ist die 2er
Also, für Interrupts ist erstmal die Datei sect30.inc wichtig, dort die "variable vector section" sowie der Ausdruck "#pragma INTERRUPT nameDesInterrupts". Um nun eine neue ISR zu schreiben gehst du am besten folgendermaßen vor: deklariere in deiner headerdatei eine Funktion void nameDesInterrupts(void); darunter schreibst du #pragma INTERRUPT nameDesInterrupts in der sect30.inc trägst du an die Stelle des gewünschten Interrupts folgendes ein: .glb _nameDesInterrupts ; .lword _nameDesInterrupts ; (also den Namen der ISR mit Unterstrich) Wichtig hierbei ist es nicht einfach eine Neue einzufügen sondern die Betreffende zu ersetzten. Hier kommt es auf die Reihenfolge und Position an. Sie bestimmt bei welchem Interrupt deine ISR aufgerufen wird. In der Doku gibt es irgendwo eine Tabelle wo die einzelnen Interrupts swie ihre relativen Positionen aufgeführt sind. BTW so ein Interruptvektor ist vier Bytes breit. Damit eine Interruptroutine auch funktioniert muß mind. noch die entsprechende Priorität eingestellt sein (0..7) wobei 0 den Interrupt ausschaltet und 7 die höchste Priorität ist. Um die Interrupts zu aktivieren machst du noch ein asm( "\tFSET I"); Noch was, wenn du einen Interrupt innerhalb eines Interrupts ändern willst solltest du ungefähr sowas machen: asm("\tFCLR I"); asm("\tBCLR 0,0380H"); // hier was du machen willst asm("\tnop"); asm("\tnop"); asm("\tFSET I"); einfach so z.B einen Interrupt abschalten funktioniert nicht, da der Compiler einen mov-Befehl draus macht. Hat was mit dem Instructionqueue zu tun... Man möge mich ergänzen und berichtigen.... Gruß Peter
Hallo, auf der Internetseite von Renesas gibt es die Handbücher zum C-Compiler, num NC30 und anderes. Das sollte man sich auf jeden Fall intensiv durchlesen. Tschüß
Danke dir für deine Mühe - bin zwar jetzt auf Anhieb noch nicht ganz durchgestiegen aber kümmere mich gleich drum wenn ich erst mal ein anderes Problem gelöst habe ...
Hi , den m16c habe ich auch daheim. Interrupts kann ich dir in C erklären. Es ist nicht so schwer. Kannst du mir bei Echtzeitprogrammierung weiterhelfen ? mail mir herlein67@yahoo.de-
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.