Então, como ninguém respondeu...mas mesmo assim eu agradeço.
Eu não sei porque cargas dágua, se liga qualquer interrupção junto com o módulo i2c 1 ou 2, (o módulo não esta na interrupção)...o processador indoida. Ou seja, a rotina que roda na interrupção fica instável, é como se desse uma interferência quando se liga o módulo...coisa de doido. Essa doideira só ocorre quando eu ligo o módulo....Testei no 103, no 051 e até no 407...Como eu tô ficando véio, devo estar comendo bola em alguma coisa, só ainda não consegui achar o erro e acabei contornando assim
Bom eu acabei resolvendo, utilizando via soft i2c...
Segue abaixo como fazer a rotina, detalhe, serve para qualquer tamanho de eeprom até 16bits de endereço:
cpp code
/******************************************************
ROTINA VIA SOFTWARE I2C / DISABLE INTERRUPT ANTES:
*******************************************************/
void WriteMem(){ unsigned int ee_adr; unsigned char ee_data;
Soft_I2C_Start(); // Issue I2C start signal
Soft_I2C_Write(0xA2); // Send I2c Write Slave Address (of the 24c02)
ee_adr = wAddr;
Soft_I2C_Write(ee_adr); // Send EEPROM Word Address (here EEPROM place "2" will be written to)
ee_data = wData;
Soft_I2C_Write(ee_data); // Send data(data that will be written)
Soft_I2C_Stop(); // Issue I2C stop signal
Delay_ms(5); // wait for the maximum write time
}
void ReadMem(){ unsigned int ee_adr; unsigned char ee_data;
Soft_I2C_Start(); // Issue I2C start signal
Soft_I2C_Write(0xA2); // Send I2c Write Slave Address (of the 24c02)
ee_adr = wAddr;
Soft_I2C_Write(ee_adr); // Send EEPROM Word Address
Soft_I2C_Start(); // Issue I2Csignal repeated start
Soft_I2C_Write(0xA3); // Send I2c Read Slave Address (request data from EEPROM)
wData = Soft_I2C_Read(0); // Read the data, no ackcnowledge (last byte read)
Soft_I2C_Stop(); // Issue I2C_stop signal
}