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

 
 
> I2S, кодек, помогите разобраться с интерфейсом
Daria
сообщение Jan 16 2010, 18:05
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Здравствуйте. Скажите, можно ли управлять подачей фреймов на выводе TF?
импульсы формируются на выводе, сразу после конфигурации ssc. Если я настраиваю старт работы передатчика по перепаду фрейма (AT91C_SSC_START_RISE_TF| AT91C_SSC_CKO_DATA_TX в регистре TCMR), то передатчик работает постоянно, даже если в буфере и нет данных, отправляя default значение.
Я понимаю, что ssc в основном предназначен для работы с кодеками, но мне нужно организовать обмен между устройством и блоком управления для него следующим образом:
Блок управления реагирует на нажатие кнопки и отсылает пакет данных, принимает ответ и "молчит" до следующего нажатия. Управляемое устройство принимает данные по положительному перепаду фрейма, фрейм должен быть длиной в один бит - устройство готовое, закрытое и изменению не подлежит.
Можно ли формировать фрейм только, когда это нужно? rolleyes.gif

Сообщение отредактировал Daria - Jan 16 2010, 18:05
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 29)
aaarrr
сообщение Jan 17 2010, 10:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А нужен ли SSC в данном случае? Событие происходит редко, данных, как я понимаю, немного - так не проще ли руками передать/принять?
Go to the top of the page
 
+Quote Post
Daria
сообщение Jan 17 2010, 11:45
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(aaarrr @ Jan 17 2010, 13:10) *
А нужен ли SSC в данном случае? Событие происходит редко, данных, как я понимаю, немного - так не проще ли руками передать/принять?

Да я бы с удовольствием передавала бы просто по spi, но все дело в том, как формировать этот фрейм длиной в один бит, по которому устройство будет принимать и передавать данные.
Я думала - можно ли как-то использовать для этого вывод NCS0?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 17 2010, 12:09
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Да я вообще имел в виду "ногодрыганье" - не подходит?
Go to the top of the page
 
+Quote Post
Daria
сообщение Jan 17 2010, 15:00
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(aaarrr @ Jan 17 2010, 15:09) *
Да я вообще имел в виду "ногодрыганье" - не подходит?

А как мне так точно синхронизовать "ногодрыганье" с аппаратными тактами? Фрейм длиной один такт, задержка между фронтом фрейма и фронтом синхроимпульса - полтакта

aaarrr, так все-таки - можно или нельзя управлять фреймами? smile.gif Может, я просто не понимаю, как sad.gif

Сообщение отредактировал Daria - Jan 17 2010, 15:01
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 17 2010, 19:12
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Daria @ Jan 17 2010, 18:00) *
А как мне так точно синхронизовать "ногодрыганье" с аппаратными тактами? Фрейм длиной один такт, задержка между фронтом фрейма и фронтом синхроимпульса - полтакта

Если контроллер у вас работает в режиме слейва, но при этом должен выдавать наружу FS, то это будет затруднительно. Если мастер - то какие проблемы?

Цитата(Daria @ Jan 17 2010, 18:00) *
aaarrr, так все-таки - можно или нельзя управлять фреймами? smile.gif Может, я просто не понимаю, как sad.gif

Настолько гибко нельзя - все таки это вывод данных привязан к FS, а не наоборот.

Вообще, опишите подробнее интерфейс (сигналы, скорость, количество передаваемых данных и т.п.) - может, что-нибудь и придумаем.
Go to the top of the page
 
+Quote Post
Daria
сообщение Jan 17 2010, 21:07
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(aaarrr @ Jan 17 2010, 22:12) *
Вообще, опишите подробнее интерфейс (сигналы, скорость, количество передаваемых данных и т.п.) - может, что-нибудь и придумаем.

пакет данных - 32 слова по 16 бит, устройство принимает данные по положительному перепаду фрейма ( фрейм длиной один бит), данные фиксируются по отрицательному перепаду синхроимпульса, скорость 12МГц. устройство управления - мастер, принимающее - слейв, принимает и отправляет данные по фреймам и тактам мастера. Вроде все laughing.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 17 2010, 21:38
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Т.е. передается 32 шестнадцатибитных слова, каждое из которых снабжено FS длиной в один бит, правильно?
Go to the top of the page
 
+Quote Post
Daria
сообщение Jan 18 2010, 19:54
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(aaarrr @ Jan 18 2010, 00:38) *
Т.е. передается 32 шестнадцатибитных слова, каждое из которых снабжено FS длиной в один бит, правильно?

Нет, FS в начале пакета из 32 шестнадцатибитных слов, т.е. FS подается через каждые 512 битrolleyes.gif
Да, забыла добавить, MCK у меня 48МГц
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 18 2010, 20:03
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Daria @ Jan 18 2010, 22:54) *
Нет, FS в начале пакета из 32 шестнадцатибитных слов, т.е. FS подается через каждые 512 битrolleyes.gif

Тогда все совсем плохо.

Нет, можно, конечно, извратиться:
- запустить первое слово с FS
- немедленно запретить и перепрограммировать передатчик
- передать оставшиеся 7 слов
- немедленно после загрузки последнего запретить передатчик

Вот только я одного не понимаю: контроллер в режиме мастер, данных кот наплакал - 512 бит "по нажатию кнопки" - зачем аппаратная передача?
Или прямо так строго 12МГц нужно выдержать (хотя это странно для синхронного приемника)? Или, возможно, слейву нужны эти клоки постоянно между передачами?
Go to the top of the page
 
+Quote Post
Daria
сообщение Jan 18 2010, 20:42
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(aaarrr @ Jan 18 2010, 23:03) *
Тогда все совсем плохо.

Нет, можно, конечно, извратиться:
- запустить первое слово с FS
- немедленно запретить и перепрограммировать передатчик
- передать оставшиеся 7 слов
- немедленно после загрузки последнего запретить передатчик

Ох. а spi нельзя использовать? и фрейм как-то с помощью NPCS делать?
Цитата(aaarrr @ Jan 18 2010, 23:03) *
Вот только я одного не понимаю: контроллер в режиме мастер, данных кот наплакал - 512 бит "по нажатию кнопки" - зачем аппаратная передача?
Или прямо так строго 12МГц нужно выдержать (хотя это странно для синхронного приемника)? Или, возможно, слейву нужны эти клоки постоянно между передачами?

Последнее. после определенной команды он должен начать отсылать данные пакетами по 512 бит постоянно, т.е. ему нужны будут постоянные клоки и фреймы через каждые 512 бит. и 12МГц тоже надоsmile.gif Ну и потом, устройство готовое, уже теперь не прикапаешься -" почему". надо и точка laughing.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 18 2010, 20:58
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Daria @ Jan 18 2010, 23:42) *
Ох. а spi нельзя использовать? и фрейм как-то с помощью NPCS делать?

У SPI с постоянством клока будут проблемы при подъеме CS. В приведенном выше извратном алгоритме для SSC - тоже.

Цитата(Daria @ Jan 18 2010, 23:42) *
Последнее. после определенной команды он должен начать отсылать данные пакетами по 512 бит постоянно, т.е. ему нужны будут постоянные клоки и фреймы через каждые 512 бит. и 12МГц тоже надоsmile.gif Ну и потом, устройство готовое, уже теперь не прикапаешься -" почему". надо и точка laughing.gif

Разве что какую-нибудь внешнюю логику прикрутить для вырезания 7/8 FS (вполне дешевый и сердитый вариант). Или заменить SAM на что-нибудь с McBSP wink.gif
Go to the top of the page
 
+Quote Post
Daria
сообщение Jan 19 2010, 20:07
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(aaarrr @ Jan 18 2010, 23:58) *
Или заменить SAM на что-нибудь с McBSP wink.gif

Там как раз в устройстве TMS стоит с McBSP biggrin.gif
А, кстати, не объяcните, чем он от ssc отличается? когда проектировали плату, думали, что это примерно одно и то же, и влепили SAM с ssc laughing.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 19 2010, 20:28
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Daria @ Jan 19 2010, 23:07) *
А, кстати, не объяcните, чем он от ssc отличается? когда проектировали плату, думали, что это примерно одно и то же, и влепили SAM с ssc laughing.gif

Степенью навороченности.

Кстати, наврал я вам вчера: вполне можно генерировать 1 FS на 16 слов средствами SSC (стыдно, ведь сам же этим и пользуюсь).
Только произвольно начинать останавливать передачу очень проблематично. Протокол общения со слейвом не допускает постоянного обмена?

Могу предложить такой вариант с использованием PDC:
1. Формируем пакет из 16 слов на передачу
2. Конфигурируем PDC для передачи, включаем передатчик
3. По прерыванию ENDTX выключаем передатчик
Тут главное не пролететь с реакцией на прерывание в п.3, иначе будет сформирован новый FS. На все про все 128 тактов процессора, если задействовать FIQ, то можно уложится.
Go to the top of the page
 
+Quote Post
Daria
сообщение Feb 18 2010, 20:21
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Здравствуйте. Есть аудио-кодек PCM3794. Управляется по I2C или SPI. Обмен данными - по I2S.
У меня в процессоре(AT91SAM7x)нет I2S и никогда им не пользовалась rolleyes.gif Посмотрела в даташите описание протокола, решила, что можно передавать по SPI. В режиме slave, фреймы кодека(LRCK) заведены на NPCS0 SPI. Пишу данные только в один канал, когда LRCK в низком уровне.
В качестве теста передаю отсчеты синуса угла(через 10 градусов), старший байт, потом младший. на выходе кодека - непонятный шум laughing.gif
Подскажите, можно ли использовать вместо I2S SPI? Может, кто-нибудь кинет ссылку, где про этот протокол почитать? unsure.gif
Может, нужен какой-то особый формат данных?
Очень жду ответа
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 18 2010, 20:42
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Daria @ Feb 18 2010, 23:21) *
Подскажите, можно ли использовать вместо I2S SPI? Может, кто-нибудь кинет ссылку, где про этот протокол почитать? unsure.gif

Для работы с I2S нужно было задействовать SSC. Почитайте вот этот документ, все должно стать понятно.
Go to the top of the page
 
+Quote Post
Daria
сообщение Feb 20 2010, 14:29
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(aaarrr @ Feb 18 2010, 23:42) *
Для работы с I2S нужно было задействовать SSC. Почитайте вот этот документ, все должно стать понятно.

А писать-читать только в один канал нельзя? если на выход потом подается дифферинциальный моносигнал.
К сожалению, SSC уже занят у меня...sad.gif

Сообщение отредактировал Daria - Feb 20 2010, 14:58
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 20 2010, 18:19
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Daria @ Feb 20 2010, 17:29) *
А писать-читать только в один канал нельзя? если на выход потом подается дифферинциальный моносигнал.

Можно попробовать извратиться с использованием одного левого канала, только вот LRCK в I2S уходит вниз на один клок раньше начала передачи. А какой кодек используется?
Go to the top of the page
 
+Quote Post
rsv
сообщение Feb 20 2010, 19:08
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 16-07-07
Из: Тула
Пользователь №: 29 160



Цитата
на можно ли использовать вместо I2S SPI
я когда-то так и делал на lpc2294. а в прерывании шевелил нужной ногой. только наименование кодека не помню, с ними аккуратнее надо, а то там есть два стандарта: нормальный и японский ( smile.gif ну так он в доке на один проц звался - "japanese"). Вроде японский и есть
Цитата
только вот LRCK в I2S уходит вниз на один клок раньше начала передачи
, как в предыдущем посте написано. В общем, совет: внимательно посмотрите на времянки из даташита
Go to the top of the page
 
+Quote Post
Daria
сообщение Feb 21 2010, 14:37
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Кодек PCM3794
Там вроде есть четыре режима: I2S, Лево-выровненный, право-выровненный(вроде так) и DSP. DSP однозначно не подходит, там LRCK длительностью в один бит только. А вот эти лево-... вроде бы по даташиту соотвествуют SPI, там данные начинают передаваться одновременно с появлением высокого уровня на LRCK. Инвертирую этот вывод с помощью внешней логики и вроде должен был получиться SPI, как и у меня в проце. Только если игнорировать второй канал. Но на выходе синусоида какая-то рваная. и частота подаваемого сигнала явно не соотвествует частоте выходного.
Пытаюсь сделать "петлю" - кодек принемает от внешнего источника синусоиду, передает процу с DOUT, а проц отсылает ему обратно на DIN, в итоге на выходах наушников HPOL/HPOR должна получиться такая же синусоида. но проблема, как сделать такую петлю по SPI в режиме slave
А вообще кодек дельта-сигма - это что такое?smile.gif Может это японский как раз и есть?smile.gif
Вообще какие бывают стандарты?

Сообщение отредактировал Daria - Feb 21 2010, 14:40
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 21 2010, 23:06
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Daria @ Feb 21 2010, 17:37) *
...Но на выходе синусоида какая-то рваная. и частота подаваемого сигнала явно не соотвествует частоте выходного.
Пытаюсь сделать "петлю"...

Не надо делать петлю. Попробуйте для начала выдавать просто биты на нужных позициях (0x8000, 0x0001 и т.п.), и проконтролируйте правильность выдаваемых данных осциллографом.
Go to the top of the page
 
+Quote Post
Daria
сообщение Feb 23 2010, 18:28
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



А что такое дельта-сигма модуляция? rolleyes.gif
В кодеке ЦАП и АЦП - дельта-сигма фильтры
Go to the top of the page
 
+Quote Post
Designer56
сообщение Feb 23 2010, 18:37
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 932
Регистрация: 13-10-06
Из: Уфа
Пользователь №: 21 290



Такой способ размена разрешения (разрядности) на время (скорость). Иллюстрация к принципу неопределенности.


--------------------
"...Дьяволу ведомо многое не потому, что он- Дьявол, а потому, что он стар..."
Go to the top of the page
 
+Quote Post
Daria
сообщение Feb 26 2010, 19:43
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(aaarrr @ Feb 18 2010, 23:42) *
Для работы с I2S нужно было задействовать SSC. Почитайте вот этот документ, все должно стать понятно.

аааrrr, большое спасибо! После долгих мучений с SPI все-таки переделала на SSC, как здесь сказано, и все получилось! 08.gif
Только вопрос - почему, если надо читать два канала, используют второй млдуль SSC(у меня второго нетsmile.gif)?
RF и RK берут с TF и TK - почему нельзя так же завести их в одном модуле? и читать не по положительному фронту фрейма, а по перепаду?
Пробовала, получилась фигня. Но не понятно почемуsad.gif
но все равно, главное работает 08.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 26 2010, 22:53
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Daria @ Feb 26 2010, 22:43) *
Только вопрос - почему, если надо читать два канала, используют второй млдуль SSC(у меня второго нетsmile.gif)?
RF и RK берут с TF и TK - почему нельзя так же завести их в одном модуле? и читать не по положительному фронту фрейма, а по перепаду?
Пробовала, получилась фигня. Но не понятно почемуsad.gif

Вообще, ноги у этого ограничения растут из ерраты на 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'ах этой ошибки нет, так что должен работать прием для двух каналов.
Go to the top of the page
 
+Quote Post
Daria
сообщение Mar 14 2010, 11:49
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Здравствуйте.
Такая проблема - работают два модуля, SSC с кодеком и SPI0 с внешним устройством.
Обмен данными должен идти асинхронно, на разной частоте. но непрерывно.
обмениваюсь через pdc. Прерывания PDC по каналам SPI имеют более высокий приоритет, и мешают обмену с кодеком по SSC unsure.gif
Можно ли как-то перенастроить приоретет прерываний, или запрещать прерывания по каналам SPI во время прерывания от SSC? кто что посоветует?smile.gif
Еще вопрос - приходит прерывание по ENDTX, когда счетчик TCR достигает ноля. хочу прямо в прерывании, не останавливая pdc, переписать TPR и TCR. TPR переписывается, а TCR почему-то нет unsure.gif Приходится сначала записать TXDIS в PTCR, потом переписать, а потом TXEND. но мне нежелательно останавливать обмен. и непонятно, почему нельзя записать новое значение TCR, не останавливая.
вот такие дилетантские вопросы - может, кто поможет? rolleyes.gif
очень жду! laughing.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 14 2010, 17:51
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Daria @ Mar 14 2010, 14:49) *
Можно ли как-то перенастроить приоретет прерываний, или запрещать прерывания по каналам SPI во время прерывания от SSC? кто что посоветует?smile.gif

Можно, конечно. Но лучше увеличить размер буферов и использовать двойную буферизацию - без нее PDC для непрерывных потоков мало приспособлен. В этом случае приоритет прерываний может быть вообще не важен.
Go to the top of the page
 
+Quote Post
Daria
сообщение Mar 14 2010, 19:38
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(aaarrr @ Mar 14 2010, 20:51) *
Можно, конечно. Но лучше увеличить размер буферов и использовать двойную буферизацию - без нее PDC для непрерывных потоков мало приспособлен. В этом случае приоритет прерываний может быть вообще не важен.

То есть писать адрес нового буфера данных и размер все время в TNPR и TNCR?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 14 2010, 19:47
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Да, именно так.
Go to the top of the page
 
+Quote Post
Daria
сообщение Mar 31 2010, 18:13
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Может, не по теме, но продолжение задачиsmile.gif
Кто-нибудь может скинуть алгоритм работы фильтра с конечной импульсной характеристикой?
Короче просто свертку(быстрое преобразование Фурье)smile.gif Надо быстро сделать, а зачем изобретать велосипед? rolleyes.gif
Буду очень благодарна!

Сообщение отредактировал Daria - Mar 31 2010, 18:34
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 15:41
Рейтинг@Mail.ru


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