Перейти к содержанию
    

Самопрограммирование AVR

Пытаюсь записать в флеш память программ по адресу 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Первым делом стоило бы проверить фьюз 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.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...