Hallo, ich brauche bei einem Atmel-Controller-Programm einen eigenen Interrupt, den ich aufrufen kann, der dann so funktioniert, wie z.B die Timer- oder SPI-Interrupts oder so. Ich müsste also per Hand irgendwie ein Flag setzen, so dass eine Interruptroutine darauf reagiert. Diese Routine müsste dann auch mit eine Priorität versehen werden! Wie macht man das am besten? mfg Wredo
schreibe eine normale funktion, die von einem anderen interrupt nicht unterbrochen werden kann... bsp: void deineFunktion(parameter) cli(); //global interrupts ausschalten ....dein code sei(); //global interrupts einschalten }
interrupts ausstellen geht leider nicht, da zwei andere Interrupts noch wichtiger sind. Ich muss irgendwie eine Funktion selber aufrufen, die höher priorisiert ist, als andere Interrupts, aber die beiden anderen nicht beeinflusst.
hallo. wenn wir mal unterstellen, daß es sich um einen avr handelt, dürftest du schwierigkeiten mit der prioritätenvergabe haben. die ist da ja fest. je nachdem, wie hoch deine höherprioren interrupts angesiedelt sind, müßtest du eben den "benutzerdefinierten" interrupt unterhalb davon generieren, z.b. mit einer ad-wandlung, oder starte einen timer, der im nächsten zyklus überläuft... die antwortzeit vom "auslösewunsch" bis zum sprung in die interruptroutine erhöht sich natürlich entsprechend. gruß michael
Bei einem AVR läßt sich ein Software-Interrupt generieren, indem man einen ext. Interrupt definiert und dann den PIN als Ausgang deklariert. Wenn dann dieser Ausgang einen Logikpegel wechselt (z. B. von High auf Low, wenn so deklariert), dann wird eine Int-Routine angesprungen. MW
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.