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

 
 
> ATxMEGA и EERPOM
Navovvol
сообщение Oct 13 2011, 11:47
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



Пытаюсь написать подпрограммы записи и чтения внутренней EEPROM на асме
Нифига не получается, не могу понять почему.
Вот что сказано в даташите:

30.11.5.1. Загрузка страничного буфера EEPROM

Данная команда предназначена для записи одного байта в страничный буфер EEPROM.

Запишите в регистр NVM CMD команду загрузки страничного буфера EEPROM
Запишите в регистр NVM ADDR0 адрес, по которому выполняется запись.
Запишите в регистр NVM DATA0 данные, подлежащие записи. Это приведет к запуску исполнения команды.

30.11.5.4. Запись страницы EEPROM

Данная команда предназначена для записи загруженного страничного буфера EEPROM в одну страницу EEPROM. Запись выполняется только тех ячеек, которые предварительно были загружены в страничный буфер EEPROM.

Запишите в регистр NVM CMD команду записи страницы EEPROM.
Запишите в регистр NVM ADDR адрес подлежащей записи страницы EEPROM.
Установите бит CMDEX в регистре NVM CTRLA с использованием привязанной ко времени последовательности CCP.

Флаг BUSY регистра NVM STATUS равен единице вплоть до завершения операции.


И вот что я нагородил :

Код
.macro stsi     ; Запись в порт IO
       ldi r16,@1
       sts @0,r16
.endm

stsi NVM_CMD,0x33
stsi NVM_ADDR0,0
stsi NVM_DATA0,0b10101010

stsi NVM_ADDR0,0
stsi NVM_CMD,0x34
stsi CPU_CCP,0xD8
stsi NVM_CTRLA,1


после этого устанавливается флаг NVMBUSY, когда он снимается жму ALT+6 смотрю на EEPROM и DATA MAPPED_EEPROM, там везде FF. Че не так делаю ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Юрий_СВ
сообщение Oct 13 2011, 13:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Делаю так :
(предварительно включаю отображение EEPROM на пространство памяти)
Код
void x_EEPROM_Write_Byte(unsigned char * adr, unsigned char data)
{
asm volatile("cli\n\t"::);
while ((NVM.STATUS & NVM_NVMBUSY_bm) == NVM_NVMBUSY_bm);
*(unsigned char*)((unsigned int)adr+EEPROM_START_ADR)=data;
NVM.CMD=0x35;   //
NVM.ADDR0=adr;
NVM.ADDR1=((unsigned int)adr)>>8;
NVM.ADDR2=0;
CPU_CCP=0xd8;   //
NVM.CTRLA=0x01; // CMDEX
while ((NVM.STATUS & NVM_NVMBUSY_bm) == NVM_NVMBUSY_bm);
NVM.CMD=0x00;
asm volatile("sei\n\t"::);
}



Сообщение отредактировал Юрий_СВ - Oct 13 2011, 13:07
Go to the top of the page
 
+Quote Post
Navovvol
сообщение Oct 13 2011, 13:22
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



Цитата(Юрий_СВ @ Oct 13 2011, 17:05) *
Делаю так :
(предварительно включаю отображение EEPROM на пространство памяти)

Это как ? где ? в АВР студио 5 ?
посмотрел ваш код (не пробовал). Вы используете команду 0х35 -стирание и запись страницы, а что он записывает ? регистры DATA ? или буфер, который хз где.
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Oct 13 2011, 13:44
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Цитата(Navovvol @ Oct 13 2011, 16:22) *
Это как ? где ? в АВР студио 5 ?

NVM.CTRLB=0x0b;
(влияет только на способ чтения/записи данных - через регистр DATA или через запись по адресу памяти)
Цитата(Navovvol @ Oct 13 2011, 16:22) *
Вы используете команду 0х35 -стирание и запись страницы, а что он записывает ? регистры DATA ? или буфер, который хз где.

Он записывает только ту часть буфера, которая была изменена.
Цитата
EEPROM page buffer locations that are loaded will get tagged by the NVM Controller. During a
page write or page erase, only target locations will be written or erased. Locations that are not
target, will not be written or erased, and the corresponding EEPROM location will remain
unchanged. This means that also before an EEPROM page erase, data must be loaded to the
selected page buffer location to tag them. If the data in the page buffer is not going to be written
afterword, the actual values in the buffer does matter.


Сообщение отредактировал Юрий_СВ - Oct 13 2011, 13:48
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 13 2011, 13:56
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Юрий_СВ @ Oct 13 2011, 16:44) *
NVM.CTRLB=0x0b;
(влияет только на способ чтения/записи данных - через регистр DATA или через запись по адресу памяти)

Он записывает только ту часть буфера, которая была изменена.


Проблема может ещё быть в ревизии кристала:
у первых версий были проблемы с записью в EEPROM и FLASH - запись организовывалась с использованием прерываний и sleep-а.
Go to the top of the page
 
+Quote Post
Navovvol
сообщение Oct 14 2011, 05:44
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



Цитата(_Артём_ @ Oct 13 2011, 17:56) *
Проблема может ещё быть в ревизии кристала:
у первых версий были проблемы с записью в EEPROM и FLASH - запись организовывалась с использованием прерываний и sleep-а.

В даташите, errata на две ревизии rev.H и rev.G
На контроллере, который я использую rev.A, а где для него errata? всё облазил, нигде не нашел.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Navovvol   ATxMEGA и EERPOM   Oct 13 2011, 11:47
|- - Юрий_СВ   Цитата(_Артём_ @ Oct 13 2011, 16:56) Проб...   Oct 13 2011, 14:13
||- - _Артём_   Цитата(Юрий_СВ @ Oct 13 2011, 17:13) Не з...   Oct 13 2011, 15:11
||- - Юрий_СВ   Цитата(_Артём_ @ Oct 13 2011, 18:11) Из d...   Oct 13 2011, 15:22
|- - _Артём_   Цитата(Navovvol @ Oct 14 2011, 08:44) В д...   Oct 14 2011, 11:55
|- - Navovvol   Цитата(_Артём_ @ Oct 14 2011, 15:55) Посм...   Oct 14 2011, 12:17
|- - _Артём_   Цитата(Navovvol @ Oct 14 2011, 15:17) Oli...   Oct 14 2011, 12:40
|- - Navovvol   Цитата(_Артём_ @ Oct 14 2011, 16:40) Это ...   Oct 16 2011, 15:58
|- - _Артём_   Цитата(Navovvol @ Oct 16 2011, 18:58) Что...   Oct 16 2011, 19:01
|- - Navovvol   Цитата(_Артём_ @ Oct 16 2011, 23:01) Врод...   Oct 17 2011, 10:13
|- - _Артём_   Цитата(Navovvol @ Oct 17 2011, 13:13) 4-а...   Oct 17 2011, 11:29
- - Navovvol   Я запускал только в симуляторе. Всё это дело пишет...   Oct 13 2011, 16:53
|- - Юрий_СВ   Цитата(Navovvol @ Oct 13 2011, 19:53) Я з...   Oct 13 2011, 20:17
- - Navovvol   А в симуляторе AVR Studio 5 для AtXmega вообще воз...   Oct 14 2011, 11:41
- - Юрий_СВ   По идее, считать ревизию контроллера можно чем уго...   Oct 17 2011, 18:13
|- - _Артём_   Цитата(Юрий_СВ @ Oct 17 2011, 21:13) По и...   Oct 17 2011, 18:56
- - Navovvol   Считал REV.H через JTAG. ))   Oct 18 2011, 12:54


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

 


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


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