Karma-SAM3S. Как сделать проект в Atmel Studio

04/04/2014 - 14:40 Pavel Bobkov

Введение

Это краткое пошаговое руководство по созданию проекта в Atmel Studio. Мы разберем как создать проект, как добавить в него ASF библиотеки, как его скомпилировать и как записывать прошивку в микроконтроллер, используя аппаратный отладчик или программатор. 

Речь пойдет о создании проекта для ARM микроконтроллера SAM3S, но аналогичным образом создаются проекты и для других микроконтроллеров фирмы Atmel - xmega, atmega, attiny

Подразумевается, что у вас уже установлена среда разработки. Но если это не так, то самое время сделать это. Переходите на сайт Atmel, регистрируйтесь и скачивайте Atmel Studio.

Создание проекта

Выбираем в верхнем меню пункт File > New > Project... или нажимаем комбинацию кнопок Ctrl + Shift + N.

Создание нового проекта


Откроется окно, в котором нужно задать шаблон проекта, имя и место его хранения. Выбираем C/C++ > User Board > User Board SAM3S. Имя и место сохранения указываем по своему желания. Я назвал свой проект Test.

Выбираем тип шаблона


Последнее поле в этом окне - Solution name. Solution или решение - это некий "контейнер", который включает в себя один или несколько проектов Atmel Studio (аналог workspace или рабочего пространства в IAR). Такое объединение удобно использовать, когда идет работа над несколькими смежными проектами.


Если поставить галочку Create directory for solution, то будет создана директория с именем решения и файлами решения, в которой будет поддиректория, содержащая наш проект. Нам это сейчас не нужно, поэтому галочку можно снять. 

Жмем ОК и в следующем диалоговом окне задаем тип микроконтроллера. Это нужно для того, чтобы Atmel Studio подключила к проекту требуемые заголовочные файлы. 

Выбираем микроконтроллер


Выбираем SAM3S4B, жмем ОК и Atmel Studio создает проект с заданными параметрами. 


Если мы заглянем в директорию проекта, то увидим следующий набор файлов.

Содержимое проекта


В папке Debug сохраняются результаты компиляции проекта - объектные файлы и прошивки в различных форматах. В папке src хранятся исходники проекта - C и C++ файлы. 


Посмотрим на Atmel Studio. Перед нами созданный только что проект. С правой стороны у нас проводник, отображающий иерархию проекта. Чуть ниже окно - свойства. Там отображается информация о выбранном файле. С левой стороны - редактор кода, сейчас там открыт файл main.c. Снизу - консоль, на которую выводится различная информация о результатах компиляции проекта. Сверху - меню и меню бар.

Atmel Studio


ASF библиотеки

Чтобы убедиться в работоспособности платы Karma-SAM3S, добавим в проект простой код. Для начала подключим к проекту несколько ASF библиотек. 

ASF (Atmel Software Framework) - это бесплатный набор библиотек для Atmel микроконтроллеров, интегрированный в среду разработки. ASF включает в себя драйверы внутренней периферии, сервисы и библиотеки для внешних устройств. Каждая библиотека имеет документацию с описанием и примерами. Чтобы использовать ASF библиотеки нужно создавать проект на основе шаблона (board template) или ASF примера. 

Чтобы добавить ASF библиотеки к проекту, запускаем ASF Wizard. Это можно сделать с помощью меню Project > ASF Wizard, комбинации Alt + W или одноименной кнопки в меню баре. 

ASF Wizard


Для первого проекта понадобятся следующие драйвера:


PIO - Parallel Input/Output Controller
PMC - Power Management Controller
WDT - Watchdog Timer

Ищем их в списке, выделяем и добавляем в окно Selected Modules с помощью кнопки Add.

Добавление ASF драйвера


Когда нужные драйверы добавлены, нажимаем кнопку Apply. В следующих окнах жмем ОК и со всем соглашаемся. 


Выбранные библиотеки появятся в проводнике и в заголовочном файле asf.h. Теперь их можно использовать в своем проекте. 



Тестовый код

Закрываем ASF Wizard и копируем в main.c следующий код. 



#include <asf.h>

#define ONE_SEC 250000
#define LED1 PIO_PA17

void Delay (uint32_t value);

/*программная задержка */
void Delay (uint32_t value)
{
   volatile uint32_t a = value;
   while(--a!=0);
}

int main (void)
{
   /*настройка периферии*/
   wdt_disable(WDT);
   pmc_enable_periph_clk(ID_PIOA);
   pio_set_output(PIOA, LED1, LOW, DISABLE, DISABLE);

   while(1){
      /*моргаем светодиодом*/
      Delay(ONE_SEC);
      pio_set(PIOA, LED1);
      Delay(ONE_SEC);
      pio_clear(PIOA,LED1);
   }

   return 0;
}



Детально разбирать его не будем, но несколько комментариев сказать стоит.

В начале программы запрещается работа сторожевого таймера, разрешается тактирование контроллера ввода-вывода и вывод PA17 настраивается на выход. К этому выводу на плате Karma-SAM3S подключен светодиод.

Далее идет бесконечный цикл, в котором состояние вывода PA17 меняется на противоположное. Чтобы смена состояний не была слишком быстрой, используется программная задержка - Delay(). Значение задержки подобрано так, чтобы светодиод моргал с частотой единицы Гц.

Микроконтроллер SAM3S4B имеет гибкую систему тактирования, которая обычно настраивается в начале программы. В этом примере мы ее не трогаем, поэтому микроконтроллер тактируется от внутреннего низкочастотного генератора с частотой 4 МГц.

Обратите внимание, библиотечные функции имеют префикс, по которому легко понять к какой периферии они относятся. Чтобы получить информацию о любой функции или константе в программе, нужно кликнуть по ее имени правой кнопкой мыши и выбрать пункт Goto Implementation.

Компиляция проекта

Теперь нужно скомпилировать проект. Это можно сделать с помощью меню Build > Build Solution, кнопки F7 или одноименной иконки в меню баре.

Компиляция проекта

 

Если компиляция и сборка прошла успешно, в консоли появится сообщение Build succeeded.


В противном случае там будут отображены найденные ошибки.


Полученная прошивка лежит в папке проекта. Можно загрузить ее в микроконтроллер с помощью загрузчика, а можно с помощью аппаратного отладчика. В последнем случае, загрузка выполняется прямо из Atmel Studio.

Загрузка прошивки

Подаем на плату Karma-SAM3S питание, подключаем SAM-ICE (или J-link) и выбираем в меню Debug > Start Without Debugging.

Загрузка прошивки


При первом включении Atmel Studio предложит выбрать инструмент - аппаратный отладчик или симулятор. Но поскольку Atmel Studio пока что не поддерживает программную симуляцию ARM микроконтроллеров, выбора как такового нет.


Если выбрать в меню пункт Debug > Start Debugging and Break, то Atmel Studio перейдет в режим отладки кода. Откроются окна отображающие содержимое регистров и памяти микроконтроллера, а в редакторе кода появится указатель. При нажатии кнопки F11 код будет выполняться построчно.

 


Также есть другой вариант загрузки прошивки. Выбираем в меню Tools > Device Programming.

 

В открывшемся окне Device Programming выбираем отладчик, интерфейс и нажимаем кнопку Apply. Atmel Studio автоматически определит тип микроконтроллера. Выбираем пункт Memories и нажимаем кнопку Program, чтобы записать прошивку в микроконтроллер.

Загрузка прошивки


Другие пункты в окне Device Programming позволяют настраивать интерфейс программирования, получать информацию об отладчике и микроконтроллере, устанавливать конфигурационные биты.

Comments   

# Иван Канаков 2014-04-06 02:26
Скажи Павел, знания, полученные от микроконтроллер ов семейства ATMEGA помогут в изучении например - ATSAM3S4B?
# Pashgan 2014-04-06 11:03
Помогут, но косвенным образом. Если разобрался с одним микроконтроллер ом, со вторым разобраться проще. Если использовал Atmel Studio, то при переходе на ATSAM3S4B не нужно изучать новую среду разработки. Знания названий регистров и периферии atmega не помогут. У ATSAM3S4B регистры называются по другому и периферия посложнее устроена.
# Дмитрий84 2014-04-13 18:55
Quoting Pashgan:
Помогут, но косвенным образом. Если разобрался с одним микроконтроллером, со вторым разобраться проще. Если использовал Atmel Studio, то при переходе на ATSAM3S4B не нужно изучать новую среду разработки. Знания названий регистров и периферии atmega не помогут. У ATSAM3S4B регистры называются по другому и периферия посложнее устроена.


Ну тогда будем от тебя ждать и обучающих статей
# Pashgan 2014-04-13 20:53
Ученые в реальном масштабе времени бьются над материалом по системе тактирования микроконтроллер а SAM3S.
# Кирилл 2015-02-17 05:48
Здравствуйте, через несколько секунд после запуска программы, программа останавливается и открывается sturtup, кто нибудь может подсказать как решить проблему?
# Falkot 2015-08-01 15:54
Здравствуйте Павел! Достаточно долго искал какие-либо гайды по Atmel ARM, и вот оно! Спасибо за ваши статьи! Но для изучение три гайда не хватает, есть пару организационных вопросов по настройке среды. Скажите, с вами можно как-то списаться?

У вас недостаточно прав для комментирования.