Rolled back -b for avrdude
[makefile] / project.cpp
1 // VERSION: 
2
3 /*
4  *      (c) copyright by J.P. Hendrix
5  *
6  *      More information on http://blog.linformatronics.nl/
7  */
8
9 #include <avr/io.h>
10
11 #define _BS(bit) ( 1 << ( bit ) )
12 #define _BC(bit) ( 0 << ( bit ) )
13
14 #ifndef F_CPU
15         #error "F_CPU not defined."
16 #endif
17
18 #pragma message "****************************"
19 #pragma message "*"
20
21 #if defined( __AVR_ATtiny25__ ) or defined( __AVR_ATtiny45__ ) or defined( __AVR_ATtiny85__ )
22         #pragma message "* Setting fuses for ATtiny45"
23         #ifdef __XTAL__
24                 #if     ( ( F_CPU >= 400000 ) and ( F_CPU < 900000 ) )
25                         #pragma message "* External crystal oscillator @ 0.4 - 0.9MHz"
26                         #error "The F_CPU CPU frequency bricks the controller unless a low speed programmer is available."
27                         // 400-900kHz                   CKSEL[3:0] = 1001       CKDIV8 = 0
28                         FUSES = { .low = 0xe9   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
29                 #elif   ( ( F_CPU >= 900000 ) and ( F_CPU < 3000000 ) )
30                         #pragma message "* External crystal oscillator @ 0.9 - 3MHz"
31                         #error "The F_CPU CPU frequency bricks the controller unless a low speed programmer is available."
32                         // 0.9-3MHz                     CKSEL[3:0] = 1011       CKDIV8 = 0
33                         FUSES = { .low = 0xeb   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
34                 #elif   ( ( F_CPU >= 3000000 ) and ( F_CPU < 8000000 ) )
35                         #pragma message "* External crystal oscillator @ 3 - 8MHz"
36                         // 3-8MHz                       CKSEL[3:0] = 1101       CKDIV8 = 0
37                         FUSES = { .low = 0xed   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
38                 #elif   ( ( F_CPU >= 8000000 ) and ( F_CPU <= 20000000 ) )
39                         #pragma message "* External crystal oscillator @ > 8MHz"
40                         // > 8MHz                       CKSEL[3:0] = 1111       CKDIV8 = 0
41                         FUSES = { .low = 0xef   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
42                 #else
43                         #pragma message "* Configuring for external clock"
44                         // ext. CLK                     CKSEL[3:0] = 0000       DIV8 = 0
45                         FUSES = { .low = 0x60   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
46                 #endif
47         #else
48                 #if     ( F_CPU == 16000000 )
49                         #pragma message "* @ 16|64MHz internal RC|PLL oscillator"
50                         // 16MHz        64MHz / 4       CKSEL[3:0] = 0001       CKDIV8 = 0
51                         FUSES = { .low = 0xe1   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
52                 #elif   ( F_CPU == 1000000 )
53                         #pragma message "* @ 1MHz internal RC oscillator"
54                         // 1MHz         8MHz / 8        CKSEL[3:0] = 0010       CKDIV8 = 1
55                         FUSES = { .low = 0x62   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
56                 #elif   ( F_CPU == 8000000 )
57                         #pragma message "* @ 8MHz internal RC oscillator"
58                         // 8MHz         8MHz / 1        CKSEL[3:0] = 0010       CKDIV8 = 0
59                         FUSES = { .low = 0xe2   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
60                 #elif   ( F_CPU == 1600000 )
61                         #pragma message "* @ 1.6MHz internal RC oscillator"
62                         #pragma message " ATtiny15 compatibility mode!"
63                         // 1.6MHz       6.4MHz / 4      CKSEL[3:0] = 0011       CKDIV8 = 0
64                         FUSES = { .low = 0xe3   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
65                 #elif   ( F_CPU == 128000 )
66                         #pragma message "* @ 128kHz internal RC oscillator"
67                         #error "The F_CPU CPU frequency bricks the controller unless a low speed programmer is available."
68                         // 128kHz       128kHz / 1      CKSEL[3:0] = 0100       CKDIV8 = 0
69                         FUSES = { .low = 0xe4   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
70                 #elif   ( F_CPU == 32768 )
71                         #pragma message "* Low frequency external crystal oscillator @ 32768Hz"
72                         #error "The F_CPU CPU frequency bricks the controller unless a low speed programmer is available."
73                         // 32768kHz     32768kHz / 1    CKSEL[3:0] = 0101       CKDIV8 = 0
74                         FUSES = { .low = 0xe5   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
75                 #else
76                         #error "F_CPU CPU frequency setting not recognized. Configuring for external clock."
77         #endif
78 #endif
79
80 #elif __AVR_ATtiny2313__
81         #pragma message "* Setting fuses for ATtiny2313"
82         #if   ( F_CPU == 500000 )
83                 // 500kHz       4MHz / 8        CKSEL[3:0] = 0010       DIV8 = 1
84                 #error "The F_CPU CPU frequency bricks the controller unless a low speed programmer is available."
85                 FUSES = { .low = 0x62   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
86         #elif ( F_CPU == 1000000 )
87                 #pragma message "* @ 1MHz"
88                 // 1MHz         8MHz / 8        CKSEL[3:0] = 0100       DIV8 = 1        (default)
89                 FUSES = { .low = 0x64   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
90         #elif ( F_CPU == 4000000 )
91                 #pragma message "* @ 4MHz"
92                 // 4MHz         4MHz / 1        CKSEL[3:0] = 0010       DIV8 = 0
93                 FUSES = { .low = 0xe2   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
94         #elif ( F_CPU == 8000000 )
95                 #pragma message "* @ 16MHz"
96                 // 8MHz         8MHz / 1        CKSEL[3:0] = 0100       DIV8 = 0
97                 FUSES = { .low = 0xe4   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
98         #else
99                 #warning "F_CPU CPU frequency setting not recognized. Configuring for external clock."
100                 #pragma message "* Configuring for external clock"
101                 // ext. CLK                     CKSEL[3:0] = 0000       DIV8 = 0
102                 FUSES = { .low = 0xe0   , .high = HFUSE_DEFAULT , .extended = EFUSE_DEFAULT , };
103         #endif
104 #endif
105
106 #pragma message "*"
107 #pragma message "****************************"
108
109 void setup( void ) {
110 }
111
112 int main( void ) {
113         setup();
114         while ( 1 ) {
115         }
116 }