Спасибо за поправки!!!
Даташит на TLV320AIC12K
TLV320AIK12, схема в файле.
Коды функций работы с I2C:
void IIC_STR() { I2C2CONbits.SEN = 1; while (I2C2CONbits.SEN); }
void IIC_RST() { I2C2CONbits.RSEN = 1; while (I2C2CONbits.RSEN); }
void IIC_STP() { I2C2CONbits.PEN = 1; while (I2C2CONbits.PEN);}
void IIC_WTX(unsigned char data){I2C2TRN = data; while (I2C2STATbits.TRSTAT == 1); while (I2C2STATbits.TBF == 1);}
unsigned char IIC_WRX() { I2C2CONbits.RCEN = 1; while (I2C2CONbits.RCEN);I2C2CONbits.ACKEN = 1; while (I2C2CONbits.ACKEN); I2C2STATbits.I2COV = 0; return I2C2RCV;}
void IIC_IDL(){ while(I2C2CONbits.SEN || I2C2CONbits.RSEN || I2C2CONbits.PEN || I2C2CONbits.RCEN || I2C2CONbits.ACKEN || I2C2STATbits.TRSTAT);}
void IIC_ACK() { I2C2CONbits.ACKEN = 1; while (I2C2CONbits.ACKEN);}
void I2C_Write(unsigned char add, unsigned char byte)
{
IIC_IDL();
IIC_STR();
IIC_WTX(0x80);
IIC_WTX(add);
IIC_STP();
IIC_IDL();
IIC_STR();
IIC_WTX(0x80);
if (I2C2STATbits.ACKSTAT);
IIC_WTX(add);
if (I2C2STATbits.ACKSTAT);
IIC_WTX(byte);
if (I2C2STATbits.ACKSTAT);
IIC_STP();
}
unsigned char I2C_Read(unsigned char add)
{
unsigned char r = 0;
IIC_IDL();
IIC_STR();
IIC_WTX(0x80);
IIC_WTX(add);
IIC_STP();
IIC_STR();
IIC_WTX(0x81);
r = IIC_WRX();
IIC_STP();
return r;
}
Забыл коменты написать!
Коды функций работы с I2C:
void IIC_STR() { I2C2CONbits.SEN = 1; while (I2C2CONbits.SEN); }
void IIC_RST() { I2C2CONbits.RSEN = 1; while (I2C2CONbits.RSEN); }
void IIC_STP() { I2C2CONbits.PEN = 1; while (I2C2CONbits.PEN);}
void IIC_WTX(unsigned char data){I2C2TRN = data; while (I2C2STATbits.TRSTAT == 1); while (I2C2STATbits.TBF == 1);}
unsigned char IIC_WRX() { I2C2CONbits.RCEN = 1; while (I2C2CONbits.RCEN);I2C2CONbits.ACKEN = 1; while (I2C2CONbits.ACKEN); I2C2STATbits.I2COV = 0; return I2C2RCV;}
void IIC_IDL(){ while(I2C2CONbits.SEN || I2C2CONbits.RSEN || I2C2CONbits.PEN || I2C2CONbits.RCEN || I2C2CONbits.ACKEN || I2C2STATbits.TRSTAT);}
void IIC_ACK() { I2C2CONbits.ACKEN = 1; while (I2C2CONbits.ACKEN);}
void I2C_Write(unsigned char add, unsigned char byte)
{
IIC_IDL(); //Ожидаем освобождения модуля I2C
IIC_STR(); // Последовательность старт-бита
IIC_WTX(0x80);//Адрес слейва с признаком записи
if (I2C2STATbits.ACKSTAT); //Проверка подтверждения
IIC_WTX(add); //Адрес регистра
if (I2C2STATbits.ACKSTAT);
IIC_WTX(byte); //Значение регистра
if (I2C2STATbits.ACKSTAT);
IIC_STP();//Стоп-бит
}
unsigned char I2C_Read(unsigned char add)
{
unsigned char r = 0;
//Запись индекса регистра
IIC_IDL(); //Ожидаем освобождения модуля I2C
IIC_STR();// Последовательность старт-бита
IIC_WTX(0x80);//Адрес слейва с признаком записи
IIC_WTX(add); //Адрес регистра
IIC_STP(); //Стоп-бит
IIC_STR(); //Старт-бит
IIC_WTX(0x81); //Адрес слейва с признаком чтения
r = IIC_WRX(); //Чтение
IIC_STP(); //Стоп-бит
return r;
}