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

Зависание при записи во флэш Tiny45

Добрый день,

 

пришлось заняться написанием загрузчика для Tiny45, с которым не работал уже тысячу лет, и возникла проблема с записью флэш при помощи SPM.

Во внутренний буфер все пишется замечательно, а вот со стиранием/записью страницы есть вопросы.

Код стирания, например выглядит вот так:

 

LED_PIN_Set;
#asm
  movw R30, R10
  ldi R22, 0x03
  out 0x37, R22
  spm
#endasm
LED_PIN_Clear;
while (SPMCSR & (1 << SPMEN));

 

Адрес страницы лежит в R10, это железно, так как страница пишется/стирается. Но вот выхода из SPM не происходит, так как светодиод загорается (LED_PIN_Set), но уже не гаснет, то есть до команды LED_PIN_Clear выполнение не доходит.

Фьюз SELFPRGEN включен.

Есть ли у кого-нибудь идеи, почему это может происходить? Потому как наполнение буфера для страницы работает, хотя там тоже используется SPM, хотя и не происходит изменений во флэш. Сама страница тоже пишется, но один раз - из пишущего страницу SPM выхода не происходит.

 

Заранее спасибо!

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


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

Прерывания запретить в asm вставке, регистры сохранить в стеке?

Прерывания были отключены, регистры не используются в тексте существенным образом.

 

Проблема была все-таки в логике программы, так что с процессором все в порядке.

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


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

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

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

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

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

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

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

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

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

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