реклама на сайте
подробности

 
 
> Нужна помощь с кодеком TLV320AIC12K, Вопросы по кодеку TLV320AIC12K
dj_miles
сообщение Feb 24 2014, 10:49
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 7-02-14
Пользователь №: 80 386



Здравствуйте! Помогите разобраться с данным кодеком!!! В частности не получается конфигурировать его. Кодеком управляет PIC-контроллер по I2C интерфейсу, а тактируется от внутреннего генератора PIC'а 16 мГц. Сам же кодек юзаю в slave - режиме. Проблема заключается в записи регистров. Чтение проходит на ура, если читать по одному регистру. Прочитать все регистры разом не получается. Алгоритм чтения и записи выполняю точно так как описано в даташите. Что не так? Может кто то имел дело с данным чудом!!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dj_miles
сообщение Feb 25 2014, 10:04
Сообщение #2





Группа: Новичок
Сообщений: 9
Регистрация: 7-02-14
Пользователь №: 80 386



Спасибо за поправки!!!

Даташит на 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;
}
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Россиянин
сообщение Jun 17 2017, 07:05
Сообщение #3





Группа: Новичок
Сообщений: 1
Регистрация: 17-06-17
Пользователь №: 97 704



Цитата(dj_miles @ Feb 25 2014, 11:04) *
Спасибо за поправки!!!

Даташит на 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;
}

В Протеусе нарисована схма? В в версии 8.0 TLV320 не нашёл.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016