我正在开发一个项目,我需要让Arduino IDE与SAM R21 XPRO进行通信,这样我就可以像普通的Arduino板一样对它进行编程。 我从mzero的arduino bootloader开始,就像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 - USB时钟期间PCLKSR寄存器中的DFLL状态位 USB挂起状态后,恢复模式可能出错。
修复/解决方法: 在USB时钟期间,不要监视PCLKSR寄存器中的DFLL状态位 恢复模式。
我试图仅考虑DFLLRDY标志,它不再停在那里,但在它返回主节点并等待消息后,USB会引发中断标志并继续重置电路板。
我还尝试修改时钟配置以启动所有时钟,因为我认为可能我忘了打开它们,但没有成功,DFLLLCKF和DFLLLCKC标志不会设置为1.
R21数据表:http://ww1.microchip.com/downloads/en/DeviceDoc/SAM-R21_Datasheet.pdf
D21 bootloader: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
关于下一步该做什么的一些建议会非常有帮助。感谢。