Начало разработки на микроконтроллерах Kinetis. Быстрый старт

419a00c938f04221ba64767211999354.png

Продолжаем освоение микроконтроллеров Kinetis. На этот раз освоим среду разработки KDS и запрограммируем вывод меандра. Выясним сколько на это нужно времени. Узнаем какой максимальной частоты меандра можем добиться и обнаружим удивительное быстродействие портов Kinetis. И конечно же напишем классический «Hello, world!» с выводом через UART на скорости в 1.5 Мбит/c.

Предыдущие статьи:

Напомню, мой выбор микроконтроллеров Kinetis был в основном обусловлен более развитой программно-инструментальной поддержкой со стороны производителя этих чипов по сравнению с конкурирующими решениями. В своей профессиональной деятельности мне приходилось использовать много различных микроконтроллерных архитектур в их числе 32-х разрядные микроконтроллеры: STMicroelectronics (STM32), NXP (LPC), Texas Instruments (OMAP), поэтому сравнить есть с чем.

Итак, предыдущая стать про умную силовую плату продемонстрировала аппаратные возможности микроконтроллеров семейства Kinetis фирмы Freescale. Плата может управлять асинхронными двигателями, ТЭН-ами, мощными осветительными приборами и прочими нагрузками и во многих случаях упрощает создание надежных и инновационных бытовых и промышленных устройств и установок.
Теперь нужно рассказать, как программировать Kinetis.

Перед этим желательно уже иметь опыт программирования подобных микроконтроллеров. К подобным можно отнести любые 32-х разрядные микроконтроллеры выполненные на ядре ARM Cortex-M3, M4, M7. Но если до этого имели дело только с Arduino, то тут будет сложнее, но и интереснее, поскольку это открывает окно в широкий мир эффективных функционально насыщенных встраиваемых систем.

1. Плата с микроконтроллером семейства Kinetis.
2. Отладочный адаптер для подключения PC к интерфейсу JTAG/SWJ-DP микроконтроллера
3. Осциллограф.
4. Интегрированная среда разработки IDE адаптированная для микроконтроллеров Kinetis

Отладочной платой нам будет служить силовая плата из предыдущей статьи.
9c1783f9819f459a9fd5c1b8fdf0f636.jpg

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

Отладочный адаптер я настоятельно бы рекомендовал Segger J-Link. Причем именно оригинальный. Это будет оправданной инвестицией, даже если не собираетесь программировать Kinetis, а, скажем, ориентируетесь на другие чипы на ядре ARM.
Осциллограф, желательно 4-х канальный, все-таки плата работает с 3-х фазной сетью и с полосой не менее 200 МГц, поскольку частота выходных сигналов микроконтроллера может достигать нескольких десятков мегагерц.

Для работы с Kinetis фирмой Freescale разработан бесплатный пакет программного обеспечения Kinetis Design Studio (KDS). Данный пакет существует в реализациях для Linux, Mac и Windows. В него входит интегрированная среда разработки на базе Eclipse, GDB отладчик, инструменты компиляции и сборки GNU, специальный плагин Processor Expert для авто генерации исходных текстов для Kinetis и плагин поддержки отладки операционных систем реального времени MQX и FreeRTOS и еще многое другое, о чем можно прочитать на странице продукта.

Можно заметить, что KDS серьезно отличается от конкурирующего продукта STM32 CubeMX тем, что является законченной средой разработки, в которой не только генерируются проекты, но и компилируются и отлаживаются.

Для скачивания пакета может потребоваться регистрация на сайте Freescale, но она не займет много времени.
Когда найдете страницу скачивания Kinetis Design Studio перед вами предстанет такая картина:

9efcda9e6617456aa69c56cdab72f297.png

Далее будем рассматривать только вариант для Windows.

Скачиваем главный пакет и апдейты:
Installer: Kinetis Design Studio installer for Microsoft Windows 3.0.0
Processor Expert for Kinetis 3.0.1 Update
Project Wizard support for Kinetis KM14, KM33 and KM34

Исходники KDS v3.0.0 Source Files Package скачивать не обязательно.

Инсталлируем Kinetis Design Studio installer for Microsoft Windows 3.0.0.
Скачанные апдейты инсталлируем уже из запущенной IDE Kinetis Design Studio (KDS). В каждом архиве с апдейтом есть инструкция как это сделать.

Кроме самого Kinetis Design Studio нужно еще скачать пакет ПО KSDK v1.2.0 Mainline release, в котором содержатся: исходные коды драйверов периферии используемых в Processor Expert, ПО уровня аппаратной абстракции, исходные тексты операционных систем реального времени (MQX, uCOS-II, uCOS-III, FreeRTOS), промежуточное программное обеспечения (LwIP, FATfs, RTCS, MFS), стеки USB и проч.
Здесь страница скачивания может предстать в таком виде:

c5fa02e4c2ad4cb685fac571c54e8217.png

Скачиваем:
KSDK v1.2.0 Mainline release и совместно с ним патч Eclipse update patch for Kinetis SDK v1.2.0
CyaSSL for Kinetis SDK v1.2.0 with MQX RTOS releases and patches

Остальные пакеты предназначены для определенных отладочных плат и сейчас нас не интересуют.
CyaSSL полезный пакет который пригодится в будущем.

Инсталлируем KSDK v1.2.0 Mainline release и патч Eclipse update patch for Kinetis SDK v1.2.0.

Здесь все инсталляции завершены.
Это несколько дольше чем инсталляция IDE Arduino, и может занять больше часа, однако объем получаемого при этом программного обеспечения и гибкость решений несравненно больше.

Прежде всего вспомнить точное название чипа, с которым работаем – это MK60FN1M0VLQ12.
Далее нам нужна документация именно на этот чип:
• Лист данных
• Справочное руководство

Документация предоставляется не на конкретный чип, а на подсемейство (Sub-Family). Поэтому потребуются некоторые усилия для поиска в документации действительной конфигурации именно для нашего чипа. Справочные руководства от разных производителей сильно отличаются по стилю друг от друга. Это иногда является сильнейшим препятствием для перехода на новую архитектуру. Хорошая новость в том, что документация на Kinetis одна из самых исчерпывающих и подробных, а форум по микроконтроллерам Kinetis не уступает по активности иным обще-электронным форумам.

Справочное руководство для нас важнейший документ. У руководств от Freescale есть особенность – одна из первых глав под название Chip Configuration содержит короткие уточнения по составу, подключению и функциональным возможностям отдельных периферийных блоков чипа. Эту главу надо изучать обязательно при ознакомлении с полными описаниями периферийных модулей находящимися в отдельных главах руководства.
Все руководство прочитать скорее всего никогда не придется, оно более 2100 страниц, но первые 9 глав стоит бегло просмотреть.

Теперь запускаем KDS и создаем пустой проект.


Теперь определимся на каком пине будем генерировать сигнал.

d6cead796394457a82d6a0cc433b0bd4.png На выбранной мной плате есть специальные контактные площадки для наблюдения за сигналами OUT1...OUT7, как показано на схеме. Выходят сигналы после буфера ULN2003 (U16) на разъем X41. У микроконтроллера эти сигналы подключены к линиям PTB1-PTB7 порта B. Выбираем для генерации меандра сигнал OUT1.

Замечание по поводу программирования портов.


У чипов Kinetis в отличие скажем от STM32 есть два периферийных модуля отвечающих за управление внешними выводами общего назначения. Это модуль под названием Port Control and Interrupts (PORT) и модуль General-Purpose Input/Output (GPIO).
В модуле PORT настраиваются редко изменяемые свойства выводов такие как: назначение альтернативной функции, назначение прерывания, сила выходного драйвера, подключение подтягивающих резисторов, подключение фильтров и т.д.
В модуле GPIO происходит оперативное управление выводом: установка уровня сигнала, чтение сигнала, установка направления вывода.

Настраиваем периферию для программы генерации меандра.

Пока никакой код не пишем, все делается через диалоговые окна и панели в KDS.
Нам нужно, во-первых, настроить подсистему тактирования, во-вторых, настроить порт вывода.
Не вникая в специфику подсистемы тактирования, которая довольно сложна, просто приведу скриншоты диалоговых панелей с правильной настройкой.

Настройка подсистемы тактирования

cdb38253117f43f088b5afe85ce8b482.png
Здесь мы активируем системный осциллятор 0. Записываем частоту внешнего кварца и устанавливаем на каких выводах подключен внешний кварц осциллятора 0.

94c18775e92a4ec38c376c18bc2cd339.png
Указываем что выход осциллятора 0 подаётся на умножитель частоты 0 (PLL0). Умножитель повышает частоту до 120 МГц.

b85baea399ea422080bf957af1d494b0.png
Задействуем умножитель частоты 0 (PLL0) для тактирования процессора. Для этого включаем режим PEE (расшифровку смотреть в мануале) от выхода PLL0.

e82f17bdd33441f78d51085f6308a197.png
Настраиваем Core Clock, Bus Clock, External Bus Clock, Flash Clock. KDS не даст ввести ошибочные варианты этих настроек. На скриншоте указаны настройки на максимальные возможные частоты всех этих сигналов.

Настройка линии вывода меандра

749e3a62c836465a89ad2f23bf814da6.png
Разрешаем работу выхода 1 порта B. Это приведет к генерации иницализации порта на старте программы.

8ed0209e70274fefb83bad235e052287.png
Настраиваем режим работы непосредственно выхода 1.

Конфигурирование закончено. Пишем свою программу

Программа состоит всего их двух строк. Это гораздо меньше чем для аналогичной функциональности пришлось бы писать на Arduino.
Программа записывается в файл main.c уже сгенерированный на предыдущем этапе.
А выглядит программа так:
db82d086745b44198acf9c477cef8a44.png

Важно помнить.
При генерации исходных текстов файл main.c перезаписывается. При этом стираются все изменения сделанные в нем в ненадлежащих местах.
Остается нетронутым только фрагмент в функции main начиная от комментария

/* Write your code here */

и до комментария

/*** Don't write any code pass this line, or it will be deleted during code generation. ***/

Прежде чем скомпилировать программу сделаем еще пару важных настроек.

В свойствах файла main.c вызываемых из контекстного меню файла устанавливаем максимальный уровень оптимизации:
d3e277d710d94952ad656c041b8f87f2.png

Чтобы отладка программы была более удобной в меню Window->Preferences -> C/C++ ->Debug -> EmSys Register View указываем настройки как на скриншоте.
25e6e82d01e148349cdc4baf0074fe4b.png

Генерация, запись во Flash и запуск кода на исполнение

Генерируем код командой Project -> Generate Processoe Expert Code.
Запись кода во Flash и начало исполнения выполняются командой Run -> Debug (F11)
При запуске должен появится диалог с просьбой выбрать отладочный адаптер.
Я выбираю Segger поскольку именно он подключен у меня к плате.

Если загрузка прошла без ошибок, то после точки останова на функции PE_low_level_init(); нажимаем Resume и на экране осциллографа подключенного к сигналу OUT1 на плате должна возникнуть вот картинка подобная этой:
bdb84d8a59a84bf99c74b7a378838610.png

Синусоидальность сигнала не должна смущать.
Поскольку здесь мы имеем дело с меандром частотой 60 МГц, то начинают сказываться ограниченная полоса пропускания щупа, полоса пропускания осциллографа, емкость щупа, отражения сигнала в проводнике между точкой измерения и выводом микроконтроллера и ограниченное быстродействие вывода микроконтроллера.
Однако видно что микроконтроллер способен генерировать частоту до 60 МГц, это примерно соответствует частоте телевизионного сигнала.
Также интересно то, что снизив частоту шины в два раза частота на внешнем выводе не изменится. Т.е. запись в порт у микроконтроллера MK60 производится всегда за один такт частоты ядра.

Пишем «Hello, world!»

Здесь все просто.
Добавляем из Componrnts Library в проект компонент Term. И настраиваем его на скорость 1500000 бит/с. Также указываем, что он будет работать в канале UART5 (разъем X37) и назначаем внешние пины для сигналов Rx и Tx.
7826832c1529434ebf886e56b00fadda.png

Текст нашей программы будет следующим:
ca4ff884040c4816a0573970e66900e6.png

Отрываем программу эмулятор терминала на PC и наблюдаем результат.
Правда редкий RS232-USB адаптер может поддерживать такую скорость.
Для этого рекомендую использовать адаптеры фирмы FTDI.

Итог.

Благодаря среде Freescale KDS мы создали два проекта хорошо раскрывающие потенциал чипов Kinetis не потратив и пары часов.
И это только начало.
В запасе еще много достойных внимания программных средств для этих чипов способных сильно упростить жизнь разработчиков встраиваемых систем.

Представленные здесь проекты для среды KDS можно скачать по ссылке на GitHub:
github.com/Indemsys/SB200BE/tree/master/PCB_SB200BEv2/DemoProjects

© Geektimes