Habe gerade Probleme bei dem konfigurieren einer I2C Kommunikation zwischen XMEGA und einem Slave.
Um genau zu sein handelt es sich um einen "XMEGA256A3BU".
Sehe ich das richtig, dass ich hiermit den Kommunikationskanal "öffne" zwischen Kontroller und Slave?
CodeBox C
Danach wollte ich mit
CodeBox C
Ein Byte lesen und der Kontroller soll ein NACK senden, damit der Slave weiß er braucht keine weiteren Daten mehr zu schicken.
Was mache ich verkehrt?
Bei den 8´bittern habe ich bis jetzt immer mit
CodeBox C
Gearbeitet. Das wollte ich jetzt auf dem "xMega" nachbilden.
Um genau zu sein handelt es sich um einen "XMEGA256A3BU".
Sehe ich das richtig, dass ich hiermit den Kommunikationskanal "öffne" zwischen Kontroller und Slave?
CodeBox C
uint8_t twiStart( TWI_t *twi , uint8_t addr ) { /* * Slave Adresse senden */ twi->MASTER.ADDR = addr; /* * ACK oder NACK empfangen * ACK = 0 * NACK = 1 */ return ( ( twi->MASTER.STATUS & 1<<TWI_MASTER_RXACK_bp ) >> TWI_MASTER_RXACK_bp ); }
Danach wollte ich mit
CodeBox C
uint8_t twiReadNack( TWI_t *twi , uint8_t reg ) { /* * Adresse übertragen */ twi->MASTER.DATA = reg; /* * Warten bis Übertragung komplett ist */ while( ! ( twi->MASTER.STATUS & TWI_MASTER_WIF_bm ) ); /* * Warten bis ein Byte empfangen wurde */ while( ! ( twi->MASTER.STATUS & TWI_MASTER_RIF_bm ) ); return (twi->MASTER.DATA); }
Ein Byte lesen und der Kontroller soll ein NACK senden, damit der Slave weiß er braucht keine weiteren Daten mehr zu schicken.
Was mache ich verkehrt?
Bei den 8´bittern habe ich bis jetzt immer mit
CodeBox C
i2c_start() i2c_start_wait() i2c_rep_start() i2c_readAck() i2c_readNack() i2c_stop()
Gearbeitet. Das wollte ich jetzt auf dem "xMega" nachbilden.
Zuletzt bearbeitet: