#include <define.h>
#include <ENC28J60.h>

#define ENC28J60		PB3
#define ENC28J61		PB4
#define DUMMY			0x00
unsigned char i, data, data0[] = {}, data1[] = {}, data2[] = {}, 
data3[16] = {0b11111010, 0b00000101, 0,0,0,0,0,0,0b11111010,0b00000101,255,0b00011111,0b11111010,0b00000101,0,0};


void ENC28J60_CS(void)				// ENC28J60 Select
{
	SPI_PORT &= ~(1<<ENC28J60);
}

void ENC28J60_DS(void)				// ENC28J60 DeSelect
{
	SPI_PORT |= (1<<ENC28J60);
}

void ENC28J61_CS(void)				// ENC28J60 Select
{
	SPI_PORT &= ~(1<<ENC28J61);
}

void ENC28J61_DS(void)				// ENC28J60 DeSelect
{
	SPI_PORT |= (1<<ENC28J61);
}

void ENC28J60_SRC(void)				// System Reset Command (Soft Reset) 
{
	ENC28J60_CS();					// Enable
	SPIWR(0xFF);
	ENC28J60_DS();					// Disable
	_delay_ms(50);
}

int main(void)
{
_delay_ms(3000);
USART0_Init(12);
USART0_TX_String("USART Ready");
USART0_TXD(10);						
USART0_TXD(13);

SPI_Init();
PORTB ^= 1<<PINB0;
USART0_TX_String("SPI Ready");
USART0_TXD(10);						
USART0_TXD(13);

ENC28J60_DS();
ENC28J61_DS();
_delay_ms(250);

ENC28J60_SRC();
ENC28J61_CS();					// Enable
SPIWR(0xFF);
ENC28J61_DS();					// Disable
_delay_ms(250);

ENC28J60_CS();
SPIWR(RCR|ERDPTL);
PORTB ^= 1<<PINB0;
USART0_TX_String("1 RCR-ERDPTL Send: ");
itoa(RCR|ERDPTL, StringA, 10);
USART0_TX_String(StringA);
USART0_TXD(10);						
USART0_TXD(13);
data = SPIWRD(0xFF);

for(i = 0;i<15;i++)
{
	data0[i] = SPIWRD(0xFF);
}

ENC28J60_DS();


for(i = 0;i<16;i++)
{
	PORTB ^= 1<<PINB0;
	itoa(i, StringA, 10);
	USART0_TX_String(StringA);
	USART0_TXD(9);
	
	itoa(data0[i], StringA, 2);
	USART0_TX_String(StringA);
	USART0_TXD(9);
	USART0_TXD(9);
	
	itoa(data3[i], StringA, 2);
	USART0_TX_String(StringA);
	USART0_TXD(9);
	
	if(data0[i] == data3[i])
	{
		USART0_TX_String("OK");
	}
	else
	{
		USART0_TX_String("ERROR");
	}
	
	USART0_TXD(10);						
	USART0_TXD(13);
}

PORTB |= 1<<PINB0;

	while(1)
	{
		
	}
}
