khlenar 5 17 октября, 2015 Опубликовано 17 октября, 2015 · Жалоба Здравствуйте все. Пытаюсь использовать возможность записи во флеш из программы, но почему то при стирании зависает процессор в железе, а в симуляторе нормально. вот написал код в начале программы // начало page =__builtin_tblpage(&MyRowData5InFlash[0]); offset =__builtin_tbloffset(&MyRowData5InFlash[0]); // читаем из флэшки TBLPAG = page; MyRowDataInRam[0] = __builtin_tblrdl(offset); MyRowDataInRam[1] = __builtin_tblrdh(offset); // стираем страницу NVMCON = 0x4042; offset = offset & 0xFF00; TBLPAG = page; __builtin_tblwtl(offset, 0); // Dummy TBLWT to load address __builtin_disi(5); // Disable interrupts for NVM unlock __builtin_write_NVM(); // Start write cycle // пишем в флешку MyRowDataInRam[0] = 0x1234; // MyRowDataInRam[1] = 333; NVMCON = 0x4001; offset = (offset & 0xFFFE); TBLPAG = page; __builtin_tblwtl(offset, MyRowDataInRam[0]); // Load write latches __builtin_tblwth(offset, MyRowDataInRam[1]); __builtin_disi(5); // Disable interrupts for NVM unlock __builtin_write_NVM(); // Start write cycle __builtin_disi(0); // конец может есть еще какие то установки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khlenar 5 18 октября, 2015 Опубликовано 18 октября, 2015 · Жалоба Вообщем делюсь своими эксперементальными выводами. Во первых нужно выравнивание константы делать не меньше 256 const unsigned int MyRowData1InFlash[] __attribute__((space(prog), aligned(256))) = { 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF... все функции написал на ассемблере(можно и сишные готовые использовать) . У меня используется АЦП 4 канала. Так вот, после процесса стирания АЦП перестает правильно работать. Нужно перед этим остановить преобразование AD1CON1bits.ADON = 0; после включать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться