ASF и IAR
Библиотека для продуктов Atmel ASF имеет две версии: встроенную в Atmel Studio и так называемую stand-alone. Stand-alone версия может использоваться, например, в IAR. Так как сам по себе IAR несколько аскетичен с точки зрения различных фишек типа автозаполнения, то использование ASF как внешней библиотекой, не так интерактивно и удобно, как в Atmel Studio, но тем не менее, можно один раз все настроить и использовать новинку Atmel Start — WEB конфигуратор кода для удобства и ускорения разработки.
Настройка IAR+ASF
Для начала необходимо скачать stand-alone версию ASF и распаковать.
Затем создать новый проект в IAR с нужными опциями. Предположим, у нас есть плата собственного производства с микроконтроллером SAMD20G16.
В опциях проекта выбираем:
General-Options-Target-Device — Atmel ATSAMD20G16
General-Options-Library Configuration-Use CMSIS
C/C++ Compiler-Preprocessor: здесь нужно указать пути к файлам ASF, которые будут использоваться в проекте.
Если вы не собираетесь пользоваться Atmel Start (например нет подключения к интернету)
Папки в самой ASF, которые хранят драйверы периферии, а также файлы конфигурации необходимо скопировать в папку проекта. Системные файлы, типа для работы с прерываниями, можно оставить в папке с ASF (если вы не собираетесь их менять).
Чтобы не перегружать поле препроцессора и для удобства в принципе, можно использовать системную переменную PROJ_DIR для указания пути к файлам в папке рабочего проекта и создать собственную для пути к папке ASF.
Для этого: Tools-Configure Custom Argument Variables-Global-New Group (задаете имя группы) –Add Variable (задаете имя переменной и путь).
Тогда Preprocessor может выглядеть примерно так (зависит от необходимой периферии):
$PROJ_DIR$/drivers/port
$PROJ_DIR$/drivers/system/interrupt/system_interrupt_samd20
$PROJ_DIR$/drivers/system/interrupt
$PROJ_DIR$/drivers/system/pinmux
$PROJ_DIR$/drivers/system
$PROJ_DIR$/drivers/nvm
$PROJ_DIR$/drivers/extint
$PROJ_DIR$/drivers/system/clock
$PROJ_DIR$/.
$PROJ_DIR$/drivers/sercom
$PROJ_DIR$/drivers/sercom/usart
$PROJ_DIR$/drivers/rtc
$PROJ_DIR$/drivers/sercom/spi
$PROJ_DIR$/drivers/sercom/spi/module_config
$PROJ_DIR$/drivers/sercom/i2c
$PROJ_DIR$/drivers/tc
$PROJ_DIR$/drivers/system/clock/clock_samd20
$ASF_DIR$/utils
$ASF_DIR$/utils/preprocessor
$ASF_DIR$/utils/cmsis/samd20/source
$ASF_DIR$/utils/cmsis/samd20/include/pio
$ASF_DIR$/utils/cmsis/samd20/include
$ASF_DIR$/utils/header_files
$ASF_DIR$/boards
$ASF_DIR$/boards/samd20_xplained_pro
$ASF_DIR$/../common/utils
$ASF_DIR$/../common/boards
$ASF_DIR$/utils/header_files
Еще в этом разделе необходимо указать дефайны для проекта. В нашем случае:
Defined symbols: (one per line)
ARM_MATH_CM0=true
EXTINT_CALLBACK_MODE= true
__SAMD20G16__
BOARD=USER_BOARD
TC_ASYNC= true
USART_CALLBACK_MODE=true
RTC_COUNT_ASYNC= true
SPI_CALLBACK_MODE=false
I2C_MASTER_CALLBACK_MODE=false
Чтобы не перегружать поле препроцессора и для удобства в принципе, можно использовать системную переменную PROJ_DIR для указания пути к файлам в папке рабочего проекта и создать собственную для пути к папке ASF.
Для этого: Tools-Configure Custom Argument Variables-Global-New Group (задаете имя группы) –Add Variable (задаете имя переменной и путь).
Тогда Preprocessor может выглядеть примерно так (зависит от необходимой периферии):
$PROJ_DIR$/drivers/port
$PROJ_DIR$/drivers/system/interrupt/system_interrupt_samd20
$PROJ_DIR$/drivers/system/interrupt
$PROJ_DIR$/drivers/system/pinmux
$PROJ_DIR$/drivers/system
$PROJ_DIR$/drivers/nvm
$PROJ_DIR$/drivers/extint
$PROJ_DIR$/drivers/system/clock
$PROJ_DIR$/.
$PROJ_DIR$/drivers/sercom
$PROJ_DIR$/drivers/sercom/usart
$PROJ_DIR$/drivers/rtc
$PROJ_DIR$/drivers/sercom/spi
$PROJ_DIR$/drivers/sercom/spi/module_config
$PROJ_DIR$/drivers/sercom/i2c
$PROJ_DIR$/drivers/tc
$PROJ_DIR$/drivers/system/clock/clock_samd20
$ASF_DIR$/utils
$ASF_DIR$/utils/preprocessor
$ASF_DIR$/utils/cmsis/samd20/source
$ASF_DIR$/utils/cmsis/samd20/include/pio
$ASF_DIR$/utils/cmsis/samd20/include
$ASF_DIR$/utils/header_files
$ASF_DIR$/boards
$ASF_DIR$/boards/samd20_xplained_pro
$ASF_DIR$/../common/utils
$ASF_DIR$/../common/boards
$ASF_DIR$/utils/header_files
Еще в этом разделе необходимо указать дефайны для проекта. В нашем случае:
Defined symbols: (one per line)
ARM_MATH_CM0=true
EXTINT_CALLBACK_MODE= true
__SAMD20G16__
BOARD=USER_BOARD
TC_ASYNC= true
USART_CALLBACK_MODE=true
RTC_COUNT_ASYNC= true
SPI_CALLBACK_MODE=false
I2C_MASTER_CALLBACK_MODE=false
Если вы собираетесь пользоваться Atmel Start, то настройки препроцессора автоматически сгенерируются при загрузке проекта.
Assembler-Preprocessor
Output Converter-Output-Generate additional output, Output format: Intel Extended, Output file: Override default: file name.hex
Linker-Config-Linker configuration file: Override default: $PROJ_DIR$\samd20g16_flash.icf
Debugger-Setup-Driver: J-Link/J-Trace
Все настройки сделаны.
Для написания функций инициализации контроллера и периферии воспользуемся Atmel Start.
В качестве альтернативы можно посмотреть примеры как к IAR, так и к Atmel Studio, либо документацию.
Используем AtmelStart
Atmel Start – интернет генератор кода.
Выбираем плату и контроллер и создаем проект: Custom Board, ATSAMD20G16 – Create new project
Начнем с настройки тактирования. Предположим, у нас контроллер тактируется от внешнего генератора частотой 7,37 МГц и мы хотим системной частотой иметь 48 МГц ( как это сделать в Atmel Studio см здесь).
Открываем Go to clock configurator:
Все очень наглядно, кликаем на модули, вводим необходимые настройки, и должно получится так:
Еще необходимо настроить порты ввода/вывода микроконтроллера, для этого есть Pin/Mux Configurator. В этом разделе все интуитивно понятно.
Конечно же, надо добавить необходимую периферию — Add Software Component. Для удобства поиска оставляем только поиск по драйверам. Находим нужный, например, SPI, выбираем количество и добавляем. Также это можно сделать на основной странице нажав на «+» возле Drivers.
Теперь идем в его настройки.
Указываем все необходимые нам параметры. Получается примерно так:
Делаем все остальные настройки периферии и всего, что нам нужно. Когда все готово, экспортируем проект в нужный нам формат.
Для этого: Export Project: — Include IAR (.ipcf) file – Download Pack
Меняем расширение архива на простой zip и распаковываем в папку проекта. В IAR: Tools-Options-Project-Enable Project Connections.
Далее Project-Add Project Connection — IAR Project Connection- Ok, выбираем файл: iar-project-connection.ipcf. Далее все настройки и сами файлы в папках появятся в проекте.
Можно компилировать и наслаждаться!