Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
681 | walter | 1 | ******************************************************************************** |
2 | in "makefile": |
||
3 | MCU = atmega644 |
||
4 | ändern in: |
||
5 | MCU = atmega644p |
||
6 | |||
7 | in "makefile" an entsprechender Stelle hinzufügen: |
||
8 | ifeq ($(MCU), atmega644p) |
||
9 | FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
||
10 | #FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
||
11 | |||
12 | # -u bei neuen Controllern wieder einspielen |
||
13 | |||
14 | HEX_NAME = MEGA644P |
||
15 | endif |
||
16 | |||
17 | |||
18 | ******************************************************************************** |
||
19 | in "main.h" hinzufügen: (bei den anderen #defines) |
||
20 | |||
21 | #if defined (__AVR_ATmega644P__) |
||
22 | #define SYSCLK 20000000L //Quarz Frequenz in Hz |
||
23 | //#define SYSCLK 16000000L //Quarz Frequenz in Hz |
||
24 | #endif |
||
25 | |||
26 | ******************************************************************************** |
||
27 | in "rc.h" hinzufügen: (bei den anderen #defines) |
||
28 | #if defined (__AVR_ATmega644P__) |
||
29 | //#define TIMER_TEILER CK64 |
||
30 | #define TIMER_RELOAD_VALUE 250 |
||
31 | //#define TIMER_TEILER CK256 // bei 20MHz |
||
32 | //#define TIMER_RELOAD_VALUE -78 // bei 20MHz |
||
33 | #endif |
||
34 | |||
35 | ******************************************************************************** |
||
36 | in "uart.h" hinzufügen: (bei den anderen #defines) |
||
37 | #if defined (__AVR_ATmega644P__) |
||
38 | # define USR UCSR0A |
||
39 | # define UCR UCSR0B |
||
40 | # define UDR UDR0 |
||
41 | # define UBRR UBRR0L |
||
42 | # define EICR EICR0B |
||
43 | # define TXEN TXEN0 |
||
44 | # define RXEN RXEN0 |
||
45 | # define RXCIE RXCIE0 |
||
46 | # define TXCIE TXCIE0 |
||
47 | # define U2X U2X0 |
||
48 | # define UCSRB UCSR0B |
||
49 | # define UDRE UDRE0 |
||
50 | # define INT_VEC_RX SIG_USART_RECV |
||
51 | # define INT_VEC_TX SIG_USART_TRANS |
||
52 | #endif |
||
53 | |||
54 | #define BAUD_RATE1 57600 //Baud Rate für UART2 |
||
55 | |||
56 | ******************************************************************************** |
||
57 | in "uart.c" hinzufügen: und die entsprechenden interrupt routinen mit code füllen |
||
58 | |||
59 | |||
60 | //############################################################################ |
||
61 | //INstallation der 2ten Seriellen Schnittstelle |
||
62 | void UART1_Init (void) |
||
63 | //############################################################################ |
||
64 | { |
||
65 | //Enable TXEN im Register UCR TX-Data Enable & RX Enable |
||
66 | |||
67 | UCSR1B=(1 << TXEN) | (1 << RXEN); |
||
68 | // UART Double Speed (U2X) |
||
69 | UCSR1A |= (1<<U2X); |
||
70 | // RX-Interrupt Freigabe |
||
71 | UCSR1B |= (1<<RXCIE); |
||
72 | // TX-Interrupt Freigabe |
||
73 | UCSR1B |= (1<<TXCIE); |
||
74 | |||
75 | //Teiler wird gesetzt |
||
76 | UBRR1L=(SYSCLK / (BAUD_RATE1 * 8L) - 1); |
||
77 | //UBRR1L = 33; |
||
78 | //öffnet einen Kanal für printf (STDOUT) |
||
79 | //fdevopen (uart_putchar, 0); |
||
80 | //sbi(PORTD,4); |
||
81 | Debug_Timer = SetDelay(200); |
||
82 | } |
||
83 | |||
84 | |||
85 | |||
86 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
87 | //++ Sende-Part der Datenübertragung an zweiten UART |
||
88 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
89 | SIGNAL(SIG_USART1_RECV) |
||
90 | { |
||
91 | |||
92 | |||
93 | |||
94 | } |
||
95 | |||
96 | |||
97 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
98 | //++ Empfangs-Part der Datenübertragung von zweitem UART |
||
99 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
100 | SIGNAL(SIG_USART1_TRANS) |
||
101 | { |
||
102 | |||
103 | |||
104 | |||
105 | } |
||
106 | |||
107 | |||
108 | |||
109 | ******************************************************************************** |
||
110 | |||
111 | Was sonst noch zu beachten ist: |
||
112 | |||
113 | in "main.c" an geeigneter Stelle (z.B. dort wo bereits "UART_Init" aufgerufen wird nun auch "UART1_Init" aufrufen |
||
114 | |||
115 | |||
116 | Wenn in einer Routine der Zugriff auf ein alter UART Register vorkommt, welches nun auf UART1 (2ter Uart) gehen soll, dann muß der Zugriff natülich auch umgestellt werden: |
||
117 | |||
118 | hierbei gilt: |
||
119 | |||
120 | alt (Zugriff auf Uart0) > neu (Zugriff auf Uart1) |
||
121 | |||
122 | USR > UCSR1A |
||
123 | UCR > UCSR1B |
||
124 | UDR > UDR1 |
||
125 | UBRR > UBRR1L |
||
126 | EICR > EICR1B |
||
127 | TXEN > TXEN1 |
||
128 | RXEN > RXEN1 |
||
129 | RXCIE > RXCIE1 |
||
130 | TXCIE > TXCIE1 |
||
131 | U2X > U2X1 |
||
132 | UCSRB > UCSR1B |
||
133 | UDRE > UDRE1 |
||
134 | |||
135 | UCSR0A > UCSR0A |
||
136 | UCSR0B > UCSR0B |
||
137 | UDR0 > UDR0 |
||
138 | UBRR0L > UBRR0L |
||
139 | EICR0B > EICR0B |
||
140 | TXEN0 > TXEN0 |
||
141 | RXEN0 > RXEN0 |
||
142 | RXCIE0 > RXCIE0 |
||
143 | TXCIE0 > TXCIE0 |
||
144 | U2X0 > U2X0 |
||
145 | UCSR0B > UCSR0B |
||
146 | UDRE0 > UDRE0 |
||
147 | |||
148 |