16
Generel Elektronik / Sv: hjælp til servo kontrol med timer
« Dato: November 25, 2011, 20:30:10 »nu har jeg jo lige et lille spørgsmål mere.
hvis jeg har forstået det rigtigt så gør et interrupt at avr stopper med det den er i gang med og udføre det der nu skal udføres i forbindelse med interruptet.
er det så ikke et problem hvis ISR(ADC_vect) fyrre 6000 interrupts af i sekundet og kigger på adc'erne så der samtidig er en ISR(TIM0_OVF_vect) der står og tæller løs på tnct0, bliver der ikke kamp om hvilket interrupt der har prioritet?
Det er egentlig rigtigt observeret.
Men 6000 interrupts i sekundet er indenfor den sikre grænse.
Derudover har den ene type interrupt nemlig prioritet over den anden type interrupt. Fx. INT0 har meget høj prioritet; så vidt jeg husker er der noget med rækkefølgen af interrupt-vektorerne stemmer overens med interrupt-prioriteten, så "reset" har højest prioritet (hvilket absolut giver mening).
Men husk hvad jeg nævnte tidligere, nemlig at der bliver sat et flag til interruptet.
Så du går faktisk aldrig glip af et interrupt, fordi flaget bliver først clear'et (af hardware) når dit interrupt startes.
-Der er derfor ingen grund til at være bekymret, med mindre du presser den op på over 200000 interrupts per sekund på en 1MHz frekvens.
Timer-interrupt 0 vil blive udført 125 gange i sekundet (når du indstiller den til TCNT0 = 256 - ((uint8_t) ((F_CPU / 64) / 125)); )
Antager vi at ADC-interruptet tager omkring 50 clock cycles, kan vi maks. udføre...
1MHz / 50 clock cycles = 20000 interrupts pr. sekund.
-Så du burde uden bøvl kunne sætte ADC'en til at køre op til 18000 interrupts per sekund, vil jeg anslå.