English
Language : 

ATMEGA8U2_14 Datasheet, PDF (28/310 Pages) ATMEL Corporation – 125 Powerful Instructions – Most Single Clock Cycle Execution
ATmega8U2/16U2/32U2
Figure 8-3. Example of clock switching with wake-up from Device
upstream-resume
2 Upstream Resume from device
USB
CPU Clock
non-Idle
Idle
Ext
(Suspend)
RC
non-Idle
2
Ext
External
Oscillator
RC oscillator
3ms
8.2.2 Clock switch Algorythm
Watchdog wake-up
from power-down
8.2.2.1
Swith from external clock to RC clock
if (Usb_suspend_detected())
{
Usb_ack_suspend();
Usb_freeze_clock();
Disable_pll();
Enable_RC_clock();
while (!RC_clock_ready());
Select_RC_clock();
Disable_external_clock();
}
// if (UDINT.SUSPI == 1)
// UDINT.SUSPI = 0;
// USBCON.FRZCLK = 1;
// PLLCSR.PLLE = 0;
// CLKSEL0.RCE = 1;
// while (CLKSTA.RCON != 1);
// CLKSEL0.CLKS = 0;
// CLKSEL0.EXTE = 0;
8.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;
Enable_external_clock();
// CKSEL0.EXTE = 1;
while (!External_clock_ready()); // while (CLKSTA.EXTON != 1);
Select_external_clock();
// CLKSEL0.CLKS = 1;
Enable_pll();
// PLLCSR.PLLE = 1;
Disable_RC_clock();
// CLKSEL0.RCE = 0;
while (!Pll_ready());
// while (PLLCSR.PLOCK != 1);
Usb_unfreeze_clock();
// USBCON.FRZCLK = 0;
}
28
7799D–AVR–11/10