#ifndef _XPERIPHSP6_LOADER_H
#define _XPERIPHSP6_LOADER_H

typedef union{
	unsigned int all;
	struct{
		unsigned int loader_on:1;
		unsigned int cs:1;
		unsigned int reserved0:2;
		unsigned int rw:1;
		unsigned int mode:1; 
		unsigned int reserved1:1;
		unsigned int data:1;
    	unsigned int reserved2:1;
		unsigned int clock:1;
		unsigned int reserved3:1;
		unsigned int plane_addr:4;
		unsigned int eeprom_read:1;
	}bit;
}ControlReg; 


typedef union{
	unsigned long all;
	struct{
		unsigned int addr0:8;
		unsigned int addr1:8;
		unsigned int addr2:8;
		unsigned int reserved:8;
	}bit;
}FlashAddr;

typedef union{
	unsigned long all;
	struct{
		unsigned int reserved:16;
		unsigned int reserved1:15;
		unsigned int data:1;
	}bit;
}AddrToSent;
 

typedef union{
	unsigned int all;
	struct{
		unsigned int reserved0:8;
		unsigned int dataReceived:1;
		unsigned int reserved1:6;
		unsigned int data:1;
	}bit;
}Byte;

typedef union{
	unsigned int all;
	struct{		
		unsigned int dataReceived:1;
		unsigned int reserved1:14;
		unsigned int data:1;
	}bit;
}Word;

typedef union{
	unsigned int all;
	struct{		
		unsigned int bit0:1;
		unsigned int bit1:1;
		unsigned int bit2:1;
		unsigned int bit3:1;

		unsigned int bit4:1;
		unsigned int bit5:1;
		unsigned int bit6:1;
		unsigned int bit7:1;

		unsigned int bit8:1;
		unsigned int bit9:1;
		unsigned int bit10:1;
		unsigned int bit11:1;

		unsigned int bit12:1;
		unsigned int bit13:1;
		unsigned int bit14:1;
		unsigned int bit15:1;

	}bit;
}WordToReverse;

typedef union{
	unsigned int all;
	struct{		
		unsigned int bit0:1;
		unsigned int bit1:1;
		unsigned int bit2:1;
		unsigned int bit3:1;

		unsigned int bit4:1;
		unsigned int bit5:1;
		unsigned int bit6:1;
		unsigned int bit7:1;

		unsigned int bit8:1;
		unsigned int bit9:1;
		unsigned int bit10:1;
		unsigned int bit11:1;

		unsigned int bit12:1;
		unsigned int bit13:1;
		unsigned int bit14:1;
		unsigned int bit15:1;
	}bit;
}WordReversed;



void memWrite (unsigned int adr_device, volatile unsigned long adr, 
               volatile unsigned long adr_eeprom, volatile unsigned long size, unsigned long *ok_write, 
               unsigned long *write_error, unsigned long *repeat_error );


void RDID(void);
void RDSR(void);
void WREN(void);
void WRDI(void);
void WRSR(void);
void RDSR(void);
void ERASE(void);
void READ(void);
void PROGRAM(void);



#endif