реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Самопрограммирование AVR, ATmega48
Den64
сообщение Jan 20 2018, 11:47
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Пытаюсь записать в флеш память программ по адресу 400h и 401h значение 0. Но не работает.
Чип ATmega48. Пробовал на ATmega88, тоже не работает. В симуляторе работает, в железе нет. EEPROM и спящий режим не использую.
Где я ошибся?
Код
test:
  clr r0
  clr r1
  ldi ZL,  Low(0x400)
  ldi ZH, High(0x400)

  ldi XL, (1 << SELFPRGEN)
  rcall Do_SPM; записать r1:r0 в буфер

  ldi XL, (1 << PGWRT) | (1 << SELFPRGEN)
  rcall Do_SPM; записать буфер во флеш
rjmp P0


Do_SPM:
  push XL
  in XL, SPMCSR
  sbrc XL, SELFPRGEN
  rjmp Do_SPM

wait_EE_Do_SPM:
  sbic EECR, EEPE
  rjmp wait_EE_Do_SPM
  pop XL
  cli
  out SPMCSR, XL
  spm
  sei
ret
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jan 27 2018, 01:08
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Первым делом стоило бы проверить фьюз SELFPRGEN.
Цитата
The ATmega48/V has no separate Boot Loader section, and the Store Program Memory (SPM)
instruction is enabled for the whole Flash if the SELFPRGEN fuse is programmed (“0”). Otherwise the
SPM instruction is disabled.


Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 23:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.02094 секунд с 7
ELECTRONIX ©2004-2016