|
IAR и запись в EEPROM, Вопрос по реализации записи в eeprom в IAR |
|
|
|
May 16 2006, 10:31
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Запрещать прерывания нужно только что бы биты EEMWE и EEWE установились подряд! Код __disable_interrupt();
/* Write logical one to EEMWE */ EECR |= (1<<EEMWE); /* Start eeprom write by setting EEWE */ EECR |= (1<<EEWE);
__enable_interrupt(); а вот пока ждется окончание записи наоборот имеет смысл прервания разрешать! а то все уснет на 9 ms (если только конечно в перываниях еепром не пишется)
|
|
|
|
|
May 18 2006, 02:01
|

Профессионал
    
Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371

|
Цитата(IgorKossak @ May 17 2006, 19:41)  Посмотрите также здесь. Это я когда-то выкладывал исправленный файл иаровского исходника для работы с ЕЕПРОМ. Этим файлом надо заменить старый в ИАРЕ? как он работает (что исправлено от родного)? Бегло глянул - прерывания не запрещает.
--------------------
OrCAD, Altium,IAR, AVR....
|
|
|
|
|
May 18 2006, 11:31
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(arttab @ May 18 2006, 11:53)  Копаться в чужом тексте дело не благодарное. Ну я же дал себе труд покопаться в иаровском тексте. И нисколько не жалею. Надо же как-то квалификацию поднимать. Цитата(arttab @ May 18 2006, 11:53)  Жаль что нет описания изменений, но все равно спасибо. А описание можно свести к двум пунктам: 1) любая критическая работа с ЕЕПРОМ (за исключением кристаллов AT86RF401), требующая непрерываемости, обрамлена в обёртку типа: сохранить SREG CLI критическая работа с ЕЕПРОМ восстановить SREG 2) исправлена ошибка в подпрограмме записи в ЕЕПРОМ 64-битных чисел.
|
|
|
|
|
May 23 2006, 12:16
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(arttab @ May 16 2006, 12:15)  Спасибо всем! IAR сам не запрещает прорывания ни дожидается окончания записи
сделал так: __disable_interrupt(); //CLI
здесь пишу
while(EECR&(1<<EEWE)); __enable_interrupt(); А зачем так сложно? Гораздо проще объявить переменную в EEPROM. Тогда обращения к ней IAR делает автоматически все сам, со всеми прибамбасами.
|
|
|
|
|
May 24 2006, 02:01
|

Профессионал
    
Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371

|
Цитата А зачем так сложно? Гораздо проще объявить переменную в EEPROM. Тогда обращения к ней IAR делает автоматически все сам, со всеми прибамбасами. Я так тоже думал... Я обявил масив в еепром и пишу в него так: void Conf_B_B(unsigned char z, unsigned char y) { unsigned char __eeprom* ub; unsigned char* uc; unsigned char i=6; ub = Conf_BR + z; uc = str + y; *(ub) = *(uc); __disable_interrupt(); //CLI while (i) {*(ub) = *(uc); uc++; ub++; i--;} while(EECR&(1<<EEWE)); __enable_interrupt(); } Пришлось самому прерывания запрещать
--------------------
OrCAD, Altium,IAR, AVR....
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|