Давайте тогда сверим часы - мне тоже интересен ваш код обмена, хотя вы его откуда-то позаимствовали, а я писала сама. :) Это обмен с капаситометром AD7745, но совершенно такого же вида код работал с магнитометром MAG3110 и генератором CDCE913.
bool AD7745_writeReg( unsigned char reg, unsigned char data)
{
TWIF.MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc;
TWIF.MASTER.ADDR = AD7745_ADDR << 1; // write
while( !(TWIF.MASTER.STATUS & TWI_MASTER_WIF_bm)); // wait
if( TWIF.MASTER.STATUS & TWI_MASTER_RXACK_bm) goto fail; // NACK?
TWIF.MASTER.CTRLC = TWI_MASTER_CMD_RECVTRANS_gc;
TWIF.MASTER.DATA = reg;
while( !(TWIF.MASTER.STATUS & TWI_MASTER_WIF_bm)); // wait
TWIF.MASTER.CTRLC = TWI_MASTER_CMD_RECVTRANS_gc;
TWIF.MASTER.DATA = data;
while( !(TWIF.MASTER.STATUS & TWI_MASTER_WIF_bm)); // wait
TWIF.MASTER.CTRLC = TWI_MASTER_CMD_RECVTRANS_gc;
TWIF.MASTER.CTRLC = TWI_MASTER_CMD_STOP_gc;
return true;
fail:
TWIF.MASTER.CTRLC = TWI_MASTER_CMD_STOP_gc;
return false;
}
bool AD7745_readReg( unsigned char reg, unsigned char *pdata)
{
TWIF.MASTER.STATUS = TWI_MASTER_BUSSTATE_IDLE_gc;
TWIF.MASTER.ADDR = AD7745_ADDR << 1; // write
while( !(TWIF.MASTER.STATUS & TWI_MASTER_WIF_bm)); // wait
if( TWIF.MASTER.STATUS & TWI_MASTER_RXACK_bm) goto fail; // NACK?
TWIF.MASTER.CTRLC = TWI_MASTER_CMD_RECVTRANS_gc;
TWIF.MASTER.DATA = reg;
while( !(TWIF.MASTER.STATUS & TWI_MASTER_WIF_bm)); // wait
TWIF.MASTER.ADDR = (AD7745_ADDR << 1) | 1; // read
while( !(TWIF.MASTER.STATUS & TWI_MASTER_RIF_bm)); // wait read
*pdata = TWIF.MASTER.DATA;
TWIF.MASTER.CTRLC = TWI_MASTER_ACKACT_bm | TWI_MASTER_CMD_STOP_gc;
return true;
fail:
TWIF.MASTER.CTRLC = TWI_MASTER_CMD_STOP_gc;
return false;
}
-
- думаю большого смысла в этом нет и вот почему: Adept(627 знак., 15.03.2017 19:51)