/* BlueDataDistributor - data distribution module from ethernet to 32 serial ports
* version 0.1.1 date 2006-10-07
* Copyright (C) 2006 Stefan Schuermans <stefan@blinkenarea.org>
* a BlinkenArea project - http://www.blinkenarea.org/
*/
#include <avr/io.h>
#include <avr/signal.h>
#include "config.h"
#include "ethernet.h"
#include "macros.h"
#include "rtl8019.h"
#include "timing.h"
// maximum receive unit
#define RTL_MRU 1024
// reinitialization timeout
// - if no reception is detected for this time, the RTL8019 is reinitialized
#define RtlReinitTimeoutTicks 50 // in 200ms steps
// IO pins of RTL8019
#define RTL_ADDR_DDR DDRC
#define RTL_ADDR PORTC
#define RTL_DATA_DDR DDRA
#define RTL_DATA PORTA
#define RTL_DATA_IN PINA
#define RTL_ADDR_nRD 5
#define RTL_ADDR_nWR 6
#define RTL_ADDR_RST 7
// adress port masks (there are also RD, WR and RESET pins)
#define RTL_ADDR_AND_MASK 0x1F
#define RTL_ADDR_OR_MASK (1<<RTL_ADDR_nRD | 1<<RTL_ADDR_nWR)
#define RTL_ADDR_RESET (1<<RTL_ADDR_nRD | 1<<RTL_ADDR_nWR | 1<<RTL_ADDR_RST)
// special pins
#define RTL_READ_ACT( ) (bit_clear( RTL_ADDR, RTL_ADDR_nRD ))
#define RTL_READ_IDLE( ) (bit_set( RTL_ADDR, RTL_ADDR_nRD ))
#define RTL_WRITE_ACT( ) (bit_clear( RTL_ADDR, RTL_ADDR_nWR ))
#define RTL_WRITE_IDLE( ) (bit_set( RTL_ADDR, RTL_ADDR_nWR ))
#define RTL_RESET_ACT( ) (bit_set( RTL_ADDR, RTL_ADDR_RST ))
#define RTL_RESET_IDLE( ) (bit_clear( RTL_ADDR, RTL_ADDR_RST ))
// RTL8019 registers
#define RTL_REG_CR 0x00
#define RTL_REG_PSTART 0x01
#define RTL_REG_PAR0 0x01
#define RTL_REG_PSTOP 0x02
#define RTL_REG_BNRY 0x03
#define RTL_REG_TPSR 0x04
#define RTL_REG_TBCR0 0x05