|
I2S LPC1758 разделение левого и правого каналов |
|
|
|
May 17 2014, 17:19
|
Местный
  
Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135

|
Здравствуйте! Я использую модуль I2S МК для получения данных с АЦП PCM4202. МК выступает мастером, он вырабатывает как сигналы выбора правого/левого канала, так и тактовый сигнал для обмена по линии I2S. Эти все сигналы генерируются в блоке передатчика модуля I2S (у меня настроены режимы, описанные на рис. 101 и 109 мануала. Получаю данные по прерывании от I2S модуля, настроив его на генерацию прерываний при заполнении RX FIFO на всю его глубину (8 семплов). При этом почти всегда в FIFO данные сохранены в следующем порядке: Код лев-прав-лев-прав-лев-прав-лев-прав но иногда бывает так: Код прав-лев-прав-лев-прав-лев-прав-лев Подскажите, как мне настроить систему для однозначного определения, где правый, а где левый каналы?
|
|
|
|
|
 |
Ответов
(1 - 7)
|
May 18 2014, 08:06
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 27-08-04
Пользователь №: 551

|
QUOTE (kt368 @ May 17 2014, 20:19)  Подскажите, как мне настроить систему для однозначного определения, где правый, а где левый каналы? Наиболее вероятная причина - несинхронная работа с фифо. Т.е. нечетное кол-во лишних и/или недостающих чтений фифо. Что такое "настроить систему для однозначного определения" я не понял. Если есть бага с чтением фифо, её нужно фиксить и все. Как это делать вам никто не подскажет. Никто не видел ваших исходников и никто не знает задушевные тонкости организации I2S модуля. Простейший совет - перейти на 16 бит режим. Вряд ли в мире много людей, способных различить разницу 16 - 19 бит.
|
|
|
|
|
May 25 2014, 22:42
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(kt368 @ May 18 2014, 03:29)  Получаю данные по прерывании от I2S модуля, настроив его на генерацию прерываний при заполнении RX FIFO на всю его глубину (8 семплов). А Вы уверены, что Ваш ISR успевает считать FIFO до прихода след. слова? Если Вы настроили срабатывание при полном заполнении FIFO, то у Вас времени всего - одно слово. Совет - сделайте срабатывание прерывания на половине FIFO. Ну и конечно - по уму в программе должен быть контроль переполнения. Это как-бы по дефолту должно предусматриваться в корректно написанном ПО.
|
|
|
|
|
May 31 2014, 11:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(kt368 @ May 30 2014, 21:51) 1259440[/url]'] Ха! Проблема заключалась, как и в соседней теме с подключённым отладчиком J-Link. При многократном перезапуске передёргиванием питания самой платы (без подключения к ней отладчика), показания PCM4202, передаваыемые в ПК по UART всегда одинаковы, сдвиг ровно такой, как должен быть в теории: АЦП отсылает данные в формате Phillips I2S (24 бит), входной буфер I2S модуля LPC1758 - 32 бит, итого 32-24-1(из-за спецификации формата I2S) = 7 младших бит всегда нули. Просто сдвигаю на 7 бит вправо и получаю реальные значения, измеренные АЦП. Странно, вообще, у меня с подключенным клоном JLink'а все нормально.
|
|
|
|
|
Jun 1 2014, 06:25
|
Местный
  
Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135

|
Цитата(jcxz @ May 31 2014, 13:28)  А разве I2S не умеет работать через DMA? Ни разу не использовал I2S на LPC... Если может - оптимальнее настраивать DMA так, чтобы он сразу в этот самый буфер и принимал, без всяких копирований. В I2S модуле есть DMA, но я с ним ещё не работал. Поэтом мне показалось проще через прерывания.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|