Для настройки конфигурации чипов в MPLAB X IDE, создаю пустой проект, выбрав чип atMega328P и настраиваю через GUI "Target Memory Views/Configuration bits" нужную конфигурацию загрузки, с нужным источником синхронизации, без запуска загрузчика и с нужными блокировками памяти. Потом, нажатием кнопки в окошке конфигурации, получаю исходный код для фьюзов, например:
#include <avr/io.h>
FUSES = {
.low = 0x42, // LOW {SUT_CKSEL=INTRCOSC_8MHZ_6CK_14CK_0MS, CKOUT=CLEAR, CKDIV8=SET}
.high = 0xDF, // HIGH {BOOTRST=CLEAR, BOOTSZ=256W_3F00, EESAVE=CLEAR, WDTON=CLEAR, SPIEN=SET, DWEN=CLEAR, RSTDISBL=CLEAR}
.extended = 0xFE, // EXTENDED {BODLEVEL=1V8}
};
LOCKBITS = 0xFC; // {LB=PROG_VER_DISABLED, BLB0=NO_LOCK, BLB1=NO_LOCK}
И вставляю этот код прямо в исходный код файла проекта .ino Arduino. AVR-GCC успешно использует эту конфигурацию, включая её в свой HEX-файл на выходе.
Затем, для прошивки кода, в выводе Arduino IDE смотрю, в какую временную папку помещён HEX и импортирую этот HEX в программатор MPLAB IPE. Программирую программатором MPLAB Snap, используя ПО MPLAB IPE.
Кроме этого, чтобы Arduino правильно учитывала тактовую частоту вашего проекта, нужно добавить свои варианты "Processor" в конфигуарционный файл среды Boards.txt (пришлось удалить папки кэшей Arduino, чтобы новый вариант появился в интерфейсе среды разработки). Тогда временные задержки, счётчик micros() и задание скорости UART работают как положено, по крайней мере, для изменений частоты кратных двум.