unsigned int lsb = 0; unsigned int msb = 0; *pTWIMITR = 20 | TWIEN; *pTWIDIV = 0x0000C0D; *pTWIFIFOCTL = TWIBHD; *pTWIMADDR = device_address; *pTXTWI8 = register_address; *pTWIMCTL = TWIDCNT1|TWIFAST|TWIMEN; while(*pTWIFIFOSTAT & TWITXS) { enable_mode_loop_counter++; if (enable_mode_loop_counter >= TWI_LOOP_LIMIT) { break; } } *pTWIMCTL = TWIDCNT1|TWIMEN|TWIMDIR; while((*pTWIFIFOSTAT & TWIRXS) == 0) { enable_mode_data_loop_counter++; if (enable_mode_data_loop_counter >= TWI_LOOP_LIMIT) { break; } } msb = *pRXTWI8; *data = msb; *pTWIMCTL = TWIDCNT1|TWIMEN|TWIMDIR; while((*pTWIFIFOSTAT & TWIRXS) == 0) { enable_mode_data_loop_counter++; if (enable_mode_data_loop_counter >= TWI_LOOP_LIMIT) { break; } } lsb = *pRXTWI8; *data = lsb|(msb<<8); while(*pTWIMSTAT & TWIMPROG) { transfer_complete_loop_counter++; if (transfer_complete_loop_counter >= TWI_LOOP_LIMIT) { break; } }