Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
550 | 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 | |||
38 | #define BAUD_RATE1 57600 //Baud Rate für UART2 |
||
39 | |||
40 | #if defined (__AVR_ATmega644P__) |
||
41 | # define USR UCSR0A |
||
42 | # define UCR UCSR0B |
||
43 | # define UDR UDR0 |
||
44 | # define UBRR UBRR0L |
||
45 | # define EICR EICR0B |
||
46 | # define TXEN TXEN0 |
||
47 | # define RXEN RXEN0 |
||
48 | # define RXCIE RXCIE0 |
||
49 | # define TXCIE TXCIE0 |
||
50 | # define U2X U2X0 |
||
51 | # define UCSRB UCSR0B |
||
52 | # define UDRE UDRE0 |
||
53 | # define INT_VEC_RX SIG_USART_RECV |
||
54 | # define INT_VEC_TX SIG_USART_TRANS |
||
55 | #endif |
||
56 | |||
57 | extern void UART1_Init (void); |
||
58 | |||
59 | |||
60 | ******************************************************************************** |
||
61 | in "uart.c" hinzufügen: und die entsprechenden interrupt routinen mit code füllen |
||
62 | |||
63 | |||
64 | //############################################################################ |
||
65 | //INstallation der 2ten Seriellen Schnittstelle |
||
66 | void UART1_Init (void) |
||
67 | //############################################################################ |
||
68 | { |
||
69 | //Enable TXEN im Register UCR TX-Data Enable & RX Enable |
||
70 | |||
71 | UCSR1B=(1 << TXEN) | (1 << RXEN); |
||
72 | // UART Double Speed (U2X) |
||
73 | UCSR1A |= (1<<U2X); |
||
74 | // RX-Interrupt Freigabe |
||
75 | UCSR1B |= (1<<RXCIE); |
||
76 | // TX-Interrupt Freigabe |
||
77 | UCSR1B |= (1<<TXCIE); |
||
78 | |||
79 | //Teiler wird gesetzt |
||
80 | UBRR1L=(SYSCLK / (BAUD_RATE1 * 8L) - 1); |
||
81 | //UBRR1L = 33; |
||
82 | //öffnet einen Kanal für printf (STDOUT) |
||
83 | //fdevopen (uart_putchar, 0); |
||
84 | //sbi(PORTD,4); |
||
85 | Debug_Timer = SetDelay(200); |
||
86 | } |
||
87 | |||
88 | |||
89 | |||
90 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
91 | //++ Sende-Part der Datenübertragung an zweiten UART |
||
92 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
93 | SIGNAL(SIG_USART1_TRANS) |
||
94 | { |
||
95 | |||
96 | |||
97 | |||
98 | } |
||
99 | |||
100 | |||
101 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
102 | //++ Empfangs-Part der Datenübertragung von zweitem UART |
||
103 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
104 | SIGNAL(SIG_USART1_RECV) |
||
105 | { |
||
106 | |||
107 | |||
108 | |||
109 | } |
||
110 | |||
111 | |||
112 | |||
113 | ******************************************************************************** |
||
114 | |||
115 | Was sonst noch zu beachten ist: |
||
116 | |||
117 | in "main.c" an geeigneter Stelle (z.B. dort wo bereits "UART_Init" aufgerufen wird nun auch "UART1_Init" aufrufen |
||
118 | |||
119 | |||
120 | Wenn in einer Routine der Zugriff auf ein altes UART Register vorkommt, welches nun auf UART1 (2ter Uart) gehen soll, |
||
121 | dann muß der Zugriff natülich auch umgestellt werden. Bei den zugehörigen register Bit Definitionen gilt zwar das gleich, da |
||
122 | die Bits bei UART0 und UART1 jedoch an selber Stelle im register ist es hier nur Kosmetisch nötig. |
||
123 | |||
124 | hierbei gilt: |
||
125 | |||
126 | alt (Zugriff auf Uart0) > neu (Zugriff auf Uart1) |
||
127 | |||
128 | USR > UCSR1A |
||
129 | UCR > UCSR1B |
||
130 | UDR > UDR1 |
||
131 | UBRR > UBRR1L |
||
132 | EICR > EICR1B |
||
133 | TXEN > TXEN1 |
||
134 | RXEN > RXEN1 |
||
135 | RXCIE > RXCIE1 |
||
136 | TXCIE > TXCIE1 |
||
137 | U2X > U2X1 |
||
138 | UCSRB > UCSR1B |
||
139 | UDRE > UDRE1 |
||
140 | |||
141 | UCSR0A > UCSR1A |
||
142 | UCSR0B > UCSR1B |
||
143 | UDR0 > UDR1 |
||
144 | UBRR0L > UBRR1L |
||
145 | EICR0B > EICR1B |
||
146 | TXEN0 > TXEN1 |
||
147 | RXEN0 > RXEN1 |
||
148 | RXCIE0 > RXCIE1 |
||
149 | TXCIE0 > TXCIE1 |
||
150 | U2X0 > U2X1 |
||
151 | UCSR0B > UCSR1B |
||
152 | UDRE0 > UDRE1 |
||
153 | |||
154 | |||
155 |