|
I2S, кодек, помогите разобраться с интерфейсом |
|
|
|
Feb 20 2010, 14:29
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(aaarrr @ Feb 18 2010, 23:42)  Для работы с I2S нужно было задействовать SSC. Почитайте вот этот документ, все должно стать понятно. А писать-читать только в один канал нельзя? если на выход потом подается дифферинциальный моносигнал. К сожалению, SSC уже занят у меня...
Сообщение отредактировал Daria - Feb 20 2010, 14:58
|
|
|
|
|
Feb 20 2010, 19:08
|
Частый гость
 
Группа: Свой
Сообщений: 119
Регистрация: 16-07-07
Из: Тула
Пользователь №: 29 160

|
Цитата на можно ли использовать вместо I2S SPI я когда-то так и делал на lpc2294. а в прерывании шевелил нужной ногой. только наименование кодека не помню, с ними аккуратнее надо, а то там есть два стандарта: нормальный и японский (  ну так он в доке на один проц звался - "japanese"). Вроде японский и есть Цитата только вот LRCK в I2S уходит вниз на один клок раньше начала передачи , как в предыдущем посте написано. В общем, совет: внимательно посмотрите на времянки из даташита
|
|
|
|
|
Feb 21 2010, 14:37
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Кодек PCM3794 Там вроде есть четыре режима: I2S, Лево-выровненный, право-выровненный(вроде так) и DSP. DSP однозначно не подходит, там LRCK длительностью в один бит только. А вот эти лево-... вроде бы по даташиту соотвествуют SPI, там данные начинают передаваться одновременно с появлением высокого уровня на LRCK. Инвертирую этот вывод с помощью внешней логики и вроде должен был получиться SPI, как и у меня в проце. Только если игнорировать второй канал. Но на выходе синусоида какая-то рваная. и частота подаваемого сигнала явно не соотвествует частоте выходного. Пытаюсь сделать "петлю" - кодек принемает от внешнего источника синусоиду, передает процу с DOUT, а проц отсылает ему обратно на DIN, в итоге на выходах наушников HPOL/HPOR должна получиться такая же синусоида. но проблема, как сделать такую петлю по SPI в режиме slave А вообще кодек дельта-сигма - это что такое?  Может это японский как раз и есть?  Вообще какие бывают стандарты?
Сообщение отредактировал Daria - Feb 21 2010, 14:40
|
|
|
|
|
Feb 26 2010, 19:43
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(aaarrr @ Feb 18 2010, 23:42)  Для работы с I2S нужно было задействовать SSC. Почитайте вот этот документ, все должно стать понятно. аааrrr, большое спасибо! После долгих мучений с SPI все-таки переделала на SSC, как здесь сказано, и все получилось! Только вопрос - почему, если надо читать два канала, используют второй млдуль SSC(у меня второго нет  )? RF и RK берут с TF и TK - почему нельзя так же завести их в одном модуле? и читать не по положительному фронту фрейма, а по перепаду? Пробовала, получилась фигня. Но не понятно почему  но все равно, главное работает
|
|
|
|
|
Feb 26 2010, 22:53
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Daria @ Feb 26 2010, 22:43)  Только вопрос - почему, если надо читать два канала, используют второй млдуль SSC(у меня второго нет  )? RF и RK берут с TF и TK - почему нельзя так же завести их в одном модуле? и читать не по положительному фронту фрейма, а по перепаду? Пробовала, получилась фигня. Но не понятно почему  Вообще, ноги у этого ограничения растут из ерраты на RM9200 (а пример написан именно для него): Цитата The SSC receiver does not support reception of the last data sequence of a frame that overlaps a new start of frame, regardless of the mode of detection of the start condition. For example, this prevents reception of the last data of a TDM bus. На SAM'ах этой ошибки нет, так что должен работать прием для двух каналов.
|
|
|
|
|
Mar 14 2010, 11:49
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Здравствуйте. Такая проблема - работают два модуля, SSC с кодеком и SPI0 с внешним устройством. Обмен данными должен идти асинхронно, на разной частоте. но непрерывно. обмениваюсь через pdc. Прерывания PDC по каналам SPI имеют более высокий приоритет, и мешают обмену с кодеком по SSC Можно ли как-то перенастроить приоретет прерываний, или запрещать прерывания по каналам SPI во время прерывания от SSC? кто что посоветует?  Еще вопрос - приходит прерывание по ENDTX, когда счетчик TCR достигает ноля. хочу прямо в прерывании, не останавливая pdc, переписать TPR и TCR. TPR переписывается, а TCR почему-то нет  Приходится сначала записать TXDIS в PTCR, потом переписать, а потом TXEND. но мне нежелательно останавливать обмен. и непонятно, почему нельзя записать новое значение TCR, не останавливая. вот такие дилетантские вопросы - может, кто поможет? очень жду!
|
|
|
|
|
Mar 14 2010, 19:38
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(aaarrr @ Mar 14 2010, 20:51)  Можно, конечно. Но лучше увеличить размер буферов и использовать двойную буферизацию - без нее PDC для непрерывных потоков мало приспособлен. В этом случае приоритет прерываний может быть вообще не важен. То есть писать адрес нового буфера данных и размер все время в TNPR и TNCR?
|
|
|
|
|
Mar 31 2010, 18:13
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Может, не по теме, но продолжение задачи  Кто-нибудь может скинуть алгоритм работы фильтра с конечной импульсной характеристикой? Короче просто свертку(быстрое преобразование Фурье)  Надо быстро сделать, а зачем изобретать велосипед? Буду очень благодарна!
Сообщение отредактировал Daria - Mar 31 2010, 18:34
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|