в мастере адрес слэйва определён как
#define TWI_LED_SLAVE_ADDRESS 0x05
и посылка отправляется как
TWI_SendDataToSlave(TWI_LED_SLAVE_ADDRESS,TWI_CMD_ MASTER_WRITE,InSlave,3);
А в слэйве адрес определён как
// Own TWI slave address
TWI_slaveAddress = 0x05;
USI_TWI_Slave_Initialise( TWI_slaveAddress );
------------------------------------
Так вот установлено (загорается светодиодик PORTA_Bit2=1
, что первый байт принимается нормально, так как программа доходит до той точки где она должна отправить АСК:
DDR_USI |= (1‹‹PORT_USI_SDA); // Set SDA as output
USISR = (0‹‹USISIF)|(1‹‹USIOIF)|(1‹‹USIPF)|(1‹‹USIDC)| // Clear all flags, except Start Cond
(0xE‹‹USICNT0); // Set USI to shift out 1 bit
while ( !(USISR & ( (1‹‹USISIF)|(1‹‹USIOIF) )) ); // Wait until ACK sent. (Pass if Start Cond.)
DDR_USI &= ~(1‹‹PORT_USI_SDA); // Set SDA as input
PORTA_Bit2=1; //Светодиодик
Но этого не происходит.
В чём косяк никак не пойму, не может же быть такого чтобы АППНОУТ был не правильным.
Кстати Мастер настроен на посылку одного сообщения при запуске. И он его нормально отправляет и другой контроллер (Mega
с чистым TWI Slave его нормально принимает. А вот с USI фигня какаято происходит.
У мастера подтяжка на +5В есть и у SDA, и у CLK.
У слейва нет, но она и не может повлиять при такой скорости.