Ik ben me nu aan het verdiepen in interups. Ik werk met Proton en zou graag het volgende willen doen maar ik weet niet of dit mogelijk is.

Ik heb een hoofdprograma/loop. binnen in deze loop mag maar op bepaalde plaatsen de mogelijkheid zijn om naar de interupt sub routine te gaan als er een externe interupt optreed. Daarnaast moet na het uitvoeren van de interupt niet terug gekeert worden naar de plek waar de interupt is opgetreden maar naar het begin van het hoofdprogramma.

Snappen jullie wat ik bedoel? En is dit mogelijk of wordt hiervoor normaal de interupt niet voor gebruikt.

Externe interrupt 1 bitje van een variabele laten setten, en in de mainloop kijken op de plekken waar ie eruit mag of dat bitje geset is. Indien ja, subroutine uitvoeren, indien nee, gewoon verdergaan.

Kun je niet op de plekken waar geen interrupt mag worden uitgevoerd de interrupt enable bit uitzetten?

Dat kan, maar op die manier bestaat de kans dat je interrupts mist. Bij KiF's methode mis je geen enkele interrupt, maar je kan er op reageren op een ogenblik naar keuze. Je kan de vlag --die de interrupt-routine zet-- ook gewoon negeren als je dat wil.

Op 28 mei 2008 20:15:59 schreef pros:
Je kan de vlag --die de interrupt-routine zet-- ook gewoon negeren als je dat wil.

Dit snap ik niet helemaal. Bedoel je dat je de interupt gewoon uitzet en als je hem nodig hebt weer aan zet met de kans dat je een stijgende/dalende flank hebt gemist?

De simpele methode van Kif snap ik helemaal en je hebt zo inderdaad niet de kans dat je een interupt mist.

Even op een rijtje zetten:

Er is een externe interrupt.
De bijbehorende routine zet een vlag (set 1 bitje van een variabele, zoals KiF het verwoordt).
De hoofdroutine test --als het haar uitkomt-- die vlag en neemt zonodig actie waarna ze de vlag reset.
Of:
De hoofdroutine negeert bewust die vlag omdat ze met dringender zaken bezig is, maar reset daarna wel de vlag om komende interrupts niet te missen.

Je kunt ook gewoon in je hoofdlus de interrupt vlag zelf testen en actie ondernemen.

Geen interrupt dus, gewoon een externe trigger.

Als je hoofdlus niet onderbroken mag worden door de interrupt is het ook niet echt een interrupt meer, nietwaar? (Interrupt = onderbreking)

Op 28 mei 2008 20:54:46 schreef Fuzzbass: Als je hoofdlus niet onderbroken mag worden door de interrupt is het ook niet echt een interrupt meer, nietwaar?

Waar... Dus ik denk dat ik in dit specifieke geval van het interrupt idee afstap en dit vervang door 'normale' code

Toch bedank iedereen. Ben weer een stukkie meer te weten gekomen.

Op 28 mei 2008 20:15:59 schreef pros:
Dat kan, maar op die manier bestaat de kans dat je interrupts mist.

Dat is niet waar. Zodra je de interrupt weer enabled wordt alsnog naar de interrupt service routine gesprongen.

Als je in je programma een subroutine bouwt waarin de Flag gecheched wordt, laat dan een actie uitvoeren, nádat het programma in de hoofdloop terug is.
Anders doet je programma plotseling allerlei andere dingen terwijl hij "officieel" nog steeds in dat eerste subje zit.
Daar kan hij flink van in de war raken.