/* MTP eeprom routines */
/* Designed by Paolo Subiaco http://www.creasol.it */

#ifndef __MTP_EEPROM_H__
#define __MTP_EEPROM_H__
#include "main.h"

//#define DEBUG_MTPEE	// if defined, write sk, cs, and di on external MCU pins

#ifdef DEBUG_MTPEE
	#undef mtpee_cs
	#undef mtpee_di
	#undef mtpee_sk
	#define mtpee_cs _pb1
	#define mtpee_di _pb0
	#define mtpee_sk _pc1
	#define mtpee_dopin _pc0
#endif

#if MCU==4850 || MCU==4870 || MCU==4890
	#define MTP_EEPROM_LENGTH 256
#else
	#define MTP_EEPROM_LENGTH 128
#endif

// Command: first 5 bits of 10/12bit frame
#define MTP_CMD_EWEN		0b00010011	// enable writing
#define MTP_CMD_EWDS		0b00010000	// disable writing
#define MTP_CMD_ERAL		0b00010010	// erase all
#define MTP_CMD_WRAL		0b00010001	// write all
#define MTP_CMD_WRITE		0b00010100	// write byte
#define MTP_CMD_READ		0b00011000	// read byte; b2..7 contains the size of the data stream to be read
#define MTP_CMD_ERASE		0b00011100	// erase byte

// mtp_eepromWrite: enable eeprom, write data, disable eeprom
void mtp_epromWrite(uchar address, void *ptr, uchar size); 

// mtp_eepromRead: read data from eeprom (max 63 bytes)
// void mtp_epromRead(uchar address, void *ptr, uchar size);
#define mtp_eepromRead(address, ptr, size) 	mtp_rtx((MTP_CMD_READ),(address),(ptr),(size))

#endif
