Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-июн-26 06:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 2015-янв-31 17:47 
Не в сети

Зарегистрирован: 2015-янв-31 17:38
Сообщения: 1
Здравствуйте, первый раз работаю с контроллером К1886ВЕ2У, не могу разобраться с записью во флеш память. Помимо записи использую прерывания для передачи по USART2 и АЦП. Смотрел пример из каталога ./IDE1886/Examples/Eval8_WRFlash. Вот реализация моей функции:

static unsigned char WRDIV @ 0x717;
...
void write_flash(unsigned long addr, unsigned long data)
{
unsigned char ucDataL,ucDataH;

GLINTD = 1;
TMR3L = 0;
TMR3H = 0;
PIE1 = 0;
PIE2 = 0;
RC2IF = 0;
clrwdt();
WRDIV = (5*32);

PR3H = 0x0A; // (32 * 5 * 32/2) = 0xA00
PR3L = 0x00;
TBLPTRH = (unsigned char)(addr>>8);
TBLPTRL = (unsigned char)addr;

ucDataL = (unsigned char)data;
ucDataH = (unsigned char)(data>>8);

PEIE = 1;
TMR3IE = 1;
TMR3ON = 1;
#asm
tlwt 1, ucDataH
tablwt 0, 0,ucDataL
#endasm

TMR3IF = 0;
TMR3ON = 0;
clrwdt();
GLINTD = 0;

}

Еще я так понял, что необходимо чтобы на ноге MCLR, был выставлен уровень +12В. Вопрос, это реализуется программно, или только в железе?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-фев-02 12:28 
Не в сети

Зарегистрирован: 2009-май-25 16:41
Сообщения: 206
Откуда: АО "ПКК Миландр"
guest писал(а):
Здравствуйте, первый раз работаю с контроллером К1886ВЕ2У, не могу разобраться с записью во флеш память. Помимо записи использую прерывания для передачи по USART2 и АЦП. Смотрел пример из каталога ./IDE1886/Examples/Eval8_WRFlash. Вот реализация моей функции:

static unsigned char WRDIV @ 0x717;
...
void write_flash(unsigned long addr, unsigned long data)
{
unsigned char ucDataL,ucDataH;

GLINTD = 1;
TMR3L = 0;
TMR3H = 0;
PIE1 = 0;
PIE2 = 0;
RC2IF = 0;
clrwdt();
WRDIV = (5*32);

PR3H = 0x0A; // (32 * 5 * 32/2) = 0xA00
PR3L = 0x00;
TBLPTRH = (unsigned char)(addr>>8);
TBLPTRL = (unsigned char)addr;

ucDataL = (unsigned char)data;
ucDataH = (unsigned char)(data>>8);

PEIE = 1;
TMR3IE = 1;
TMR3ON = 1;
#asm
tlwt 1, ucDataH
tablwt 0, 0,ucDataL
#endasm

TMR3IF = 0;
TMR3ON = 0;
clrwdt();
GLINTD = 0;

}

Еще я так понял, что необходимо чтобы на ноге MCLR, был выставлен уровень +12В. Вопрос, это реализуется программно, или только в железе?


В спецификации это всё очень доступно описано. Нужно выполнить следующие действия:
- подать на MCLR 12 вольт,
- загрузить WRDIV исходя из тактовой частоты,
- запретить лишние прерывания, чтобы не мешали,
- настроить прерывание для завершения операции записи (время не менее длительности операции записи (см. соответствующую таблицу)),
- сбросить WDT чтобы он не прервал,
- выполнить собственно запись,
- прерывание (либо по вектору, либо просто) окончит запись и продолжит выполнение программы.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB