Hi,

Ik wil een systeem maken dat regaeert op een groot aantal interrupts. Denk bijvoorbeeld aan 20 interrupts. Vaak hebben uC enkel 3 interrupt pinnen. Is er een elegante manier om dit af te vangen?

alle interupts op 1 interupt pin laten binnen komen via diodes.
en alle interupts op een normale pin.
Op de trigger van het interupt kan je de poorten uitlezen welke dat was.

Bij de PC met 8088 hebben ze dat opgelost met een interrupt controller. In het kort: die processor heeft maar 1 inteeruptlijntje naar de controller, leest daar het address uit en springt dan naar de behorende routine.
Elegant voor een uC... Ehm... Nou ja, die interrupt is doorgaans low-active en kun je natuurlijk met wat ANDs wel aan elkaar knopen. Dan de identificatie nog... Dat kan wat lastiger worden - tenzij je die niet nodig hebt uiteraard...

alle interupts op 1 interupt pin laten binnen komen via diodes.
en alle interupts op een normale pin.
Op de trigger van het interupt kan je de poorten uitlezen welke dat was.

Daar heb ik idd aan gedacht. Loop ik dan niet het risico dat het signaal zo snel voorbij is geweest dat deze op een reguliere IO niet meer detecteerbaar is?

[Bericht gewijzigd door Xander2K op ]

Op 1 april 2006 21:57:16 schreef The Headhunter:
dat kan je uitrekenen

Idd, maar polling vind ik helaas niet erg elegant. Ik hoop dat er een andere manier is.

Op 1 april 2006 21:54:30 schreef Xander2K:
[...]

Daar heb ik idd aan gedacht. Loop ik dan niet het risico dat het signaal zo snel voorbij is geweest dat deze op een reguliere IO niet meer detecteerbaar is?

Dat risico loop je toch al binnen je InterruprServiceRoutine, daar zet je het interrupt mechanisme immers af, om ongestoord je laatste interrupt te verwerken.

Op 1 april 2006 22:01:02 schreef Rd12tf:
[...]

Dat risico loop je toch al binnen je InterruprServiceRoutine, daar zet je het interrupt mechanisme immers af, om ongestoord je laatste interrupt te verwerken.

Idd, hmm ik denk dat het tijd wordt om eea uit te rekenen. :)

Misschien buffers voor de reguliere pinnen?

Dit soort mechanismen behoren tot de M$ oplossingen: het gaat regelmatig fout.
Blijkbaar heb je een identificatie nodig (niet onverwacht). Als je die op deze manier probeer te bewerkstelligen, ben je dus 'doof' tijdens interrupthandling. Dus tenzij je kunt garanderen dat je max. 1 interrupt tegelijk krijgt en dan ook nog zo lang na elkaar dat je zeker weet dat de eerste is afgehandeld voordat de tweede komt... Kortom: prutswerk.

Kijk eens naar het interruptcontrollertje van de originele PC (8259 meen ik). Nadeel is wel dat die als ik me goed herinner een databusje verwacht; wellicht vind je aan de hand hiervan andere oplossingen (8080-achtige zaken).