hi,
ich versuche zZ die verschiedenen Power Modis meines SAM3U4E zu nutzen.
Aktuell versuche ich in den Backup Mode zu kommen(und wieder zu
verlassen).
Allerdings ist das Datenblatt zum Prozessor ziemlich waage was die Power
Modis anbelangt.
Datasheet: http://www.atmel.com/dyn/resources/prod_documents/doc6430.pdf
Abschnitt: 5.5.1 Backup Mode
So schaut mein aktuelles minimal Programm dazu aus:
1 | void WaitLoop(int loops)
|
2 | {
|
3 | int i;
|
4 | for(i=0;i<loops;i++){}
|
5 | };
|
6 |
|
7 | int main (void)
|
8 | {
|
9 | unsigned int *SystemControlRegister = NULL;
|
10 | const int cloops=100000;
|
11 | unsigned int ledmask = 3;
|
12 |
|
13 | //stop watchdog
|
14 | WDT->WDT_MR = (1<<15);
|
15 |
|
16 | //System Control Register
|
17 | SystemControlRegister = (unsigned int *)0xE000ED10;
|
18 |
|
19 | //set deep sleep bit
|
20 | *SystemControlRegister |= (0x1<<2);
|
21 |
|
22 | //enable wakeup events
|
23 | REG_SUPC_WUMR |= (0xF<<0);
|
24 |
|
25 | //wait for events
|
26 | __WFE();
|
27 |
|
28 | //Setup Pins PB0..PB1 for LEDs
|
29 | PIOB->PIO_PER = 0x03; //pio enable register
|
30 | PIOB->PIO_OER = 0x03; //output enable register
|
31 | PIOB->PIO_PUDR = 0x03; //pull up disable register
|
32 | PIOB->PIO_OWER = 0x03; //output write enable register
|
33 | PIOB->PIO_ABSR &= ~0x03; //ab select register
|
34 |
|
35 | while(1)
|
36 | {
|
37 | PIOB->PIO_CODR = ledmask;
|
38 | WaitLoop(cloops);
|
39 | PIOB->PIO_SODR = ledmask;
|
40 | WaitLoop(cloops);
|
41 | };
|
42 |
|
43 | }
|
Der soll starten, sich schlafen legen und dann aufs FWUP - Pin reagieren
und anfangen mit den LEDs zu blinken.
Was natürlich nicht funkioniert....
Kann mir wer helfen und sagen warum es nicht läuft?
Grüße Marc