Forum: Mikrocontroller und Digitale Elektronik ATmega128RFR2 und MAC Symbol Counter


von Rangi J. (rangi)


Lesenswert?

Hallo Forum,
ich arbeite zz.t an einem ATmega128RFR2 und möchte den Symbolcounter 
dazu verwenden den Power-Down-Sleep nach festgelegter Zeit zu beenden.
Ich habe festgestellt, dass der Zähler gerade im Sleep nicht lief.
1
  ASSR |= (1<<AS2);
2
  /*
3
  ... Wartezeit bis Quarz läuft
4
  */
5
  SCCSR = 0;
6
7
  SCCNTHH = 0;
8
  SCCNTHL = 0;
9
  SCCNTLH = 0;
10
  SCCNTLL = 0;  /*zähler auf 0*/
11
12
  SCOCR1HH = 0;
13
  SCOCR1HL = 0x05;
14
  SCOCR1LH = 0;
15
  SCOCR1LL = 0; /*Compareregister*/
16
17
  SCCR1 = (1<<SCBTSM); /*Symbol Counter Beacon Timestamp Mask Register*/
18
                       /*This bit must be set to disable automatic beacon timestamping.*/
19
  SCIRQM = (1<<IRQMCP1); /*Symbol Counter Compare Match 1 IRQ enable*/
20
  SCCR0 = ((1<<SCEN)|(1<<SCCKSEL)); /*Symbol Counter enable + Symbol Counter Clock Source select */
21
  PRR0 = 0xFF;
22
  PRR1 = 0xFF;
23
  SMCR = 0x05;   /*Power Down + Sleep Enable*/
24
  asm volatile(" sleep");
Wenn ich anstelle des 'asm volatile(" sleep")' ein 'while(1)' einbaue 
läuft der Symbolcounter und nach meiner eingestellten Zeit wird die ISR 
augerufen.
Wenn ich sleep verwende geht der 32KHz Quarz aus und der Zähler steht. 
Durch ausprobieren bin ich darauf gekommen, dass SCCKSEL das Problem 
ist. Wenn dieses Bit nicht gesetzt wird, läuft der Quarz und der Zähler.
Das widerspricht aber scheinbar der Doku:

"With this bit the clock source for the symbol counter can be selected. 
If the bit is one, the RTC clock from TOSC1 is selected, otherwise the 
symbol counter operates with the clock from XTAL1. During transceiver 
sleep modes the clock falls back to the RTC clock source, regardless of 
the selected clock. After wakeup, it switches back to the previosly 
selected clock source."

Was soll das?

von Rangi J. (rangi)


Lesenswert?

Habe jetzt festgestellt, dass der 32kHz Clock läuft, solange der 
Controller nicht im Sleep ist.
Im Moment wenn der Sleep-Befehl ausgeführt wird, geht der Quarz aus. 
Wenn er aus dem Sleep erweacht, läuft der Quarz wieder an.
Das AS2-Bit ist gesetzt.

Wieso tut der sowas?

Power-down Mode: "Only an External Reset, a Watchdog Reset, a Brown-out 
Reset, 2-wire Serial Interface address match, an external level 
interrupt on INT7:4, an external interrupt on INT3:0, a pin change 
interrupt, or a symbol counter
interrupt can wake up the MCU. This sleep mode basically halts all 
generated clocks, allowing operation of asynchronous modules only."

Lese ich das richtig? Asynchronous Mode ist doch der 32kHz?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.