ilyaul (09.12.2012 03:32, просмотров: 5231)
Вот ведь нарвался , часа три убил. Казалось бы что может быть проще , чем запись в EEPROM в фоновом режиме. ( Прерывание)
При этом успевается сделаться куча дел. В том числе и вывод на LCD. И всё, как только дело доходит до вывода на LCD , записываются ещё 2 байта и обнуляется EERIE. Учитывая , что прерывание EEPROM и LCD используют разные регистры (R17 XL YL - EEPROM , R16 R18 Z-LCD) для данных и адресации, то даже в принципе пересечся никак не могут. Поэтому и сохранений этих регистров в EEPROM и в прерывании таймера (задержки LCD) я не делал. Но откл. подпрограмму LCD пишет память от начала и до конца.
Вот два кода выхода из записи EEPROM. Функционально - братья близнецы.
Первый отрабатывает в паре с прерыванием USART и 2 байта с LCD/ Второй отрабатывает до конца обе пары. В чём причина ,я так и не понял.
Но даже в пошаговом режиме после brpl в первом случае EERIE слетает, хотя он выполняет переход минуя сброс EERIE. Загадка какая-то.
Может глюк студии 4.19
subi YL,1
brpl PC+2
outi EECR,0<<EERIE
pop temp1
out SREG,SAVE_SREG
reti
subi YL,1
brpl NGOOD
outi EECR,0<<EERIE
NGOOD:
pop temp1
out SREG,SAVE_SREG
reti