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

Зависание при записи во флэш 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 вставке, регистры сохранить в стеке?

 

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


Ссылка на сообщение
Поделиться на другие сайты
Прерывания запретить в asm вставке, регистры сохранить в стеке?

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

 

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация