Где 0x02 - адрес, по которому будет произведено чтение/запись, в данном случае взят случайно. Функция eeprom_busy_wait() нужна для ожидания готовности EEPROM.
Для других просто поменяйте имена регистра и битов: (EECR; EEPE; EEARL; EERE; EEDR; EEPE; EEPM1; EEPM0; EEMPE;)
Зачем же так сложно?
smk
Mar 30 2008, 09:16
Цитата
Зачем же так сложно?
По примеру из даташит. предложите проще и так чтоб точно работало и не оптимизировалсь что не надо.
aesok
Mar 30 2008, 10:15
Цитата(smk @ Mar 30 2008, 10:44)
По примеру из даташита я делал так (для Tiny24):
Предложеная вами функция "EEPROM_write_8" опасна в применении. Если между строками "EECR |= (1<<EEMPE);" и "EECR |= (1<<EEPE);" произойдет прерывание то запись в EEPROM не будет выполнена. Бит "EEPE" должен быть установлен в единицу не позже чем через 4 такта, после установки бита "EEMPE".
Анатолий.
Дон Амброзио
Mar 30 2008, 12:24
Удалено
smk
Mar 30 2008, 12:30
Цитата
Предложеная вами функция "EEPROM_write_8" опасна в применении. Если между строками "EECR |= (1<<EEMPE);" и "EECR |= (1<<EEPE);" произойдет прерывание то запись в EEPROM не будет выполнена. Бит "EEPE" должен быть установлен в единицу не позже чем через 4 такта, после установки бита "EEMPE".
Да, это правда, но только мы все люди умые, читаем даташит м запрещаем прерывания ДО использования и разрешаем после. Как показывает практика 4 такта всегда выполняется, но проверять не вредно. Пока работает уверенно в десятках девайсов.
_Pasha
Mar 30 2008, 16:06
Цитата(smk @ Mar 30 2008, 15:30)
Да, это правда, но только мы все люди умые, читаем даташит м запрещаем прерывания ДО использования и разрешаем после.