Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 680 → Rev 681

/branches/Flight-Ctrl_V0_xx_GPS_Joko/2_serial.txt
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