0,0 → 1,148 |
******************************************************************************** |
in "makefile": |
MCU = atmega644 |
ändern in: |
MCU = atmega644p |
|
in "makefile" an entsprechender Stelle hinzufügen: |
ifeq ($(MCU), atmega644p) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
|
# -u bei neuen Controllern wieder einspielen |
|
HEX_NAME = MEGA644P |
endif |
|
|
******************************************************************************** |
in "main.h" hinzufügen: (bei den anderen #defines) |
|
#if defined (__AVR_ATmega644P__) |
#define SYSCLK 20000000L //Quarz Frequenz in Hz |
//#define SYSCLK 16000000L //Quarz Frequenz in Hz |
#endif |
|
******************************************************************************** |
in "rc.h" hinzufügen: (bei den anderen #defines) |
#if defined (__AVR_ATmega644P__) |
//#define TIMER_TEILER CK64 |
#define TIMER_RELOAD_VALUE 250 |
//#define TIMER_TEILER CK256 // bei 20MHz |
//#define TIMER_RELOAD_VALUE -78 // bei 20MHz |
#endif |
|
******************************************************************************** |
in "uart.h" hinzufügen: (bei den anderen #defines) |
#if defined (__AVR_ATmega644P__) |
# define USR UCSR0A |
# define UCR UCSR0B |
# define UDR UDR0 |
# define UBRR UBRR0L |
# define EICR EICR0B |
# define TXEN TXEN0 |
# define RXEN RXEN0 |
# define RXCIE RXCIE0 |
# define TXCIE TXCIE0 |
# define U2X U2X0 |
# define UCSRB UCSR0B |
# define UDRE UDRE0 |
# define INT_VEC_RX SIG_USART_RECV |
# define INT_VEC_TX SIG_USART_TRANS |
#endif |
|
#define BAUD_RATE1 57600 //Baud Rate für UART2 |
|
******************************************************************************** |
in "uart.c" hinzufügen: und die entsprechenden interrupt routinen mit code füllen |
|
|
//############################################################################ |
//INstallation der 2ten Seriellen Schnittstelle |
void UART1_Init (void) |
//############################################################################ |
{ |
//Enable TXEN im Register UCR TX-Data Enable & RX Enable |
|
UCSR1B=(1 << TXEN) | (1 << RXEN); |
// UART Double Speed (U2X) |
UCSR1A |= (1<<U2X); |
// RX-Interrupt Freigabe |
UCSR1B |= (1<<RXCIE); |
// TX-Interrupt Freigabe |
UCSR1B |= (1<<TXCIE); |
|
//Teiler wird gesetzt |
UBRR1L=(SYSCLK / (BAUD_RATE1 * 8L) - 1); |
//UBRR1L = 33; |
//öffnet einen Kanal für printf (STDOUT) |
//fdevopen (uart_putchar, 0); |
//sbi(PORTD,4); |
Debug_Timer = SetDelay(200); |
} |
|
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Sende-Part der Datenübertragung an zweiten UART |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(SIG_USART1_RECV) |
{ |
|
|
|
} |
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
//++ Empfangs-Part der Datenübertragung von zweitem UART |
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
SIGNAL(SIG_USART1_TRANS) |
{ |
|
|
|
} |
|
|
|
******************************************************************************** |
|
Was sonst noch zu beachten ist: |
|
in "main.c" an geeigneter Stelle (z.B. dort wo bereits "UART_Init" aufgerufen wird nun auch "UART1_Init" aufrufen |
|
|
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: |
|
hierbei gilt: |
|
alt (Zugriff auf Uart0) > neu (Zugriff auf Uart1) |
|
USR > UCSR1A |
UCR > UCSR1B |
UDR > UDR1 |
UBRR > UBRR1L |
EICR > EICR1B |
TXEN > TXEN1 |
RXEN > RXEN1 |
RXCIE > RXCIE1 |
TXCIE > TXCIE1 |
U2X > U2X1 |
UCSRB > UCSR1B |
UDRE > UDRE1 |
|
UCSR0A > UCSR0A |
UCSR0B > UCSR0B |
UDR0 > UDR0 |
UBRR0L > UBRR0L |
EICR0B > EICR0B |
TXEN0 > TXEN0 |
RXEN0 > RXEN0 |
RXCIE0 > RXCIE0 |
TXCIE0 > TXCIE0 |
U2X0 > U2X0 |
UCSR0B > UCSR0B |
UDRE0 > UDRE0 |
|
|