From ba78bd9ba834260d035a9830726afc34fdad2a15 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sun, 18 Oct 2009 23:32:54 +0200 Subject: import firmware from LEGO v1.05 --- ATmega48/Source/d_pccomm.r | 93 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 ATmega48/Source/d_pccomm.r (limited to 'ATmega48/Source/d_pccomm.r') diff --git a/ATmega48/Source/d_pccomm.r b/ATmega48/Source/d_pccomm.r new file mode 100644 index 0000000..0660ac7 --- /dev/null +++ b/ATmega48/Source/d_pccomm.r @@ -0,0 +1,93 @@ +// +// Programmer +// +// Date init 14.12.2004 +// +// Reviser $Author:: Dktochpe $ +// +// Revision date $Date:: 22-02-05 11:10 $ +// +// Filename $Workfile:: d_pccomm.r $ +// +// Version $Revision:: 6 $ +// +// Archive $Archive:: /LMS2006/Sys01/Ioctrl/Firmware/Source/d_pccomm $ +// +// Platform C +// + +#ifdef ATMEGAX8 + +#define BAUD_RATE 4800L + +#define RX_BUFFERSIZE (BYTES_TO_TX) +#define TX_BUFFERSIZE (BYTES_TO_RX) + +UBYTE RxBuffer[RX_BUFFERSIZE]; +UBYTE RxPointer; + +UBYTE TxBuffer[TX_BUFFERSIZE]; +UBYTE TxPointer; + +#pragma language=extended +#pragma vector = USART_RX_vect +__interrupt void RxInterrupt(void) +{ + UBYTE *pBuffer; + + RxBuffer[RxPointer] = UDR0; + RxPointer++; + if (RxPointer >= RX_BUFFERSIZE) + { + pBuffer = (UBYTE*)&IoToAvr; + for (RxPointer = 0;RxPointer < RX_BUFFERSIZE;RxPointer++) + { + *pBuffer = RxBuffer[RxPointer]; + pBuffer++; + } + RxPointer = 0; + pBuffer = (UBYTE*)&IoFromAvr; + for (TxPointer = 0;TxPointer < TX_BUFFERSIZE;TxPointer++) + { + TxBuffer[TxPointer] = *pBuffer; + pBuffer++; + } + TxPointer = 0; + UDR0 = TxBuffer[TxPointer]; + TxPointer++; + UCSR0B |= 0x40; + } +} + +#pragma language=extended +#pragma vector = USART_TX_vect +__interrupt void TxInterrupt(void) +{ + UDR0 = TxBuffer[TxPointer]; + TxPointer++; + if (TxPointer >= TX_BUFFERSIZE) + { + UCSR0B &= ~0x40; + TxPointer = 0; + RxPointer = 0; + } +} + +#define INITPcComm {\ + DDRD |= 0x02;\ + DDRD &= ~0x01;\ + UBRR0 = (UWORD)((OSC/(16 * BAUD_RATE)) - 1);\ + UCSR0A = 0x40;\ + UCSR0B = 0x98;\ + UCSR0C = 0x36;\ + RxPointer = 0;\ + } + +#define EXITPcComm {\ + UCSR0B = 0x00;\ + PORTD &= ~0x01;\ + DDRD |= 0x01;\ + } + + +#endif -- cgit v1.2.3