Добрый день всем! недавно подсел на atmel и решил разобраться полностью с этим зверем, решил написать свой велосипед, ой бутлоадер. Но к сожелению в протеус не пишутся страницы, то есть вроде бы все делаю по мануалам, а записуется страница в область программной памяти с FF коммандами, моих команд сохраненных в временной странице как бы и нету. Вот кусок кода с области bootloadera, кто знает в чем беда, направте в нужное русло пожалуйста.

Код
commandWriteChip:

        clr     ZH; 0 адресс страницы
        clr     ZL
                                               ; SPMEN – разрешает вызов команды SPM в следующих 4х тактах
                                               ; PGERS – команда на очистку страницы флеша
        ldi     R17, (1<<PGERS) | (1<<SPMEN)   ; в R17 передаётся параметр в регистр SPMCR
        call    commandSPM
        ldi     R17, (1<<RWWSRE) | (1<<SPMEN)  ; ре-инициализация страницы
        call    commandSPM
; выше я по идее очистил страницу программной памяти, в которую буду писать

        ldi     R18, 0x20                      ; количество слов в странице (32)
        ldi     ZH, 0b00000000                ;
        ldi     ZL, 0b00000000                ;

     asddd:
; ниже 4 комманды которые прописуются в регистр r0:r1 и в итоге они должны быть записаны в страницу
        ldi     r16, 0xA0  
        mov     r1, r16
        ldi     r16, 0xBB  
        mov     r0, r16

        adiw ZH:ZL, 2; инкремент адресса позиции слов

        ldi     R17, (1<<SPMEN)   ; в R17 передаётся параметр в регистр SPMCR
        call    commandSPM    ; собственно запись во временую страницу

        dec     R18
        brne    asddd

;ниже идет запись временной страницы в память программы по адреессу начиная с 0x20

        ldi     ZH, 0b00000000
        ldi     ZL, 0b00010000

                                               ; PGERS – команда на очистку страницы флеша
        ldi     R17, (1<<PGWRT) | (1<<SPMEN)   ; в R17 передаётся параметр в регистр SPMCR
        call    commandSPM
        ldi     R17, (1<<RWWSRE) | (1<<SPMEN)  ; ре-инициализация страницы
        call    commandSPM



до записи в программе идет:

Код
0000: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0010: FF FF FF FF 00 00 FF FF FF FF FF FF FF FF FF FF | ................
0020: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0030: FF FF FF FF 00 00 FF FF FF FF FF FF FF FF FF FF | ................
0040: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................

после стирания


Код
0000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0020: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0030: FF FF FF FF 00 00 FF FF FF FF FF FF FF FF FF FF | ................
0040: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................


после записи


Код
0000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0010: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0020: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0030: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0040: 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0050: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................
0060: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF | ................



вот как бы показывается что оно стирает, а моих данных не пишит, так же пробовал писать страницу не на 0х20 адресс, а на 0х00, затертый мною до этого.




вот собственно проект, ISUS PROTEUS 7.7 SP2
Сам код находится в atmega8515.asm файле, то есть микроконтролер (U2 - atmega8515-2.asm ) передает информацию контроллеру U1 о том что нужно записать флеш.
Начало процедуры по адрессу 0x1828.