SAM R21 bootloader无限等待时钟

时间:2018-03-23 18:50:30

标签: arduino bootloader cortex-m atmelstudio

我正在开发一个项目,我需要让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

关于下一步该做什么的一些建议会非常有帮助。感谢。

0 个答案:

没有答案