Программирование микроконтроллеров AVR в IDE Lazarus
Вот появилось желание написать небольшой проектик для себя с применением микроконтроллера. В CodeVisionAVR команды не подсвечиваются по Ctrl+Пробел, да и Си что-то начал забывать, вспоминать — лень… Конечно, вспомнить Си — это 10–30 минут, но лень… Поэтому, было решено начать проект в родной IDE Lazarus, она же кросс-компилируемая! Правда, понять, как включить avr в Lazarus, чтоб компилировался hex-файл ушло 3 дня :), поэтому пишу здесь, чтоб другие не мучались, а сразу пользовались.
Использование кросс-компиляции было основано на этой статье, в дальнейшем выкинуто всё лишнее (с моей точки зрения). Показываю как это заработало у меня.
Итак, скачиваем отсюда и запускаем последний релиз замечательной программки fpcupdeluxe нужной разрядности и соответствующей ОСи;
Определяем директорию, куда будут скачаны исходники и собраны бинарные файлы (напр., c:\fpcupdeluxe);
На вкладке «cross» и дополнительно по кнопке «Setup+» устанавливаем CPU — «AVR» и OS — «embedded». Устанавливаем — «Install compiler» (в каталоге появится папка «cross» с подпапками «bin» и «lib»).
4. В процессе закачки и последующей сборки fpcupdeluxe ругнется на отсутствие утилит для сборки кросс-компилятора и предложит их скачать («The building of a crosscompiler failed due to missing cross-tools. Fpcupdeluxe can try to download them if available! Do you want to continue?»)
Соглашаемся и повторяем процесс сборки.
5. Для возможности компиляции hex-файлов скачиваем ppu микроконтроллеров, на вкладке «subarch» для каждого целевого процессора (в каталоге «fpc» появится папка «units»). Микроконтроллеры разделены на целевые процессоры, например ATmega8 находится в папке avr4, а ATmega328p находится в папке avr5.
6. Настраиваем IDE Lazarus. Для указания путей к бинарникам открываем настройки Tools --> Options --> Environment --> Files: для Compiler executable выбрать C:\fpcupdeluxe\fpc\bin\x86_64-win64\ppcross386.exe (предупреждение игнорировать):
Настройка целевой платформы в IDE Lazarus
Для настройки целевой платформы, для которого будет генериться hex-файл, необходимо указать ОС на которой будет выполняться код — embedded; семейство процессоров — avr и целевой процессор можно определить по папке (в общей папке «units») в которой находится требуемый микроконтроллер, например, ATmega328p находится в папке avr5, значит, целевой процессор выбираем avr5:
А так же выбрать конкретный процессор для программирования в «Параметры пользователя»:
Упрощение установки компилятора
Как то 830 Мб в папке fpcupdeluxe меня напрягло и я решил сделать отдельную установочную папку размером в 50 Мб (3 Мб в архиве). В параметрах IDE нужно указать распакованную папку:
Если Вы распаковали в другую папку, то нужно поправить в блокноте файл «fpc.cfg», который лежит в корне AVR:
Тестирование
program Timers;
{$mode objfpc}{$H-}
{$goto on}
uses
uInterrupts, me_avr;
//=== Entry point =============================================================
begin
DDRC := $FF; // настраиваем все линии порта C на вывод
//PORTC := $00; // выводим лог. 0 на все линии порта C
//=== Main loop =========================================
while True do
begin
PORTC := $FF; // выводим лог. 1 на все линии порта C
Delay(255); // задержка 1000 мс = 1 с
delay(255);
PORTC := $00; // выводим лог. 0 на все линии порта C
delay(255); // задержка 1000 мс = 1 с
end;//Main loop
end.
Процедура задержки «me_avr» (надо нормально написать):
unit me_avr;
{$mode objfpc}{$H-}
{$goto on}
interface
procedure Delay(MS: Byte); assembler;
implementation
procedure Delay(MS: Byte); assembler;
label __delay0;
asm
PUSH r31
mov r31, MS
__delay0:
DEC r31
BRNE __delay0
pop r31
end;
end.
Компиляция Ctrl+F9 (F9 не работает) заняла 0,1 сек в результате чего появились 3 файла: hex, bin и elf. Загружаем hex-файл в модель и видим, что прошивка работает:
(не равномерность мигания из-за подтормаживания компа)
Спасибо за внимание.