s08 EE_pageWrite( u16 i2c_address,u08 length, char *data) { // Esta funcion controla que se escriba una pagina, controlando que la direccion // de escritura sea una frontera de pagina. s08 ret = FALSE; // Controlo que el tamano no exceda al de una pagina if (length > EERDBUFLENGHT) { length = EERDBUFLENGHT; } // Ajusto la direccion de escritura a la frontera de pagina mas proxima if ( (i2c_address % EEPAGESIZE) != 0 ) { i2c_address = (i2c_address / EEPAGESIZE ) * EEPAGESIZE; } while ( xSemaphoreTake( semph_I2C, ( TickType_t ) 10 ) != pdTRUE ) taskYIELD(); ret = i2c_masterWrite (EE24X, i2c_address, EE_ID, EE_ADDR, length, data); xSemaphoreGive( semph_I2C ); return(ret); }
// mux uint8_t mux_setChannel(uint8_t address, mux_chan_t channel) { uint8_t chan[1]; uint8_t result; chan[0] = 1 << channel; // set channel result = i2c_masterWrite(address, 1, chan); return result; }
// mux uint8_t mux_setChannel(mux_chan_t channel) { uint8_t chan[1]; uint8_t result; chan[0] = 1 << channel; // set channel mux_reset(); result = i2c_masterWrite(MUX_ADDRESS, 1, chan); return result; }
uint8_t obc_sendCmd(uint8_t slaveAddress, uint8_t cmdAddr, uint8_t cmd) { volatile uint8_t result; uint8_t cmdData[2]={0}; cmdData[0]= cmdAddr; cmdData[1]= cmd; result = i2c_masterWrite(slaveAddress,2,cmdData); if (result == ERROR){ return ERROR;} return SUCCESS; }
s08 EE_write( u16 i2c_address,u08 length, char *data) { // Esta funcion escribe a partir de una posicion dada de la eeprom que no tiene // porque coincidir con una pagina. // Esto puede traer problemas ya que muchas veces la eeprom se graba por paginas s08 ret = FALSE; while ( xSemaphoreTake( semph_I2C, ( TickType_t ) 10 ) != pdTRUE ) taskYIELD(); ret = i2c_masterWrite (EE24X, i2c_address, EE_ID, EE_ADDR, length, data); xSemaphoreGive( semph_I2C ); return(ret); }
uint8_t obc_sendData(uint8_t slaveAddress, uint8_t dataAddr, uint8_t size, uint8_t* data) { #define MAX_SEND_DATA_SIZE (16) volatile uint8_t i; volatile uint8_t result; uint8_t txData[MAX_SEND_DATA_SIZE] ={0}; for (i = 0 ; i < size ; i++ ) { txData[i+1] = data[i]; } txData[0]=dataAddr; result = i2c_masterWrite(slaveAddress,1+size,txData); if (result == ERROR){return ERROR;} return SUCCESS; }