[an error occurred while processing this directive]
|
Сначала считаем затяжку прерываемой программы. Берем наихудший случай, когда прерывание угодило в начало самой длинной (8 тактов/320 нс) команды DIV. Потом - один такт/40 нс на детектирование флага прерывания. Следующая команда - неявный LCALL (4 такта/160 нс) самОй ISR, итого - 13 тактов/520 нс. Кроме того, если флаг прерывания взвелся в момент исполнения чьей-то RETI, то еще 5 тактов/200 нс, т.к. после RETI одна команда выполняется принудительно (в нашем случае - тот же DIV). В таком печальном случае будет затрачено 18 тактов/720 нс, и это теоретический максимум.
В сАмом оптимистическом раскладе получается 1 такт/40 нс на детектирование флага прерывания (когда флаг взвелся в конце команды) и неявный LCALL (4 такта/160 нс), итого - 5 тактов/200 нс, и это теоретический минимум.
Полагая, что SPI ISR должна сделать что-нибудь простое, назначим ее длину в 10 двухтактовых команд, т.е. 800 нс. В результате получим худший случай - 720+800=1520 нс, дадим небольшой запас - пусть будет 2000 нс, это даст 500 Кбайт/сек или 4 Мбит/сек - выше этой скорости SPI на 25-МГц Cygnal'ах гонять нэ нада, болно будэт ;)
Вот, и без железа обошлись.
E-mail: info@telesys.ru