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

 
 
> Пытаюсь написать Bootloader для Atmega128, Не получается стереть страницу
afad
сообщение Dec 1 2008, 16:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545



Пытаюсь написать загрузчик (bootloader) для ATMEGA128 и не получается. Программа должна постранично модифицировать память программ.
Посмотрел много примеров, вроде делаю все как у всех, но не работает.
Не работает самое элементарное - стирание страницы, запись пока не пробовал, т.к. перед записью нужно стереть страницу.
Вот кусок программы, должна стираться нулевая (для примера) страница:

;Задаем нулевую страницу для стирания
clr ZL
clr ZH

;Проверяем, что не идет запись, ждем когда кончится, если идет
M1:
lds r16,SPMCSR
sbrc r16,SPMEN
rjmp M1

;>Проверяем, что не идет запись в EE, ждем когда кончится, если идет
M2:
sbic EECR,EEWE
rjmp M2

;>Запускаем стирание
ldi r16, (1<<PGERS) | (1<<SPMEN)
sts SPMCSR,r16
spm

;Ждем, когда окончится стирание
M3:
lds r16,SPMCSR
sbrc r16,SPMEN
rjmp M3

Программа виснет на команде spm, дальше не идет. Если закомментировать команду spm,
то все проскакивает (но стирания, естественно тоже не происходит).

Данная программа стартует с адреса 0x1F000 и расположена в области 0x1F000...0x1FFFF.

Может не так устанавливаю FUSES???
Установлено вот так:
BODLEVEL = 1
BODEN = 0
SUT = 2
CKSEL = F
BLB1 = 3 <-полный доступ к памяти зпгрузчика
BLB0 = 3 <-полный доступ к памяти программ
OCDEN = 1
JTAGEN = 1
CKOPT = 1
EESAVE = 0
BOOTSZ = 0 <- 4K область загрузчика (адреса 1F000-1FFFF)
BOOTRST = 0 <- Стартовать с загрузчика (c адреса 1F000)
M103C = 1
WDTON = 1

Где я ошибся, не понимаю?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 01:10
Рейтинг@Mail.ru


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