没有驱动EEPROM的,给你个TWI驱动,你自己按照EEPROM时序自己改改吧。
/****************************************************************************
* 名称 : Reset_TWI
* 功能 : 复位 TWI接口
* 入口参数 :无
* 返回值 :无
****************************************************************************/
void Reset_TWI(void)
{
//RESET_TWI CONTROLLER
*pTWI_CONTROL = RESET_TWI;
ssync();
//CLEAR ALL ERRONOUS CONDITIONS BEFORE ENABLING TWI
*pTWI_MASTER_STAT = BUFWRERR | BUFRDERR | LOSTARB | ANAK | DNAK;
ssync();
//CLEAR ALL INTERRUPTS BEFORE ENABLING TWI
*pTWI_INT_STAT = SINIT | SCOMP | SERR | SOVF | MCOMP | MERR | XMTSERV | RCVSERV;
ssync();
//FLUSH THE FIFOs - BOTH TX AND RX.
*pTWI_FIFO_CTL = XMTFLUSH | RCVFLUSH;
ssync();
}
/****************************************************************************
* 名称 : TWI_MasterMode_Write
* 功能 : TWI接口写数据
* 入口参数 :无
* 返回值 :无
****************************************************************************/
void TWI_MasterMode_Write(unsigned short DeviceAddr, unsigned short *TWI_Data_Pointer, unsigned short TX_Count, unsigned short TWI_TX_Length)
{
int i, j;
//FLUSH THE FIFOs - BOTH TX AND RX.
*pTWI_FIFO_CTL = XMTFLUSH | RCVFLUSH;
ssync();
*pTWI_MASTER_STAT = BUFWRERR | BUFRDERR | LOSTARB | ANAK | DNAK;
ssync();
*pTWI_FIFO_CTL = 0; // Clear the bit manually
*pTWI_CONTROL = TWI_ENA | PRESCALE_VALUE; // PRESCALE = fsclk/10MHz
*pTWI_CLKDIV = ((CLKDIV_HI) << 8) | (CLKDIV_LO); // For 100KHz SCL speed: CLKDIV = (1/100KHz)/(1/10MHz) = 100 -> SCL symetric: CLKHI = 50, CLKLOW = 50
*pTWI_MASTER_ADDR = DeviceAddr; // Target address (7-bits plus the read/write bit the TWI controls
for (i = 0; i < TX_Count; i++)
{
delay();
// # of configurations to send to the sensor
*pTWI_XMT_DATA8 = *TWI_Data_Pointer++; // Pointer to an array and load a value where a list of data is located
*pTWI_MASTER_CTL = (TWI_TX_Length<<6) | MEN;// | FAST; // Start transmission
for (j = 0; j < (TWI_TX_Length-1); j++)
{
// # of transfers before stop condition
while (*pTWI_FIFO_STAT == XMTSTAT) // wait to load the next sample into the TX FIFO
ssync();
*pTWI_XMT_DATA8 = *TWI_Data_Pointer++; // Load the next sample into the TX FIFO. Pointer to an array where a list of data is located
ssync();
}
while ((*pTWI_INT_STAT & MCOMP) == 0) // Wait until transmission complete and MCOMP is set
ssync();
*pTWI_INT_STAT = XMTSERV | MCOMP; // service TWI for next transmission
delay();
}
asm("nop;");
asm("nop;");
asm("nop;");
}