| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Выход из спящего режима по INT0
07.01.2013, 13:50
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Сообщение от niXto
|
Значит, что-то не так в коде, где он? У меня все работает
При тактировании от встроенного генератора, после записи в еепром нужно дождаться окончания записи и только потом валиться в повер-довн. Т.к. логика программатора тактируется от встроенного генератора и при его отключении в процессе записи могут быть нюансы
|
До этого уже дошел переводя даташит, спасибо.
Можно перед процедурой сна поставить такую проверку на окончание записи ЕПРОМ ? это будет корректно ?
|
Код:
|
EEWrite: SBIC EECR,EEWE
RJMP EEWrite
... дале код для сна. |
|
|
|
|
07.01.2013, 13:51
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Сообщение от Slava1355
|
|
В результате работы этого фрагмента переменная akbf не должна измениться, а в SRAM по адресу akbf должно находиться значение 255 (0xFF).
|
Тут ступил, сейчас исправлю проверю.
|
|
|
|
07.01.2013, 14:16
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 1,040
Сказал спасибо: 368
Сказали Спасибо 98 раз(а) в 93 сообщении(ях)
|
Re: Выход из спящего режима по INT0
Что за БЛИН, я накосячил.
Ну хоть бы 1 раз не по собственной глупости был глюк а из-за контроллера.
Я готовлю данные,
SBI EECR, EERIE ;устанавливаю флаг готовности к записи
вызывается прерывание и записывает в ЕЕПРОМ 1 байт.
Но в конце прерывания забыл поставить,
СBI EECR, EERIE ,
и у меня постоянно писалось и писалось.
|
|
|
|
07.01.2013, 15:25
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Выход из спящего режима по INT0
Сообщение от putmannn
|
|
Можно перед процедурой сна поставить такую проверку на окончание записи ЕПРОМ ? это будет корректно ?
|
Да, корректно
|
|
|
|
07.01.2013, 16:47
|
|
|
Прописка
Регистрация: 13.06.2004
Адрес: Москва
Сообщений: 193
Сказал спасибо: 12
Сказали Спасибо 32 раз(а) в 18 сообщении(ях)
|
Re: Выход из спящего режима по INT0.
Сообщение от putmannn
|
До этого уже дошел переводя даташит, спасибо.
Можно перед процедурой сна поставить такую проверку на окончание записи ЕПРОМ ? это будет корректно ?
|
Код:
|
EEWrite: SBIC EECR,EEWE
RJMP EEWrite
... дале код для сна. |
|
Ниже фрагмент кода, который записывает в EEPROM, начиная с нулевого адреса двухбайтовую калибровочную константу из R22/R23. Для надежности константа пишется дважды, в прямом и инверсном формате. Процедура записи и проверки готовности EEPROM вынесены в отдельные подпрограммы. В результате проверка готовности EEPROM пишется в одну строку: rcall WtEERDY .
Обратите внимание на наличие пары cli .... sei в прцедуре записи EEPROM, это гарантирует отсутствие прерываний между двумя командами sbi ... sbi . Это важно для гарантированной записи.
|
Код:
|
;============ WRITE CALIBRATION DATA to EEPROM =========================
;-------- Write LOW Cal byte ----------------------
rcall WtEERDY ;Wait EEPROM READY
clr r16 ;Set first ADDR EEPROM
out EEARH,r16 ;Write first EEADDR (HIGH)
out EEARL,r16 ;Write first EEADDR (LOW)
out EEDR,r22 ;Write Data to temp register
rcall WREE ;Command "Start Write"
;-------- Write INVERT LOW Cal byte ----------------
rcall WtEERDY ;Wait EEPROM READY
inc r16 ;Set 2-nd ADDR EEPROM
out EEARL,r16 ;Write EEADDR (LOW)
COM R22 ;Invert LOW data byte
out EEDR,r22 ;Write Data to temp register
rcall WREE ;Command "Start Write"
;========== Write HIGH Cal byte =====================
rcall WtEERDY ;Wait EEPROM READY
inc r16 ;Set 3-th ADDR EEPROM
out EEARL,r16 ;Write first EEADDR (LOW)
out EEDR,r23 ;Write Data to temp register
rcall WREE ;Command "Start Write"
;-------- Write INVERT HIGH Cal byte ----------------
rcall WtEERDY ;Wait EEPROM READY
inc r16 ;Set 4-th ADDR EEPROM
out EEARL,r16 ;Write EEADDR (LOW)
COM R23 ;Invert HIGH data byte
out EEDR,r23 ;Write Data to temp register
rcall WREE ;Command "Start Write"
;------------------------------------------------------------
rcall WtEERDY ;Wait EEPROM READY (WRITE FINISHING)
RJMP main ;GOTO Main BootLoader module
;================================================= ==============================
;---------------- WAIT EEPROM READY -----------------------
WtEERDY: sbic EECR, EEWE ;
rjmp WtEERDY ;Wait EEPROM ready to write
RET
;-----------------------------------------------------------
;---------------- WRITE EEPROM COMAND -----------------------
WREE: cli
sbi EECR,EEMWE ;Set 1-st "Start Write"
sbi EECR,EEWE ;Set 2-nd "Start Write"
sei
RET
;----------------------------------------------------------- |
|
|
|
|
Сказали "Спасибо" Slava1355
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:53.
|
|