Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программнай запись во флеш память
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Iptash
Здравствуйте все.

Пытаюсь использовать возможность записи во флеш из программы, но почему то при стирании зависает процессор в железе, а в симуляторе нормально.
вот написал код в начале программы
Код
        // начало
        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);
        // конец

может есть еще какие то установки?
Iptash
Вообщем делюсь своими эксперементальными выводами. Во первых нужно выравнивание константы делать не меньше 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;
после включать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.