Potřebuji poradit s výpočtem přesné doby přerušení u uP.
Př.: Potřebuji přesně 2ms a mám procesor s taktem(T=0,5us), předděličku nastavím na 1:16 do registru časovače zadám 7 (256-7=249) tj. přerušení nastane za 0,5 x 16 x 249 = 1992us. Při přerušení se uloží do stacku návratová adresa atd.., reakce na přerušení je 4xT(2us). K novému nastavení časovače jsou 2instrukce 2xT(1us), časovač začne čítat až o 2T(1us) dále.
Takže 1992 + 2 + 1 + 1 = 1996us, tj. pro dorovnání na 2000us musím tedy přidat 8xT(nop) 0,5x8 = 4us před tu část kde je nové nastavení časovače.
Je tento postup správně nebo se toto počítá jinak?
Děkuji za odpovědi.
Interrupt u uP
Moderátor: Moderátoři
To taky musíš napsat jaký máš procesor. Třeba x51 má na přerušení reakční dobu 3 až 9 taktů podle situace, kdy k přerušení dojde. Takže nějaké dopočítávání instrukcí moc nefunguje. Navíc pokud máš povolené i jiné přerušení, tak pak už to vůbec nedopočítáš. Jde vzít aktuální hodnota v časovači, tu přičíst k preset hodnotě a výsledek dát do časovače, musíš se ale trefit do toho 16 taktového okna, kdy se hodnota časovače nemění, jinak se můžeš seknout o 1 a výsledná perioda bude o 16 taktů delší.
Pokud to potřebuješ přesně, tak je nejlepší auto reload mód časovače, u něj je perioda přerušení na sw nezávislá. Ale ani u něj nemáš přesně zaručeno, kdy začne obsluha jeho přerušení.
Pokud to potřebuješ přesně, tak je nejlepší auto reload mód časovače, u něj je perioda přerušení na sw nezávislá. Ale ani u něj nemáš přesně zaručeno, kdy začne obsluha jeho přerušení.