Добрый день!
Уважаемые форумчане, может кто работал с EEPROM ATxmega16A4. Подскажите почему не пишет в EEPROM? Делаю все как описано в апноуте AVR1315: Accessing the XMEGA EEPROM. Вот пример функции записи:
void tEEPROMWriteByte(UINT16 adr, UINT8 data)
{
/* Порядок записи в EEPROM
1 дождаться сброста флага занятости (NWM.STATUS 7бит)
2 Загрузить адрес в регистры NVM.ADDR1 NVM.ADDR0
3 загрузить данные в регистр NVM.DATA0
4 Загрузить команду записи в регистр команды (NVM.CMD)
5 Поставить защиту на изменение регитсров ввода вывода (CCP = 0xD
6 в течении 4х циклов записать команду выполнить (NVM.CTRLA 0бит)
7 операция операция завершиться при сбросе флага занятости (NWM.STATUS 7бит)
*/
//if(!(NVM.STATUS & 0x80))
//{
while((NVM.STATUS & 0x80));
//загрузить в команду записать в буфер
NVM.CMD = 0x33;
//записываем адрес загрузки страничного буфера
NVM.ADDR1 = (adr ››
;
NVM.ADDR0 = (adr & 0xFF);
//записываем данные в старничный буфер
NVM.DATA0 = data;
__delay_cycles(30);
//ставим команду записи страницы
while((NVM.STATUS & 0x80));
NVM.CMD = 0x35;
//записываем адрес загрузки страничного буфера
NVM.ADDR1 = adr ›› 8;
NVM.ADDR0 = adr & 0xFF;
CCP = 0xD8;
NVM.CTRLA |= 0x01;
while((NVM.STATUS & 0x80));
//}
}
среда IAR.
Оно может и пишет но после сброса питания всё опять в 0xFF.