Witam.
Zmagam się z problemem ustawienia timera0 na konkretną wartość cykli.
(Na razie na pic16f628a, ale później program będzie wgrany na coś innego.)
np. chce uzyskać przerwanie co 100 cykli timera:
problem w tym że powyższy kod nie uwzględnia:
1) czasu na zapisanie kontekstu przy przewaniu,
2) czasu wykonywania instrukcji przed TMR0 = XX.
3) czasu po jakim timer wznowi odliczanie po zapisaniu rejestru licznika timera.
Wiem tylko że zapisanie do rejestru timera powoduje przerwanie odliczania na 2 cykle (jeden podczas zapisu i następny cykl). Jeżeli chodzi o czas wykonywania instrukcji w procedurze obsługi przerwania to można to policzyć przeglądając listing po kompilacji. Niestety nie mogę się doszukać ile czasu zejdzie na zapisanie kontekstu przerwania i czy jest to zależne od konkretnego modelu, rodziny (architektury) i czy jest to wartość zawsze stała.
Pewnie jest to gdzieś w datasheet, ale jakoś skutecznie to umyka mojej uwadze.
Dziękuję za wszelką dyskusję.
Zmagam się z problemem ustawienia timera0 na konkretną wartość cykli.
(Na razie na pic16f628a, ale później program będzie wgrany na coś innego.)
np. chce uzyskać przerwanie co 100 cykli timera:
static void interrupt isr()
{
if (T0IF)
{
TMR0 = 155; //255 - 100 cykli
T0IF = 0;
// kod przerwania
}
}problem w tym że powyższy kod nie uwzględnia:
1) czasu na zapisanie kontekstu przy przewaniu,
2) czasu wykonywania instrukcji przed TMR0 = XX.
3) czasu po jakim timer wznowi odliczanie po zapisaniu rejestru licznika timera.
Wiem tylko że zapisanie do rejestru timera powoduje przerwanie odliczania na 2 cykle (jeden podczas zapisu i następny cykl). Jeżeli chodzi o czas wykonywania instrukcji w procedurze obsługi przerwania to można to policzyć przeglądając listing po kompilacji. Niestety nie mogę się doszukać ile czasu zejdzie na zapisanie kontekstu przerwania i czy jest to zależne od konkretnego modelu, rodziny (architektury) i czy jest to wartość zawsze stała.
Pewnie jest to gdzieś w datasheet, ale jakoś skutecznie to umyka mojej uwadze.
Dziękuję za wszelką dyskusję.