13.10时钟和功率管理OTG控制器的时钟分布如图13.11所示。除ahb_slave_clk以外,控制器的时钟都由时钟开关控制。当时钟开关使能有效时,其时钟输出就会开启,CLK_ON输出有效。你能想象吗?这个CLK_ON信号竟然可以在OTGClkSt寄存器中被观察到!为了降低功耗,可以将不使用的主机、设备、OTG和I2C的时钟关闭,方法就是将OTGClkCtrl寄存器中对应的时钟使能位清零【单片机时钟控制器】。

当USB模块停止运行时,只需清零寄存器PCONP中的位PCUSB就可以关闭所有时钟【系统控制模块和时钟功率控制】。如果软件想访问其中一个控制器的寄存器,必须先保证已使能了该控制器的48MHz时钟(通过置位OTGClkCtrl寄存器中的CLK_EN),然后再询问OTGClkSt中的CLK_ON直至它置位为止【第七章时钟和功率管理】。一旦CLK_ON置位,控制器的时钟就一直保持有效,直至软件将CLK_EN位清零。在未使能时钟的情况下访问控制器的寄存器会引起数据异常中断【高低速外设时钟寄存器】。