2.2.1 Gain Control of the Crystal Oscillator

The crystal oscillator (0.4 → 16 MHz) doesn’t latch its gain control (CKSEL/CSEL[2..0] bits):
  1. The ‘recover system clock source’ command doesn’t return CSEL[2..0] bits.
  2. The gain control can be modified on the fly if CLKSELR changes.

Work Around

  1. No work around.
  2. As soon as possible, after any CLKSELR modification, re-write the appropriate crystal oscillator setting (CSEL[3]=1 and CSEL[2..0] / CSUT[1..0] bits) in CLKSELR.

Code example:

        ; Select crystal oscillator (16MHz crystal, fast rising power)
                 ldi    temp1,((0x0F<<CSEL0)|(0x02<<CSUT0))
                 sts    CLKSELR, temp1
        ; Enable clock source (crystal oscillator)
                 ldi    temp2,(1<<CLKCCE)
                 ldi    temp3,(0x02<<CLKC0)    ; CSEL = "0010"
                 sts    CLKCSR,temp2           ; Enable CLKCSR register access 
                 sts    CLKCSR,temp3           ; Enable crystal oscillator clock
        ; Clock source switch
                 ldi    temp3,(0x04<<CLKC0)    ; CSEL = "0100"
                 sts    CLKCSR,temp2           ; Enable CLKCSR register access 
                 sts    CLKCSR,temp3           ; Clock source switch
        ; Select watchdog clock (128KHz, fast rising power)
                 ldi    temp3,((0x03<<CSEL0)|(0x02<<CSUT0))
                 sts    CLKSELR, temp3         ; (*)
        ; (*) !!! Loose gain control of crystal oscillator !!!
        ; ==> WORKAROUND ...
                 sts    CLKSELR, temp1
        ;  ...        
              

Affected Silicon Revisions

Rev. ARev. BRev. C
XXX