AT90USB82/162
Figure 6-3. Example of clock switching with wake-up from Device
upstream-resume
2
Upstream Resume from device
USB
(Suspend)
non-Idle
Idle
Ext
non-Idle
Ext
2
CPU Clock
RC
External
Oscillator
RC oscillator
3ms
watchdog wake-up
from power-down
6.2.2
Clock switch Algorythm
6.2.2.1
Swith from external clock to RC clock
if (Usb_suspend_detected())
{
// if (UDINT.SUSPI == 1)
Usb_ack_suspend();
Usb_freeze_clock();
Disable_pll();
// UDINT.SUSPI = 0;
// USBCON.FRZCLK = 1;
// PLLCSR.PLLE = 0;
// CLKSEL0.RCE = 1;
// while (CLKSTA.RCON != 1);
// CLKSEL0.CLKS = 0;
// CLKSEL0.EXTE = 0;
Enable_RC_clock();
while (!RC_clock_ready());
Select_RC_clock();
Disable_external_clock();
}
6.2.2.2
Switch from RC clock to external clock
if (Usb_wake_up_detected())
{
// if (UDINT.WAKEUPI == 1)
Usb_ack_wake_up();
// UDINT.WAKEUPI = 0;
// CLKSEL0.EXTE = 1;
Enable_external_clock();
while (!External_clock_ready()); // while (CLKSTA.EXTON != 1);
Select_external_clock();
Enable_pll();
// CLKSEL0.CLKS = 1;
// PLLCSR.PLLE = 1;
Disable_RC_clock();
while (!Pll_ready());
Usb_unfreeze_clock();
// CLKSEL0.RCE = 0;
// while (PLLCSR.PLOCK != 1);
// USBCON.FRZCLK = 0;
}
6.2.3
Clock Selection Register 0 – CLKSEL0
Bit
7
6
5
4
3
2
1
-
0
RCSUT1
RCSUT0
EXSUT1
R/W
0
EXSUT0
R/W
0
RCE
R/W
EXTE
R/W
CLKS
R/W
CLKSEL0
Read/Write
Initial Value
R/W
0
R/W
0
R
See Bit Description
27
7707D–AVR–07/08