Чт фев 08, 2018 20:49:27
- это из main.c , данные набиты от балды
int confclc[] = {0x04,0x12,0x06};
_write_m(DS3231,B_W,0x0E,2,confclc);
- это из хедера
void _write_m (int slaveAddr, int wrFLAG, uint8_t addPACK, int num_pack, int *wPACK)
{
int g=0;
//-------- START
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while(!(TWCR & (1<<TWINT))); // ожидания освобождения шины
if((TWSR & 0xF8) != TW_START);
//------- SEND ADDRESS
uint8_t sendaddr = slaveAddr +wrFLAG ;
TWDR = sendaddr;
TWCR =(1<<TWINT|1<<TWEN);
while(!(TWCR & (1<<TWINT)));
// if ((TWSR & 0xF8) != TW_MT_SLA_ACK);
//------- SEND ADDRESS BYTE
TWDR = addPACK;
TWCR =(1<<TWINT|1<<TWEN);
while(!(TWCR & (1<<TWINT)));
TWDR = wPACK;
TWCR =(1<<TWINT|1<<TWEN);
while(!(TWCR & (1<<TWINT)));
switch (wrFLAG) //
//------- WRITE/READ
{
case 0b00000000 : // запись в устройство
for (g=0;g<num_pack;g++) //0 < 1 -- цикл идет
{
TWDR= wPACK[g];
TWCR =(1<<TWINT|1<<TWEN);
while(!(TWCR & (1<<TWINT)));
if ((TWSR & 0xF8) != TW_MT_DATA_ACK);
}
break;
case 0b00000001 :
while (g<num_pack) // нет ничего пока, да и сфинкс с ним
break;
}
//------ STOP
TWCR =(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
Чт фев 08, 2018 21:33:23
Этот регистр двойной. В него кладутся данные для отправки и из него читаются полученные данные. Не знаю как с I2С, но с SPI (там тоже двойной регистр) Протеус в отладке значение регистра данных адекватно не отображает, хотя сама программа работает правильно.Catdawr писал(а):Когда в цикле впрягаются в TWDR, по очереди, данные из массива- по дебагеру I2C в протеусе, вижу на месте первого отправленного байта непонятное число,
Чт фев 08, 2018 23:26:18
TWDR = wPACK;
switch (wrFLAG) //
//------- WRITE/READ
{
case 0b00000000 : // запись в устройство
...
break;
case 0b00000001 :
...
break;
}
if (wrFLAG) {
...
} else {
...
}
if ((TWSR & 0xF8) != TW_MT_DATA_ACK);
Пт фев 09, 2018 07:44:47
Пт фев 09, 2018 20:03:17
TWDR = wPACK;
TWCR =(1<<TWINT|1<<TWEN);
while(!(TWCR & (1<<TWINT)));