Subversion Repositories Projects

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1144 - 1
// Martin Thomas 4/2008
2
 
3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
#include <avr/wdt.h>
6
#include <util/delay.h>
7
 
8
#define LED_PORT   PORTB
9
#define LED_DDR    DDRB
10
#define LED_BIT    PB2
11
 
12
#define BT_PORT    PORTC
13
#define BT_DDR     DDRC
14
#define BT_PIN     PINC
15
#define BT_BIT     PC7
16
 
17
static inline void my_wdt_off(void)
18
{
19
        cli();
20
        wdt_reset();
21
        /* Clear WDRF in MCUSR */
22
        MCUSR &= ~(1<<WDRF);
23
        /* Write logical one to WDCE and WDE */
24
        /* Keep old prescaler setting to prevent unintentional time-out */
25
        WDTCSR |= (1<<WDCE) | (1<<WDE);
26
        /* Turn off WDT */
27
        WDTCSR = 0x00;
28
}
29
 
30
static void my_delay( void )
31
{
32
        int i;
33
        for ( i=0; i<500; i++ ) {
34
                _delay_ms(1);
35
        }
36
}
37
 
38
int main( void )
39
{
40
        my_wdt_off();
41
 
42
        LED_PORT |=  ( 1<<LED_BIT );
43
        LED_DDR  |=  ( 1<<LED_BIT );
44
 
45
        BT_DDR   &= ~( 1<<BT_BIT );
46
        BT_PORT  |=  ( 1<<BT_BIT );
47
 
48
        while ( 1 ) {
49
                LED_PORT &= ~( 1<<LED_BIT );
50
                my_delay();
51
                LED_PORT |=  ( 1<<LED_BIT );
52
                my_delay();
53
 
54
                if ( !( BT_PIN & ( 1<<BT_BIT ) ) ) {
55
                        /* start bootloader */
56
                        wdt_enable( WDTO_250MS );
57
                        while (1) { ; }
58
                }
59
        }
60
 
61
        return 0; /* never reached */
62
}