Инструменты пользователя

Инструменты сайта


prog:spec:proj_1901

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
prog:spec:proj_1901 [2019/03/25 16:35]
katya [Создаем проект для 1901ВЦ1Т]
prog:spec:proj_1901 [2019/03/25 16:45] (текущий)
katya
Строка 2: Строка 2:
 Миландр представляет хорошую поддержку в SPL для микропроцессоров 1986ВЕ1Т и семейства 1986ВЕ9х. Но помимо этого производитель выпускает достаточно много других интересных микропроцессоров,​ поддержка которых пока реализована слабо. В этой статье мы рассмотрим,​ как создать проект для одного из таких МК - 1901ВЦ1Т. Миландр представляет хорошую поддержку в SPL для микропроцессоров 1986ВЕ1Т и семейства 1986ВЕ9х. Но помимо этого производитель выпускает достаточно много других интересных микропроцессоров,​ поддержка которых пока реализована слабо. В этой статье мы рассмотрим,​ как создать проект для одного из таких МК - 1901ВЦ1Т.
  
-Микропроцессор 1901ВЦ1Т состоит из двух ядер - RISC и DSP. Первое RISC ядро аналогично ядру семейства 1986ВЕ9х и разработано на базе //ARM Cortex M3//. Поэтому все, что мы напишем для 1986ВЕ9х должно более-менее прижиться и в 1901ВЦ1Т. Работать с этим ядром мы будет в том же //Keil//.+Микропроцессор 1901ВЦ1Т состоит из двух ядер - RISC и DSP. Первое RISC ядро аналогично ядру семейства 1986ВЕ9х и разработано на базе //ARM Cortex M3//. Поэтому все, что мы напишем для 1986ВЕ9хдолжно более-менее прижиться и в 1901ВЦ1Т. Работать с этим ядром мы будет в том же //Keil//.
  
 DSP ядро является аналогом TMS320C546 и для его программирования необходима среда //"​Code Composer Studio"//​ версий 2 или 3.3. Собранный с помощью данной среды //hex// файл можно загрузить через RISC ядро в DSP. Также, на сколько я знаю, среда разработки //"​CodeMaster-ARM"//​ позволяет производить компиляцию и отладку для обоих ядер сразу. Это наверное очень удобно,​ но в моем случае пока недоступно. Поэтому мы пойдем по первому пути и попробуем когда-нибудь реализовать вариант с загрузкой DSP через RISC ядро. Сейчас же создадим первый проект,​ который будет собираться и  загружаться в 1901ВЦ1Т. DSP ядро является аналогом TMS320C546 и для его программирования необходима среда //"​Code Composer Studio"//​ версий 2 или 3.3. Собранный с помощью данной среды //hex// файл можно загрузить через RISC ядро в DSP. Также, на сколько я знаю, среда разработки //"​CodeMaster-ARM"//​ позволяет производить компиляцию и отладку для обоих ядер сразу. Это наверное очень удобно,​ но в моем случае пока недоступно. Поэтому мы пойдем по первому пути и попробуем когда-нибудь реализовать вариант с загрузкой DSP через RISC ядро. Сейчас же создадим первый проект,​ который будет собираться и  загружаться в 1901ВЦ1Т.
Строка 31: Строка 31:
 {{prog:​spec:​1901_mainerr.png}} {{prog:​spec:​1901_mainerr.png}}
  
-Запускаем компиляцию и видим по ошибкам внизу, что нашему проекту много чего не хватает,​ и в первую очередь таблицы векторов прерываний. Таблица векторов прерываний обычно находится в файле с расширением "​*.s",​ ищем такой файл для нашего процессора в папке PACK от Миландр и находим его по такому пути: ​ \\+Запускаем компиляцию и видим по ошибкам внизу, что нашему проекту много чего не хватает,​ и в первую очередьтаблицы векторов прерываний. Таблица векторов прерываний обычно находится в файле с расширением "​*.s",​ ищем такой файл для нашего процессора в папке PACK от Миландр и находим его по такому пути: ​ \\
  
 <​code>​ <​code>​
Строка 43: Строка 43:
 </​code>​ </​code>​
  
-Здесь я сразу представил дерево путей и все файлы которые нам потребуются для компиляции проекта. Эти файлы защищены от записи,​ а нам потребуется внести некоторые изменения. Кроме этого, эти файлы потенциально могут быть обновлены при апдейте Pack. Поэтому скопируем их в директорию нашего проекта,​ для этого заведем в ней отдельную папку - "​lib"​. Затем снимем защиту от записи: ​+Здесь я сразу представил дерево путей и все файлыкоторые нам потребуются для компиляции проекта. Эти файлы защищены от записи,​ а нам потребуется внести некоторые изменения. Кроме этого, эти файлы потенциально могут быть обновлены при апдейте Pack. Поэтому скопируем их в директорию нашего проекта,​ для этого заведем в ней отдельную папку - "​lib"​. Затем снимем защиту от записи: ​
   * Выделить все файлы ​   * Выделить все файлы ​
   * Правая клавиша мыши - свойства   * Правая клавиша мыши - свойства
Строка 58: Строка 58:
   * Жмем Add и закрываем диалог Close.   * Жмем Add и закрываем диалог Close.
  
-Пытаемся скомпилировать проект и возникает следующая ошибка:​+Пытаемся скомпилировать проекти возникает следующая ошибка:​
  
 {{prog:​spec:​1901_startuperr.png}} {{prog:​spec:​1901_startuperr.png}}
  
-По сообщению компилятора понятно,​ что объектному файлу скомпилированному из файла //"​startup_MDR1901VC1T.s"//​ требуется внешняя (из другого объектного файла) функция //​SystemInit//​. Если поискать,​ то такая функция реализована в файле //"​system_MDR1901VC1T.c"//​. Подключаем его к проектуаналогично тому как подключали файл //"​startup_MDR1901VC1T.s"//​. Пытаемся скомпилировать:​+По сообщению компилятора понятно,​ что объектному файлу скомпилированному из файла //"​startup_MDR1901VC1T.s"//​ требуется внешняя (из другого объектного файла) функция //​SystemInit//​. Если поискать,​ то такая функция реализована в файле //"​system_MDR1901VC1T.c"//​. Подключаем его к проекту аналогично томукак подключали файл //"​startup_MDR1901VC1T.s"//​. Пытаемся скомпилировать:​
  
 {{prog:​spec:​1901_systemerr.png}} {{prog:​spec:​1901_systemerr.png}}
Строка 71: Строка 71:
  
 =====Настройки проекта===== =====Настройки проекта=====
-Проект компилируется,​ теперь необходимо указать специфику микропроцессора в опциях проекта. В микропроцессоре 1901ВЦ1Т используется RISC ядро аналогичное 1986ВЕ92Т, поэтому все настройки необходимо выставить как в статье - [[prog:​start:​project_options_9x|"​Настройки проекта для 1986ВЕ9х"​]],​ за исключением вкладки //"​Device"//​.+Проект компилируется,​ теперь необходимо указать специфику микропроцессора в опциях проекта. В микропроцессоре 1901ВЦ1Т используется RISC ядро аналогичное 1986ВЕ92У, поэтому все настройки необходимо выставить как в статье - [[prog:​start:​project_options_9x|"​Настройки проекта для 1986ВЕ9х"​]],​ за исключением вкладки //"​Device"//​.
  
  
  
 =====Пишем "Hello World"​===== =====Пишем "Hello World"​=====
-Если сравнить спецификации на 1901ВЦ1Т и 1986ВЕ9х,​ то видно, что порты ввода вывода располагаются в одинаковых адресах и с одинаковыми смещениями (раздел "​Описание регистров портов ввода-вывода"​). Так же наблюдаем полную аналогию в тактировании для CPU_CLK (раздел "​Сигналы тактовой частоты"​ - схема тактирования и описание регистров). По этой причине наш пример [[PROG:​Start:​HelloWord|"​Hello World - светодиод"​]] не требует никаких дополнительных доработок. Тактирование и переключение вывода порта будут работать и в данном микроконтроллере 1901ВЦ1Т ​тоже. Копируем наш код из примера в текущий файл //"​main.c"//​+Если сравнить спецификации на 1901ВЦ1Т и 1986ВЕ9х,​ то видно, что порты ввода вывода располагаются в одинаковых адресах и с одинаковыми смещениями (раздел "​Описание регистров портов ввода-вывода"​). Также наблюдаем полную аналогию в тактировании для CPU_CLK (раздел "​Сигналы тактовой частоты"​ - схема тактирования и описание регистров). По этой причине наш пример [[PROG:​Start:​HelloWord|"​Hello World - светодиод"​]] не требует никаких дополнительных доработок. Тактирование и переключение вывода порта будут работать и в данном микроконтроллере 1901ВЦ1Т. Копируем наш код из примера в текущий файл //"​main.c"//​
  
-Для работы ​нашего ​примера требуется два файла - //​MDR32F9Qx_port.c//​ и //​MDR32F9Qx_rst_clk.c//​. Они должны быть скомпилированы средой Keil, поэтому подключаем их к нашему проекту. Файлы эти находятся по следующему пути: ​ \\+Для работы примера требуется два файла - //​MDR32F9Qx_port.c//​ и //​MDR32F9Qx_rst_clk.c//​. Они должны быть скомпилированы средой Keil, поэтому подключаем их к нашему проекту. Файлы эти находятся по следующему пути: ​ \\
 //​C:​\Keil_v5\ARM\PACK\Keil\MDR1986BExx\1.4\Libraries\MDR32F9Qx_StdPeriph_Driver\src//​ //​C:​\Keil_v5\ARM\PACK\Keil\MDR1986BExx\1.4\Libraries\MDR32F9Qx_StdPeriph_Driver\src//​
  
Строка 105: Строка 105:
 </​code>​ </​code>​
  
-Теперь ​наш ​проект снова успешно собирается. Осталось проверить,​ какой вывод и от какого порта разведен на какой-нибудь ​светодиод на демо-плате. На плате, рядом с микросхемой памяти DD1, виден ​установленный ​целый ряд перемычек к каждому светодиоду. Если присмотреться,​ то на плате указана маркировка,​ какой порт используется на каждом светодиоде. Давайте выберем крайний светодиод,​ он подписан на плате РВ11. Модифицируем код [[PROG:​Start:​HelloWord|"​Hello World - светодиод"​]] для мигания этим светодиодом.+Теперь проект снова успешно собирается. Осталось проверить,​ какой вывод и от какого порта разведен на один из  ​светодиодов на демоплате. На плате, рядом с микросхемой памяти DD1, виден целый ряд перемычек к каждому светодиоду. Если присмотреться,​ то на плате указана маркировка,​ какой порт используется на каждом светодиоде. Давайте выберем крайний светодиод,​ он подписан на плате РВ11. Модифицируем код [[PROG:​Start:​HelloWord|"​Hello World - светодиод"​]] для мигания этим светодиодом.
  
-Для того чтобы оставить рабочим старый вариант,​ вынесем все определения,​ зависящие от конкретного МК в макроопределения. Итоговый код получился таким:+Для того чтобы оставить рабочим старый вариант,​ вынесем все определения,​ зависящие от конкретного МКв макроопределения. Итоговый код получился таким:
  
 <​code>​ <​code>​
prog/spec/proj_1901.txt · Последние изменения: 2019/03/25 16:45 — katya