Загрузчик SAM R21 ждет часов бесконечно
Я работаю над проектом, и мне нужно, чтобы Arduino IDE связывался с SAM R21 XPRO, чтобы я мог программировать его как обычную плату Arduino. Я начал с загрузчика arduino для mzero, который похож на D21, и хотел изменить его в соответствии со своими потребностями, но я наткнулся на бесконечный цикл.
При запуске usb программа бесконечно ждет запуска часов.
/* Check clock after enable module, request the clock */
udd_wait_clock_ready();
Внутри этой функции программа зависает при первом
#define DFLL_READY_FLAG (SYSCTRL_PCLKSR_DFLLRDY | \
SYSCTRL_PCLKSR_DFLLLCKF | SYSCTRL_PCLKSR_DFLLLCKC)
/* In USB recovery mode the status is not checked */
if (!(SYSCTRL->DFLLCTRL.reg & SYSCTRL_DFLLCTRL_USBCRM)) {
while((SYSCTRL->PCLKSR.reg & DFLL_READY_FLAG) != DFLL_READY_FLAG);
} else {
while((SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) != SYSCTRL_PCLKSR_DFLLRDY);
}
Я уже некоторое время читаю таблицу данных, и единственное, что я понял, это следующее.
3 - Биты состояния DFLL в регистре PCLKSR во время режима восстановления часов USB могут быть неправильными после состояния приостановки USB.
Исправление / Обходной путь: Не контролируйте биты состояния DFLL в регистре PCLKSR во время режима восстановления часов USB.
Я попытался принять во внимание только флаг DFLLRDY, он больше не останавливается на этом, но после того, как он возвращается к основному и ожидает сообщений, USB поднимает флаг прерывания и продолжает сбрасывать плату.
Я также попытался изменить настройки часов, чтобы запустить все часы, потому что подумал, что, может быть, я забыл включить их, но безуспешно, флаги DFLLLCKF и DFLLLCKC не установлены в 1.
Спецификация R21: http://ww1.microchip.com/downloads/en/DeviceDoc/SAM-R21_Datasheet.pdf
Загрузчик D21: https://github.com/arduino/ArduinoCore-samd/tree/master/bootloaders/mzero/Bootloader_D21/src
Мой проект R21: https://github.com/BlanzeanuDoru/lucrare_licenta/tree/master/bootloader_r21/bootloader_r21/src
Несколько советов о том, что делать дальше, будут очень полезны. Благодарю.