Interrupt u uP

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Standa33
Příspěvky: 283
Registrován: 07 lis 2009, 01:00

Interrupt u uP

#1 Příspěvek od Standa33 »

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.

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#2 Příspěvek od Andrea »

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í.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“