English
Language : 

ATMEGA64RFR2_14 Datasheet, PDF (599/611 Pages) ATMEL Corporation – Microcontroller with Low Power
ATmega256/128/64RFR2
39.9.2 PMU shows erroneous behavior with a 3µs period
The results from the phase measurement unit (PMU) depend on the length of the initial
delay between a frequency change and the start of the phase measurement process
(software timer). If the timer delay is increased then after adding 3µs, the same results
are achieved. For some delay settings the PMU results are correct, for others they are
wrong. (3768)
Problem Fix/Workaround
The software has to guarantee equidistant PMU measurements. The measurement
start must be aligned to the internal clocks for instance by tweaking the program code
with nop instructions.
39.9.3 Interrupt restrictions in Deep-sleep Mode
In Deep-Sleep Mode, there is a restriction regarding allowed memory location for the
sleep instruction. Otherwise the interrupts will be disabled and can not wake-up the
device. (4567)
Problem Fix/Workaround
There are two safe constellations where Deep-sleep Mode is guaranteed to allow
interrupts waking up the device.
• If the IVSEL bit is not set (default value), the PC must be below the lowest possible
boot segment, i.e. below word address 0x1F000 (byte address 0x3E000) for the
256K Byte FLASH memory configuration (application section of the memory).
• If the IVSEL bit is set, the PC must be above the beginning of the smallest (topmost)
possible boot segment, i.e. above word address 0x1FE00 (byte address 0x3FC00)
for the 256K Byte FLASH memory configuration. Note that the addresses mentioned
are independent of the actual state of the BOOTSZ[1:0] fuse bits in high fuse.
The memory locations for wakeup by interrupts from Deep-Sleep have to been told to
compiler respective linker as describe below.
• Pseudo-code listing including Compiler directives for actions to take for Deep-Sleep
// relocate function to last quarter of FLASH boot section
// ADDRESS=0x3FC00 / 256K Byte FLASH
void go_sleep_boot(void) __attribute__((section(".high"),
noinline));
void go_sleep_boot(void)
{
asm(“SLEEP”);
}
// relocate function to the application section
// ADDRESS=0x3E000 / 256K Byte FLASH
// default bootloader fuse settings
void go_sleep_appl(void) __attribute__((section(".text"),
noinline));
void go_sleep_appl(void)
{
asm(“SLEEP”);
}
// Beware that at least one interrupt source must
// be setup and enabled when entering here.
void gosleep(void)
{
/* prepare Deep-sleep Mode */
8393C-MCU Wireless-09/14
599