Hallo.. Ich habe durch die Suche nicht wirklich was gefunden. Also: Ich möchte beim Neustart des AVR rausfinden wieso er neu gestartet hat. #include <avr/wdt.h> ... int main (void) { unsigned char c; c = MCUCSR; // Wegen Bootloader wdt_disable(); ... UDR = c; .... } leider bekomme ich immer 0x00 ausgegeben. Ich möchte wissen ob, durch den Befehl "wdt_enable(0);" oder durch entfernen der Betriebsspannung der WD zugeschlagen hat. Bitte um Hilfe. Danke, Markus
Moin, in der main() ist es zu spät, versuche es mal mit:
1 | /*************************************************************************
|
2 | *
|
3 | * Name : InitIO
|
4 | *
|
5 | * Beschreibung :
|
6 | * Wird direkt über dem Reset-Vektor aufgerufen, d.h.
|
7 | * der Stack-Pointer ist noch nicht initialisiert, also
|
8 | * nur direkte Zuweisungen benutzen. GCC geht davon aus
|
9 | * das R1 immer 0 ist!
|
10 | *
|
11 | * Parameter : keine
|
12 | *
|
13 | * Rückgabe : keine
|
14 | *
|
15 | *************************************************************************/
|
16 | static uint8_t gMcuCsr; |
17 | |
18 | void __attribute__ ((naked, section(".init0"))) InitIO (void) |
19 | {
|
20 | __asm ("eor r1, r1"); // Register 1 löschen |
21 | |
22 | gMcuCsr = MCUCSR; |
23 | |
24 | }
|
gMcuCsr kann dann in der main() ausgewertet werden. MfG
Hallo.. Habe es mal eingebunden, hoffe richtig. Leider funktioniert es nicht. Bekomme auch immer 0x00.
1 | #include <inttypes.h> |
2 | #include <avr/io.h> |
3 | #include <util/delay.h> |
4 | #include <avr/pgmspace.h> |
5 | #include <avr/interrupt.h> |
6 | #include <avr/eeprom.h> |
7 | #include <avr/wdt.h> |
8 | #include <compat/twi.h> |
9 | |
10 | #include "portbits.h" |
11 | |
12 | #define BAUDRATE 9600L
|
13 | |
14 | #include "main.h" |
15 | #include "lcd_ks0066_4bit_io.h" |
16 | |
17 | |
18 | |
19 | #ifndef F_CPU
|
20 | #error F_CPU unkown
|
21 | #endif
|
22 | |
23 | static uint8_t gMcuCsr; |
24 | |
25 | void __attribute__ ((naked, section(".init0"))) InitIO (void) |
26 | {
|
27 | __asm ("eor r1, r1"); // Register 1 löschen |
28 | |
29 | gMcuCsr = MCUCSR; |
30 | |
31 | }
|
32 | |
33 | //****************************************************************************
|
34 | ISR(USART_RXC_vect) |
35 | {
|
36 | unsigned int c; |
37 | c = UDR; |
38 | |
39 | if (c==0xFF) |
40 | {
|
41 | cli(); |
42 | wdt_enable(0); |
43 | while(1) {}; |
44 | }
|
45 | }
|
46 | |
47 | /*---------------------------------------------------------------------------------------------------------------------------------------------------
|
48 | * MAIN: main routine
|
49 | *---------------------------------------------------------------------------------------------------------------------------------------------------
|
50 | */
|
51 | int main (void) |
52 | {
|
53 | |
54 | // Wegen Bootloader
|
55 | wdt_disable(); |
56 | |
57 | uart_init(); // initialize UART |
58 | |
59 | sei(); // enable interrupts |
60 | |
61 | UDR = gMcuCsr; // sende WDT Grund |
62 | |
63 | |
64 | for (;;) |
65 | {
|
66 | |
67 | |
68 | }
|
69 | }
|
Lg, markus
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.