|
|
 |
Ответов
|
Nov 23 2007, 11:27
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 12-04-07
Пользователь №: 26 980

|
Пробую записать страницу во flash предварительно заполнив последовательностью чисел. Проверяю в симуляторе: записывает по адресу 0х0200 только одно слово 3F 3E т.е. последнее записываемое слово. Куда пропадают остальные байты
ErasePageFlash(0x0200); for (i=0;i<32;i++) { a = i; a = a<<1; FillBuf((i*2), (i*2)+1, a); } WritePageToFlash(0x0200);
void FillBuf(unsigned char low, unsigned char hi, unsigned int c) { #asm ldd r1,y+3 ldd r0,y+2 ldd R30,y+1 ldd R31,y+0 #endasm SPMCSR = 0x01; #asm spm #endasm }
void WritePageToFlash(unsigned int c) { #asm ldd R31,y+1 ldd R30,y+0 #endasm SPMCSR = 0x05; #asm spm #endasm }
|
|
|
|
|
Nov 23 2007, 13:29
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 12-04-07
Пользователь №: 26 980

|
Цитата(=GM= @ Nov 23 2007, 16:05)  У вас адреса разные при заполнении и при записи. Переставьте r30 и r31, чтобы были одинаковые адреса. Разные - это я пробывал переставлять, остался последний вариант. Если переставить то все равно не работает. При заполнении используется ведь адрес слова во временной странице, а при записи номер страницы во flash.
|
|
|
|
|
Nov 23 2007, 19:13
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(Artёm @ Nov 23 2007, 16:29)  Разные - это я пробывал переставлять, остался последний вариант. Если переставить то все равно не работает. При заполнении используется ведь адрес слова во временной странице, а при записи номер страницы во flash. Процедура сложнее, чем Вы ее себе представляете. 1 Загружаем R0,R1 2 SPMCSR = 0x01 3 Ждем сброса SELFPRGEN 4 Делаем п 1,2,3 пока не заполним страницу 5 SPMCSR = 0x03 6 Ждем сброса SELFPRGEN 7 SPMCSR = 0x05 8 Ждем сброса SELFPRGEN Если хотим потом прочитать ,что записали 9 SPMCSR = 0x11 10 Ждем сброса SELFPRGEN Если опять ничего не записали ,смотрим ,может у нас есть фуз SELFPRG
|
|
|
|
|
Nov 26 2007, 10:27
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(bodja74 @ Nov 23 2007, 19:13)  Процедура сложнее, чем Вы ее себе представляете.
1 Загружаем R0,R1 2 SPMCSR = 0x01 3 Ждем сброса SELFPRGEN 4 Делаем п 1,2,3 пока не заполним страницу 5 SPMCSR = 0x03 6 Ждем сброса SELFPRGEN 7 SPMCSR = 0x05 8 Ждем сброса SELFPRGEN
Если хотим потом прочитать, что записали 9 SPMCSR = 0x11 10 Ждем сброса SELFPRGEN SELFPRGEN - это фьюз, он не изменяется просто так, например, он программируется внешним последовательным программатором, с помощью команды Write Extended Fuse Bits.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Nov 26 2007, 10:56
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 12-04-07
Пользователь №: 26 980

|
Цитата(=GM= @ Nov 26 2007, 13:27)  SELFPRGEN - это фьюз, он не изменяется просто так, например, он программируется внешним последовательным программатором, с помощью команды Write Extended Fuse Bits. Я и говорю зачем его ждать если он фьюз... Нашел в исходниках: while( SPMControllRegister & (1<<SPMEN) ); // Wait until Flash write completed Может bodja74 это имел ввиду?...
|
|
|
|
Сообщений в этой теме
Artёm SPM ATtiny84 Nov 22 2007, 06:29 defunct Цитата(Artёm @ Nov 22 2007, 09:29) Правил... Nov 22 2007, 10:58 Artёm Еще вопрос: где находится (в какой памяти) Tempora... Nov 23 2007, 10:39 Сергей Борщ Цитата(Artёm @ Nov 23 2007, 12:39) Еще во... Nov 23 2007, 11:01   defunct Цитата(Artёm @ Nov 23 2007, 16:29) Если п... Nov 23 2007, 14:37    Artёm Цитата(bodja74 @ Nov 23 2007, 22:13) ...
... Nov 26 2007, 05:41       =GM= Можно и подождать, вреда не будет, а можно и не жд... Nov 26 2007, 12:40        Artёm Цитата(=GM= @ Nov 26 2007, 15:40) Можно и... Nov 26 2007, 13:14         =GM= Само собой для вашего случая. Не будем же мы обсуж... Nov 26 2007, 14:51 Artёm Спасибо всем ответившим.
Разобрался.
#asm
ldd r1,... Nov 26 2007, 07:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|