форум Радиолюбительского ДВ портала > Технический раздел

DDS синтезатор передатчика

<< < (37/82) > >>

GM:
Основная программа делает какие-то действия, формирует флаги операций C,Z,N,... (Carry, Zero, Negative и т.д.), собранные в статус-регистре SREG. Подпрограммы прерываний  тоже могут менять флаги операций, эти изменения могут нарушить работу основной программы, иногда существенно. Поэтому при входе во все ваши прерывания нужно сохранять SREG, например так:

push  r14
in       r14,SREG

Ну и при выходе из подпрограммы прерывания - обратный процесс:

out    SREG,r14
pop   r14
reti

Посмотрел ваши прерывания повнимательнее - tim0_ovf не меняет флаги, так что в ней сохранять-восстанавливать флаги не надо.

rn3aus:
Спасибо, GM! Ценное замечание, теперь буду знать.

Вероятно, отсутствие сохранения SREG не влияло на нормальную работу синтезатора по той причине, что основная программа, ее главный цикл, очень простой и ничего кроме выдачи очередного отсчета в порт не делает. Вход в прерывание возможен только в течение одной команды главного цикла - rjmp LOOP1 (возврат в начало цикла), когда отсчет сформирован и уже выдан. В худшем случае, видимо, может пострадать только один отсчет.

Тем не менее, когда соберусь выпустить новую версию прошивки, обработчики прерываний будут скорректированы.

GM:
А что случится, если в какой-то вашей подпрограмме, скажем в RX_COMPLETE_INT, где-нибудь поставить команду (инструкцию) SEI?


--- Цитата: rn3aus от 13 Апрель 2019, 21:02:59 ---Вход в прерывание возможен только в течение одной команды главного цикла
--- Конец цитаты ---
Не одной команды, а двух: rjmp И cli. [поправил: cli, конечно, а не sei]

rn3aus:

--- Цитата: GM от 13 Апрель 2019, 21:41:14 ---А что случится, если в какой-то вашей подпрограмме, скажем в RX_COMPLETE_INT, где-нибудь поставить команду (инструкцию) SEI?
--- Конец цитаты ---
А зачем бы ее там ставить? Разрешать прерывания в обработчике прерывания?

GM:
Ну, вы же поставили, неявно впрочем...

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Перейти к полной версии