Быстрый старт с МК K1921BK01T

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

overmars13
Сообщения: 5
Зарегистрирован: 15 июл 2016, 11:59

Re: Быстрый старт с МК K1921BK01T

Сообщение overmars13 »

Установил в IAR как указано в инструкции, однако возникает ошибка с файлом.
Fri Jul 15, 2016 11:00:26: SFR registration problem: Empty SFR group declaration found.
group =
C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.3\арм\CONFIG\debugger\Niiet\ioK1921BK01T.ddf
dav
Сообщения: 208
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: Быстрый старт с МК K1921BK01T

Сообщение dav »

overmars13 писал(а):Установил в IAR как указано в инструкции, однако возникает ошибка с файлом.
Fri Jul 15, 2016 11:00:26: SFR registration problem: Empty SFR group declaration found.
group =
C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.3\арм\CONFIG\debugger\Niiet\ioK1921BK01T.ddf
Попробуйте заменить файл "C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.3\арм\CONFIG\debugger\Niiet\ioK1921BK01T.ddf" на файл из архива во вложении.
Вложения
ioK1921BK01T.zip
файл ioK1921BK01T.ddf
(256.17 КБ) 241 скачивание
AlexPo
Сообщения: 2
Зарегистрирован: 20 янв 2016, 13:41

Re: Быстрый старт с МК K1921BK01T

Сообщение AlexPo »

Пытаюсь начать работать с мк К1921ВК01Т в Keil, но пока безуспешно.
1. Попытался подключить файл .pack, предоставленный пользователем R Max, но Keil ругается, что он поддерживает pack файлы только до версии 1.2 и рекомендует обновить MDK-арм. По некоторым причинам я не могу этого сделать.
2. Попытался подключить .zip файл, предоставленный пользователем dav, но Pack Installer ругается на отсутствие PDSC файла.
3. Пытаюсь вручную вбить в базу данных как описано в Быстрый_старт_К1921ВК01Т.pdf, но данные почему-то не добавляются. Т.е. ввожу данные (копи-паст), нажимаю кнопку ADD окна Device Database, но при создании нового проекта микроконтроллер не отображается.

uVision V5.10.0.2

Что посоветуете?
dav
Сообщения: 208
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: Быстрый старт с МК K1921BK01T

Сообщение dav »

AlexPo писал(а):Пытаюсь начать работать с мк К1921ВК01Т в Keil, но пока безуспешно.
1. Попытался подключить файл .pack, предоставленный пользователем R Max, но Keil ругается, что он поддерживает pack файлы только до версии 1.2 и рекомендует обновить MDK-арм. По некоторым причинам я не могу этого сделать.
2. Попытался подключить .zip файл, предоставленный пользователем dav, но Pack Installer ругается на отсутствие PDSC файла.
3. Пытаюсь вручную вбить в базу данных как описано в Быстрый_старт_К1921ВК01Т.pdf, но данные почему-то не добавляются. Т.е. ввожу данные (копи-паст), нажимаю кнопку ADD окна Device Database, но при создании нового проекта микроконтроллер не отображается.

uVision V5.10.0.2

Что посоветуете?
Доброго времени суток!

Добавление микроконтроллера K1921BK01T в базу данных устройств «LegacyDeviceDatabase» возможно только в полной версии Keil.
В "Быстром старте" также даны указания по настройкам в пробной версии Keil:
Если Вы используете пробную версию Keil, то в качестве микроконтроллера выберите «ARMCortexM4»-> «ARMCM4_FP». В этом случае придется вручную настроить:
  • параметры микроконтроллера (IRAM(0x20000000-0x2002FFFF) IROM(0x00000000-0x000FFFFF)),
  • для отладки и просмотра регистров МК дополнительно настраиваем файл System-ViewerFile (*.Sfr) – указываем «арм\ SFD\Niiet\ K1921BK01T\ K1921BK01T.SFR».
  • файл алгоритма программирования загрузочной Flash (указываем путь «арм\Flash\ K1921BK01T.FLM» выбрать из списка при нажатии на кнопку “Add”, см. рисунок 2.5)
  • копировать файлы startup_K1921BK01T.s (расположен в «арм\Startup\Niiet\ K1921BK01T\ startup_K1921BK01T.s»), K1921BK01T.h (расположен в «арм\INC\Niiet\ K1921BK01T\ K1921BK01T.h») в директорию нового проекта.
AlexPo
Сообщения: 2
Зарегистрирован: 20 янв 2016, 13:41

Re: Быстрый старт с МК K1921BK01T

Сообщение AlexPo »

Большое спасибо, dav за быстрый ответ. Всё таки дело было в устаревшей версии MDK-арм. Файл .pack встал на более свежую версию (кажется 5.15 или 5.16). Правда немного кривовато. При отображении дерева подключенных микроконтроллеров, отображается не как у других производителей непосредственно в корне дерева, а вложен в папку General. Ну это мелочи. Попробовал откомпилировать и залить во flash предлагаемую программку blinky. Правда, у меня платка от Вектора, но для начала это не важно. Откомпилировалось и прошилось всё нормально. Но при отладке вылетает в HardFault. Попробовал с симулятором, без железа, то же самое. Вылетает в startup_K1921BK01T.s
при переходе к main:
LDR R0, =__main
BX R0

Не могли бы вы прояснить эту ситуацию? Кроме этого нет ли нормального файла инициализации микроконтроллера system_K1921BK01T.c (прежде всего PLL с установкой на максимальную частоту)? И, вообще, есть ли примеры написанные непосредственно для Keil?
Аватара пользователя
Лашкевич
Сообщения: 372
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Контактная информация:

Re: Быстрый старт с МК K1921BK01T

Сообщение Лашкевич »

Добрый день. Раз вы работаете с нашим VectorCARD в кейле, то надо бы выпустить уже мигание светодиодиков именно для неё. Собрал сегодня проект для кейла на основе тех примеров, что мы поставляем со средой на эклипсе. Возможно, проект собран не по канонам разработки в кейле (мы в нем не работаем), но светодиоды мигают. Проект можно скачать здесь, пробуйте. Проект сделан в Keil V5.17.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/
Fiamma
Сообщения: 7
Зарегистрирован: 12 авг 2016, 20:20

Re: Быстрый старт с МК K1921BK01T

Сообщение Fiamma »

Вопрос по файлу линкера "K1921BK01T_RAM.icf". Он содержит следующие строки:

Код: Выделить всё

do not initialize { readwrite };
//initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

/* place in ROM_region   { readonly }; */
place in RAM_region   { readonly, readwrite,
                        block CSTACK, block HEAP };
Такое положение вещей вызывает ошибку линкера:
Error[Lp050]: placement includes both uninitialized sections and sections with content

Практика показала, что если закомментить строку do not initialize { readwrite };, ошибка превратится в предупреждение аналогичного содержания, и проект соберется. Собственно, вопрос заключается в том, почему необходимо не инициализировать секции памяти, доступные для чтения и записи, и вообще зачем сделано так, если и без этого все работает?
Аватара пользователя
Лашкевич
Сообщения: 372
Зарегистрирован: 13 май 2015, 13:10
Предприятие: ООО "НПФ Вектор"
Откуда: Москва
Контактная информация:

Re: Быстрый старт с МК K1921BK01T

Сообщение Лашкевич »

Я абсолютно не разбираюсь в синтаксисе IARовского линкера, но когда мы на фирме работали в иаре с K1921BK01T, мы использовали вот такой файл компоновщика:

Код: Выделить всё

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\кортекс_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x20000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
define symbol __ICFEDIT_region_ROM_end__   = 0x000FFFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x2002FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__   = 0x800;
/**** End of ICF editor section. ###ICF###*/


define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

do not initialize { readwrite };
//initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

/* place in ROM_region   { readonly }; */
place in RAM_region   { readonly, readwrite,
                        block CSTACK, block HEAP };
Может быть, это поможет. Что тут написано сказать не могу, не разбираюсь.
С уважением,
Лашкевич Максим.
Инженер-программист ООО "НПФ Вектор", Москва.
http://motorcontrol.ru/
dks1980
Сообщения: 8
Зарегистрирован: 26 янв 2016, 10:22

Re: Быстрый старт с МК K1921BK01T

Сообщение dks1980 »

Добрый день.
Пытаюсь разобраться с модулем захвата контроллера К1921ВК01Т. Необходимо захватывать с прерываниями передний и задний фронт.
Почему-то работает захват только в регистр cap0, в cap1-3 захват не происходит.

Код: Выделить всё

void Cap_Init(uint8_t priority)
{
 GPIO_Init_TypeDef GPIOInit;
 // инициализация выводов блоков CAP0
 GPIO_Init_TypeDef GPIO_InitStruct;
 GPIO_StructInit(&GPIO_InitStruct);
 GPIO_InitStruct.GPIO_Dir = GPIO_Dir_In;
 GPIO_InitStruct.GPIO_Out = GPIO_Out_Dis;
 GPIO_InitStruct.GPIO_AltFunc = GPIO_AltFunc_2;
 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AltFunc;
 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5 | GPIO_Pin_6;
 GPIO_Init(NT_GPIOE, &GPIO_InitStruct);

 // инициализация блока захвата
 RCC_PeriphRstCmd(RCC_PeriphRst_CAP0, ENABLE);
 RCC_PeriphRstCmd(RCC_PeriphRst_CAP1, ENABLE);
 RCC_PeriphRstCmd(RCC_PeriphRst_CAP2, ENABLE);

 // выбираем CAP режим
 CAP_Init_TypeDef CAP_InitStruct;
 CAP_StructInit(&CAP_InitStruct);
 CAP_InitStruct.CAP_Mode = CAP_Mode_Capture;
 CAP_Init(NT_CAP0, &CAP_InitStruct);
 CAP_Init(NT_CAP1, &CAP_InitStruct);
 CAP_Init(NT_CAP2, &CAP_InitStruct);

 // настраиваем CAP режим
 CAP_Capture_Init_TypeDef CAP_Capture_InitStruct;
 CAP_Capture_StructInit(&CAP_Capture_InitStruct);
 CAP_Capture_InitStruct.CAP_CaptureMode = CAP_Capture_Mode_Cycle;
 CAP_Capture_InitStruct.CAP_Capture_PolarityEvent0 = CAP_Capture_Polarity_PosEdge;
 CAP_Capture_InitStruct.CAP_Capture_PolarityEvent1 = CAP_Capture_Polarity_NegEdge;
 CAP_Capture_InitStruct.CAP_Capture_RstEvent0 = ENABLE;
 CAP_Capture_InitStruct.CAP_Capture_RstEvent1 = ENABLE;
 CAP_Capture_Init(NT_CAP0, &CAP_Capture_InitStruct);
 CAP_Capture_Init(NT_CAP1, &CAP_Capture_InitStruct);
 CAP_Capture_Init(NT_CAP2, &CAP_Capture_InitStruct);

 // включаем прерывание по событию
 CAP_ITCmd(NT_CAP0, CAP_ITSource_CapEvent0 | CAP_ITSource_CapEvent1, ENABLE);
 CAP_ITCmd(NT_CAP1, CAP_ITSource_CapEvent0 | CAP_ITSource_CapEvent1, ENABLE);
 CAP_ITCmd(NT_CAP2, CAP_ITSource_CapEvent0 | CAP_ITSource_CapEvent1, ENABLE);

 Энвик_EnableIRQ(CAP0_IRQn);
 Энвик_EnableIRQ(CAP1_IRQn);
 Энвик_EnableIRQ(CAP2_IRQn);

 CAP_TimerCmd(NT_CAP0, ENABLE);
 CAP_TimerCmd(NT_CAP1, ENABLE);
 CAP_TimerCmd(NT_CAP2, ENABLE);

 CAP_Capture_Cmd(NT_CAP0, ENABLE);
 CAP_Capture_Cmd(NT_CAP1, ENABLE);
 CAP_Capture_Cmd(NT_CAP2, ENABLE);
}

void CAP0_IRQHandler(void)
{
 CAP_ITStatusClear(NT_CAP0, CAP_ITSource_CapEvent0);
 CAP_ITStatusClear(NT_CAP0, CAP_ITSource_CapEvent1);
 CAP_ITStatusClear(NT_CAP0, CAP_ITSource_GeneralInt);
 CAP_ITPendClear(NT_CAP0);
}

bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: Быстрый старт с МК K1921BK01T

Сообщение bkolbov »

dks1980 писал(а):Добрый день.
Пытаюсь разобраться с модулем захвата контроллера К1921ВК01Т. Необходимо захватывать с прерываниями передний и задний фронт.
Почему-то работает захват только в регистр cap0, в cap1-3 захват не происходит.

Код: Выделить всё

 // настраиваем CAP режим
 CAP_Capture_Init_TypeDef CAP_Capture_InitStruct;
 CAP_Capture_StructInit(&CAP_Capture_InitStruct);
 CAP_Capture_InitStruct.CAP_CaptureMode = CAP_Capture_Mode_Cycle;
 CAP_Capture_InitStruct.CAP_Capture_PolarityEvent0 = CAP_Capture_Polarity_PosEdge;
 CAP_Capture_InitStruct.CAP_Capture_PolarityEvent1 = CAP_Capture_Polarity_NegEdge;
 CAP_Capture_InitStruct.CAP_Capture_RstEvent0 = ENABLE;
 CAP_Capture_InitStruct.CAP_Capture_RstEvent1 = ENABLE;
 CAP_Capture_Init(NT_CAP0, &CAP_Capture_InitStruct);
 CAP_Capture_Init(NT_CAP1, &CAP_Capture_InitStruct);
 CAP_Capture_Init(NT_CAP2, &CAP_Capture_InitStruct);
Здравствуйте!
При таком варианте инициализации, поле CAP_Capture_InitStruct.CAP_Capture_StopVal остается равным 0 (по умолчанию).
В одиночном режиме захвата это значение используется для остановки счетчика событий. В циклическом режиме это значение определяет количество захватываемых событий.
Судя по коду, вы желаете захватывать 2 события - одно по переднему фронту, другое по заднему, а значит вам нужно добавить в код строку вида:

Код: Выделить всё

 // настраиваем CAP режим
...
CAP_Capture_InitStruct.CAP_Capture_StopVal = 1;
...
Чтобы захваченные значения по этим двум событиям помещались в регистры CAP0 и CAP1.
Ответить

Вернуться в «32-разрядные микроконтроллеры»