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

 
 
> Вопрос по работе с EEPROM в WinAVR, срочно нужна помощь
AlexPT
сообщение May 25 2007, 07:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 22-12-06
Пользователь №: 23 780



Здравствуйте! Прошу помочь. Нужны функции записи и чтения из/в EEPROM AT90CAN128. Беру примеры из Даташита и компилирую WinAVR, не работают. Преверяю в AVRStudio - не работают. Вот эти функции из Даташита:

/*********************************
*
* ЗАПИСЬ БАЙТА В int-EEPROM
*
*********************************/
void RTEEPROMwrite (u16 adrEEPROM, u08 databyte)
{
u08 savedSREG;

while(EECR & (1<<EEWE));
savedSREG = SREG // keep setting so it can be restored
SREG &= ~0x80;
EEAR = adrEEPROM; // set address
EEDR = databyte; // set data
EECR |= (1<<EEMWE); // set "write enable" bit
EECR |= (1<<EEWE); // set "write" bit
SREG = savedSREG; // restore SREG
EEAR = 0;

} // end of RTEEPROMwrite

/**********************************
*
* ЧТЕНИЕ БАЙТА ИЗ int-EEPROM
*
**********************************/
u08 RTEEPROMread (u16 adrEEPROM)
{
while(EECR & (1<<EEWE));
EEAR = adrEEPROM; // set address
EECR |= (1<<EERE); // set "read enable" bit
EEAR = 0;
return (EEDR);

} // end of RTEEPROMread

Хотел использовать функции из библиотеки:

uint8_t eeprom_read_byte (const uint8_t *addr);

void eeprom_write_byte (uint8_t *addr,uint8_t value);

Но не понятно как описать и работать с указателями на ячейки в EEPROM.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexPT
сообщение May 25 2007, 09:56
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 22-12-06
Пользователь №: 23 780



С EEAR = 0 это опечатка. Компилирую с уровнем оптимизации 0. Что такое фюз М103С я не знаю (я только недавно начал работать с WinAVR, так что прошу отнестисть с пониманием), но такого слова в makefile нет.
Хотелось бы по подробнее узнать по приведению типа u16 к типу const uint8_t*. Если можно поясните на примере.
Приведенный пример попробывал, не работает да он практически не отличается Даташитовского. Может необходима какая-то запись в makefile или .h файлы.
Go to the top of the page
 
+Quote Post
aesok
сообщение May 25 2007, 10:12
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(AlexPT @ May 25 2007, 13:56) *
С EEAR = 0 это опечатка. Компилирую с уровнем оптимизации 0. Что такое фюз М103С я не знаю


Про М103С извините ошибся, подумал что речь идет о ATmega128.

Посмотрите код который генериться для строк:
EECR |= (1<<EEMWE);
EECR |= (1<<EEWE);

Не уровне оптимизации -O0:
Код
  EECR |= (1<<EEMWE);
  92:    80 91 3c 00     lds    r24, 0x003C
  96:    84 60           ori    r24, 0x04; 4
  98:    80 93 3c 00     sts    0x003C, r24
  EECR |= (1<<EEWE);
  9c:    80 91 3c 00     lds    r24, 0x003C
  a0:    82 60           ori    r24, 0x02; 2
  a2:    80 93 3c 00     sts    0x003C, r24


И на -O1:
Код
  EECR |= (1<<EEMWE);
  8e:    e2 9a           sbi    0x1c, 2; 28
  EECR |= (1<<EEWE);
  90:    e1 9a           sbi    0x1c, 1; 28


В первом случае не соблюдается условие установки бита EEWE не позже 4 циклов после установки EEMWE.

Не используйте уровень оптимизации -O0, он нужен в очень редких случаях для отладки.
Используйте библиотечные функции, как с ними работать описано в avr-libc-user-manual в директори WinAVR/doc/avr-libc.

Анатолий.

Сообщение отредактировал aesok - May 25 2007, 10:16
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AlexPT   Вопрос по работе с EEPROM в WinAVR   May 25 2007, 07:09
- - Tcom   unsigned char EEPROM_read (unsigned int uiAdress)/...   May 25 2007, 07:32
- - IgorKossak   Цитата(AlexPT @ May 25 2007, 10:09) Хотел...   May 25 2007, 07:38
- - singlskv   Вот это лишнее: Цитата(AlexPT @ May 25 2007, ...   May 25 2007, 07:43
- - aesok   Цитата(AlexPT @ May 25 2007, 11:09) Здрав...   May 25 2007, 08:42
|- - 777777   Цитата(aesok @ May 25 2007, 14:12) Посмот...   Sep 30 2010, 06:40
|- - aesok   Цитата(777777 @ Sep 30 2010, 10:40) -O0 э...   Sep 30 2010, 06:50
|- - 777777   Цитата(aesok @ Sep 30 2010, 10:50) Такие ...   Sep 30 2010, 07:05
|- - aesok   Цитата(777777 @ Sep 30 2010, 11:05) Так в...   Sep 30 2010, 07:27
- - AlexPT   Большое спасибо за подсказку с оптимизацией. Все з...   May 25 2007, 11:02
- - defunct   В WinAVR есть готовые функции для работы с eeprom....   May 25 2007, 13:09
- - Mikron   добрый вечер решил поднять тему, просто проблема с...   Sep 29 2010, 22:10
- - alexeyv   используйте библиотечные функции. Например, для за...   Sep 30 2010, 04:51
- - Mikron   alexeyv, спасибо, но в даташите я не нашел нужно л...   Sep 30 2010, 04:58
- - ARV   Цитата(Mikron @ Sep 30 2010, 08:58) alexe...   Sep 30 2010, 05:47
- - alexeyv   Цитата(Mikron @ Sep 30 2010, 10:58) alexe...   Sep 30 2010, 07:19


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

 


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


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