#include <mem.h>

void ByteSend(unsigned char start, unsigned char end)			// max 32byte
{
	for(unsigned char i = start; i<end; i++)
    {
		SPIWR(data[i]);
		_delay_us(1);
		SPI_PORT |= (1<<SR);
		_delay_us(1);
		SPI_PORT &= ~(1<<SR);
		PORTD ^= (1<<PIND5);
		_delay_ms(1000);
		PORTD ^= (1<<PIND5);
		_delay_ms(1000);
    }
}

int main(void)
{
	SPI_Init();
	SPI_PORT |= (1<<ROM);
	SPI_PORT &= ~(1<<SR);
	
	DDRD |= (1<<PIND5);

	while(1)
	{
		SPIWR(0xFF);					// 0b11111111
		_delay_us(1);
		SPI_PORT |= (1<<SR);
		_delay_us(1);
		SPI_PORT &= ~(1<<SR);
		PORTD ^= (1<<PIND5);
		_delay_ms(2000);				// ON
		
		SPIWR(0x11);					// 0b00010001
		_delay_us(1);
		SPI_PORT |= (1<<SR);
		_delay_us(1);
		SPI_PORT &= ~(1<<SR);
		PORTD ^= (1<<PIND5);
		_delay_ms(2000);				// OFF
		
		//------------------//
		
		ROMSR = ROMRDSR();			// ROM SR READ
		
		SPIWR(ROMSR);					// 0x00
		SPI_PORT |= (1<<SR);
		_delay_us(1);
		SPI_PORT &= ~(1<<SR);
		PORTD ^= (1<<PIND5);			// ON
		_delay_ms(2000);
		
		//------------------//
		
		ROMBusyCheck();
		
		ROMSR = (WPEN | BP0 | BP1);
		
		ROMWRSR(ROMSR);				// ROM SR Write
		
		ROMSR = ROMRDSR();			// ROM SR READ
		
		SPIWR(ROMSR);					// 0b10001100
		SPI_PORT |= (1<<SR);
		_delay_us(1);
		SPI_PORT &= ~(1<<SR);
		_delay_ms(5);
		PORTD ^= (1<<PIND5);			// OFF
		_delay_ms(2000);
		
		//------------------//
		
		ROMWRSR(0x00);					// ROM SR Write
		
		ROMSR = ROMRDSR();			// ROM SR READ
		
		SPIWR(ROMSR);					// 0x00
		SPI_PORT |= (1<<SR);
		_delay_us(1);
		SPI_PORT &= ~(1<<SR);
		PORTD ^= (1<<PIND5);			// ON
		_delay_ms(2000);
		PORTD ^= (1<<PIND5);			// OFF
		
		//------------------//
		
		ROMWR(0x00, 0x00, 0, 31);
		
		ROMRD(0x00, 0x00, 0, 31);
		
		ByteSend(0, 32);
		
	}
	
}