Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: AppNotes или примеры кода
СообщениеДобавлено: 2010-апр-07 09:25 
Не в сети

Зарегистрирован: 2009-дек-14 14:29
Сообщения: 30
Откуда: Тула
В помощь друг-другу предлагаю выкладывать работоспособные куски кода. Вот например мой код, который пишет 104 константы в флэш по адресу 0x0801f000 из буфера Buf[104], находящегося в ОЗУ.

Напомню, что эти функции должны находиться в отдельном файле, в настройках которого надо указать, что код должен быть расположен в RAM.

Код:
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;

void ErasePage(DWORD Addr)
{
EEPROM_ADR = Addr;
EEPROM_CMD |= 0x0040;// XE=1
EEPROM_CMD |= 0x0400;// ERASE=1
Sleep(35);// 5.5us
EEPROM_CMD |= 0x2000;// NVSTR=1
Sleep(300000);// 46ms
EEPROM_CMD &= 0xFFFFFBFF;// ERASE=0
Sleep(35);// 5.5us
EEPROM_CMD &= 0xFFFFFFBF;// XE=0
EEPROM_CMD &= 0xFFFFDFFF;// NVSTR=0
Sleep(10); // 1.8us
}
//---------------------------------
void ProgramSignalsOn(void)
{
EEPROM_CMD |= 0x0040;// XE=1
EEPROM_CMD |= 0x1000;// PROG=1
Sleep(35);// 5.5us
EEPROM_CMD |= 0x2000;// NVSTR=1
Sleep(70);// 10.6us
}
//---------------------------------
void ProgramSignalsOff(void)
{
EEPROM_CMD &= 0xFFFFEFFF;// PROG=0
Sleep(35);// 5.5us
EEPROM_CMD &= 0xFFFFFFBF;// XE=0
EEPROM_CMD &= 0xFFFFDFFF;// NVSTR=0
Sleep(10); // 1.8us
}
//---------------------------------
void WriteFlash(DWORD Addr, DWORD Data)
{
EEPROM_ADR = Addr;
EEPROM_DI = Data;

Sleep(1);// 0.3us
EEPROM_CMD |= 0x0080;// YE=1   
Sleep(300);// 46us            
EEPROM_CMD &= 0xFFFFFF7F;// YE=0   
Sleep(1);// 0.3us
}
//---------------------------------
void StoreConst_RAM(void)
{
int i,j;
DisableInterrupts();
EEPROM_CMD |= 0x0001;// CON=1
ErasePage(0x0801f000);

for(i=0;i<4;i++)
  {
   EEPROM_ADR = 0x0801f000+i*4;

   ProgramSignalsOn();

   for(j=0;j<104;j+=4)
    {
     WriteFlash( 0x0801f000+i*4+j*4 ,Buf[i+j]);
   }

   ProgramSignalsOff();
  }
 
EEPROM_CMD &= 0xFFFFFFFE;// CON=0
EnableInterrupts();
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Для SysTick
СообщениеДобавлено: 2010-апр-07 11:03 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 476
Работа с таймером ядра SysTick, есть мастер настройки под Кейл


Вложения:
Sys_Tick_1986.zip [1.34 КБ]
Скачиваний: 896
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-13 19:05 
Не в сети

Зарегистрирован: 2010-сен-04 18:34
Сообщения: 4
Откуда: Санкт-Петербург
Работаю с отладочной платой 1986ВЕ91Т в Keil 4.10. Пока два тестовых проекта. В первом мигаем светодиодами по прерыванию от TIM1, второй - выводим на MT12864 логотип напрямую через GPIO


Вложения:
Keil uVision.rar [192.4 КБ]
Скачиваний: 915
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 2010-сен-24 17:52 
Не в сети

Зарегистрирован: 2010-сен-04 18:34
Сообщения: 4
Откуда: Санкт-Петербург
Добавлено 2 проекта: appn003 - принимаем строку по прерыванию UART2 (9600 8N1) и отправляем назад через DMA; appn004 - выводим синусоиду 100Гц на DAC1 и косинусоиду на DAC2 в синхронном режиме по прерыванию TIM1.


Вложения:
Keil uVision.rar [385.09 КБ]
Скачиваний: 974
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Утилита загрузки флеш через UART
СообщениеДобавлено: 2011-мар-16 17:27 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 666
Откуда: г. Санкт-Петербург
Предлагаю утилиту загрузки флеш через UART. Буду рад увидеть комментарии.
24.01.14г. новая версия теперь здесь viewtopic.php?f=17&t=1739#p8277


Последний раз редактировалось vasili 2014-янв-24 09:42, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 2011-мар-18 12:44 
Не в сети

Зарегистрирован: 2011-мар-18 08:32
Сообщения: 36
vasili
Загрузчик вещь нужная :) все работает!!! огромное спасибо !!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 2011-мар-23 12:05 
Не в сети

Зарегистрирован: 2011-янв-17 09:13
Сообщения: 28
Откуда: Н.Новгород
Огромное спасибо за загрузчик :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AppNotes или примеры кода
СообщениеДобавлено: 2012-мар-27 13:06 
Не в сети

Зарегистрирован: 2012-мар-27 09:23
Сообщения: 3
Добрый день.
Необходимо сделать проект, подобный bootuart из этой ветки.
Keil 4.21.0.0 , компилятор и линковщик 4.1.0.713. C Keil до этого не работал.
В "лоб" проект, как он лежит в архиве в этом форуме, скомпилировать не смог - не хватает выделенной на вкладке "Options for Еarget1"-"Target" памяти 0x400.
Изменил на вкладке C/C+ уровень оптимизации - проект собрался, но прошить кристалл (демоплата 1986ВЕ91 +Ulink )
не получается. Сообщение об ошибке при этом совершенно неинформативное.

Пробую собрать пустой проект, лишь бы он запускался целиком из ОЗУ. Scatter файл настроил по образу проекта bootuart
Код:
LR_IROM1 0x20007800 0x00000400  {    ; load region size_region
  ER_IROM1 0x20007800 0x00000400  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20007C00 0x00000400  {  ; RW data
   .ANY (+RW +ZI)
  }
}

Проект собирается, но прошиваться тоже не хочет - ругается что нет "Algorithm" для области памяти 0x20007800....
Я так понимаю, речь идет об алгоритме прошивке флэш, память 0x20000000 и выше- это ОЗУ. Файлы *.flm перепробовал все три, что гуляют по этому форуму.
Проекты работающие из флэш прошиваются нормально. В том числе и с включенными файлами, которые надо выполнять из ОЗУ.

Что я делаю не так ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AppNotes или примеры кода
СообщениеДобавлено: 2012-мар-28 10:22 
Не в сети

Зарегистрирован: 2011-дек-27 08:33
Сообщения: 108
Откуда: АО "ПКК Миландр"
vertu69 писал(а):
Добрый день.
Необходимо сделать проект, подобный bootuart из этой ветки.
Keil 4.21.0.0 , компилятор и линковщик 4.1.0.713. C Keil до этого не работал.
В "лоб" проект, как он лежит в архиве в этом форуме, скомпилировать не смог - не хватает выделенной на вкладке "Options for Еarget1"-"Target" памяти 0x400.
Изменил на вкладке C/C+ уровень оптимизации - проект собрался, но прошить кристалл (демоплата 1986ВЕ91 +Ulink )
не получается. Сообщение об ошибке при этом совершенно неинформативное.

Пробую собрать пустой проект, лишь бы он запускался целиком из ОЗУ. Scatter файл настроил по образу проекта bootuart
Код:
LR_IROM1 0x20007800 0x00000400  {    ; load region size_region
  ER_IROM1 0x20007800 0x00000400  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20007C00 0x00000400  {  ; RW data
   .ANY (+RW +ZI)
  }
}

Проект собирается, но прошиваться тоже не хочет - ругается что нет "Algorithm" для области памяти 0x20007800....
Я так понимаю, речь идет об алгоритме прошивке флэш, память 0x20000000 и выше- это ОЗУ. Файлы *.flm перепробовал все три, что гуляют по этому форуму.
Проекты работающие из флэш прошиваются нормально. В том числе и с включенными файлами, которые надо выполнять из ОЗУ.

Что я делаю не так ?


В принципе Вы все делаете так как надо, только не надо прошивать (Download). Для отладки из ОЗУ надо в закладке "Debug" поставить галочку "Load Application at Startup", в закладке "Utilities" снять галочку "Update Target...". Теперь при старте отладки программа загрузится в RAM (если конечно Вы правильно указали адреса для линкера), но стартовать будит все равно с загрузочной программы (адрес 0х000000А6). Загрузить нужное значение в R15(PC) можно либо вручную, либо через командную строку дебагера (.ini фаил).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AppNotes или примеры кода
СообщениеДобавлено: 2012-мар-28 17:34 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 666
Откуда: г. Санкт-Петербург
Предлагаю материалы по загрузке программ во внутреннюю SRAM из ПЗУ 5576РС1У для МК 1986ВЕ92 без использования внутренней Flash.
Буду рад увидеть комментарии.

P.S. 29.03.12 поправил проект в части сброса. До этого сброс не работал из за тактирования от HSE, а не от HSE/2.


Вложения:
BOOT5576.rar [60.58 КБ]
Скачиваний: 589
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AppNotes или примеры кода
СообщениеДобавлено: 2012-мар-29 08:12 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1281
Откуда: АО "ПКК Миландр"
vasili писал(а):
P.S. 29.03.12 поправил проект в части сброса. До этого сброс не работал из за тактирования от HSE, а не от HSE/2.


Надо бы обновить микросхемы, эту ошибку уже исправили, ее даже в errate нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AppNotes или примеры кода
СообщениеДобавлено: 2012-июн-05 15:54 
Не в сети

Зарегистрирован: 2011-янв-17 09:13
Сообщения: 28
Откуда: Н.Новгород
Нет не у кого простенького примера под IAR с использованием прерываний(в идеале от таймера). Интересует именно С++ или авто в настройках проекта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AppNotes или примеры кода
СообщениеДобавлено: 2013-мар-09 18:18 
Не в сети

Зарегистрирован: 2013-мар-01 18:26
Сообщения: 3
Откуда: Санкт-Петербург - Воронеж
Добавлю простейший пример на ассемблере UAL ARM ASM Keil.
"Пример моргает светодиодом".


Вложения:
mdr32led.zip [49.39 КБ]
Скачиваний: 412
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AppNotes или примеры кода
СообщениеДобавлено: 2013-мар-31 09:58 
Не в сети

Зарегистрирован: 2013-мар-01 18:26
Сообщения: 3
Откуда: Санкт-Петербург - Воронеж
Добавлю второй пример, но уже на GNU AS:

http://gimmor.blogspot.com/2013/03/mdr3 ... ample.html


Вложения:
mdr32gnuas.zip [12.93 КБ]
Скачиваний: 312
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AppNotes или примеры кода
СообщениеДобавлено: 2013-апр-17 06:12 
Не в сети

Зарегистрирован: 2013-апр-12 09:48
Сообщения: 5
Откуда: Томск
Предлагаю свою систему макросов и правил (пользуюсь ею уже много лет), может кому понравится...
Данные типы и правила позволяют исключить проблему типов при использовании процессоров разной разрядности.


Вложения:
macros.zip [4.62 КБ]
Скачиваний: 494
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

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


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

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


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

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