реклама на сайте
подробности

 
 
> Программнай запись во флеш память, dsPIC33FJ128MC506
Iptash
сообщение Oct 17 2015, 12:24
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Здравствуйте все.

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

может есть еще какие то установки?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Iptash
сообщение Oct 18 2015, 13:03
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Вообщем делюсь своими эксперементальными выводами. Во первых нужно выравнивание константы делать не меньше 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;
после включать.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01872 секунд с 7
ELECTRONIX ©2004-2016