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

|
Здравствуйте. Скажите, можно ли управлять подачей фреймов на выводе TF? импульсы формируются на выводе, сразу после конфигурации ssc. Если я настраиваю старт работы передатчика по перепаду фрейма (AT91C_SSC_START_RISE_TF| AT91C_SSC_CKO_DATA_TX в регистре TCMR), то передатчик работает постоянно, даже если в буфере и нет данных, отправляя default значение. Я понимаю, что ssc в основном предназначен для работы с кодеками, но мне нужно организовать обмен между устройством и блоком управления для него следующим образом: Блок управления реагирует на нажатие кнопки и отсылает пакет данных, принимает ответ и "молчит" до следующего нажатия. Управляемое устройство принимает данные по положительному перепаду фрейма, фрейм должен быть длиной в один бит - устройство готовое, закрытое и изменению не подлежит. Можно ли формировать фрейм только, когда это нужно?
Сообщение отредактировал Daria - Jan 16 2010, 18:05
|
|
|
|
|
Jan 17 2010, 11:45
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(aaarrr @ Jan 17 2010, 13:10)  А нужен ли SSC в данном случае? Событие происходит редко, данных, как я понимаю, немного - так не проще ли руками передать/принять? Да я бы с удовольствием передавала бы просто по spi, но все дело в том, как формировать этот фрейм длиной в один бит, по которому устройство будет принимать и передавать данные. Я думала - можно ли как-то использовать для этого вывод NCS0?
|
|
|
|
|
Jan 17 2010, 15:00
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(aaarrr @ Jan 17 2010, 15:09)  Да я вообще имел в виду "ногодрыганье" - не подходит? А как мне так точно синхронизовать "ногодрыганье" с аппаратными тактами? Фрейм длиной один такт, задержка между фронтом фрейма и фронтом синхроимпульса - полтакта aaarrr, так все-таки - можно или нельзя управлять фреймами?  Может, я просто не понимаю, как
Сообщение отредактировал Daria - Jan 17 2010, 15:01
|
|
|
|
|
Jan 17 2010, 19:12
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Daria @ Jan 17 2010, 18:00)  А как мне так точно синхронизовать "ногодрыганье" с аппаратными тактами? Фрейм длиной один такт, задержка между фронтом фрейма и фронтом синхроимпульса - полтакта Если контроллер у вас работает в режиме слейва, но при этом должен выдавать наружу FS, то это будет затруднительно. Если мастер - то какие проблемы? Цитата(Daria @ Jan 17 2010, 18:00)  aaarrr, так все-таки - можно или нельзя управлять фреймами?  Может, я просто не понимаю, как  Настолько гибко нельзя - все таки это вывод данных привязан к FS, а не наоборот. Вообще, опишите подробнее интерфейс (сигналы, скорость, количество передаваемых данных и т.п.) - может, что-нибудь и придумаем.
|
|
|
|
|
Jan 17 2010, 21:07
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(aaarrr @ Jan 17 2010, 22:12)  Вообще, опишите подробнее интерфейс (сигналы, скорость, количество передаваемых данных и т.п.) - может, что-нибудь и придумаем. пакет данных - 32 слова по 16 бит, устройство принимает данные по положительному перепаду фрейма ( фрейм длиной один бит), данные фиксируются по отрицательному перепаду синхроимпульса, скорость 12МГц. устройство управления - мастер, принимающее - слейв, принимает и отправляет данные по фреймам и тактам мастера. Вроде все
|
|
|
|
|
Jan 18 2010, 19:54
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(aaarrr @ Jan 18 2010, 00:38)  Т.е. передается 32 шестнадцатибитных слова, каждое из которых снабжено FS длиной в один бит, правильно? Нет, FS в начале пакета из 32 шестнадцатибитных слов, т.е. FS подается через каждые 512 бит  Да, забыла добавить, MCK у меня 48МГц
|
|
|
|
|
Jan 18 2010, 20:03
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Daria @ Jan 18 2010, 22:54)  Нет, FS в начале пакета из 32 шестнадцатибитных слов, т.е. FS подается через каждые 512 бит  Тогда все совсем плохо. Нет, можно, конечно, извратиться: - запустить первое слово с FS - немедленно запретить и перепрограммировать передатчик - передать оставшиеся 7 слов - немедленно после загрузки последнего запретить передатчик Вот только я одного не понимаю: контроллер в режиме мастер, данных кот наплакал - 512 бит "по нажатию кнопки" - зачем аппаратная передача? Или прямо так строго 12МГц нужно выдержать (хотя это странно для синхронного приемника)? Или, возможно, слейву нужны эти клоки постоянно между передачами?
|
|
|
|
|
Jan 18 2010, 20:42
|
Местный
  
Группа: Участник
Сообщений: 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МГц тоже надо  Ну и потом, устройство готовое, уже теперь не прикапаешься -" почему". надо и точка
|
|
|
|
|
Jan 19 2010, 20:28
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Daria @ Jan 19 2010, 23:07)  А, кстати, не объяcните, чем он от ssc отличается? когда проектировали плату, думали, что это примерно одно и то же, и влепили SAM с ssc  Степенью навороченности. Кстати, наврал я вам вчера: вполне можно генерировать 1 FS на 16 слов средствами SSC (стыдно, ведь сам же этим и пользуюсь). Только произвольно начинать останавливать передачу очень проблематично. Протокол общения со слейвом не допускает постоянного обмена? Могу предложить такой вариант с использованием PDC: 1. Формируем пакет из 16 слов на передачу 2. Конфигурируем PDC для передачи, включаем передатчик 3. По прерыванию ENDTX выключаем передатчик Тут главное не пролететь с реакцией на прерывание в п.3, иначе будет сформирован новый FS. На все про все 128 тактов процессора, если задействовать FIQ, то можно уложится.
|
|
|
|
|
Feb 18 2010, 20:21
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Здравствуйте. Есть аудио-кодек PCM3794. Управляется по I2C или SPI. Обмен данными - по I2S. У меня в процессоре(AT91SAM7x)нет I2S и никогда им не пользовалась  Посмотрела в даташите описание протокола, решила, что можно передавать по SPI. В режиме slave, фреймы кодека(LRCK) заведены на NPCS0 SPI. Пишу данные только в один канал, когда LRCK в низком уровне. В качестве теста передаю отсчеты синуса угла(через 10 градусов), старший байт, потом младший. на выходе кодека - непонятный шум Подскажите, можно ли использовать вместо I2S SPI? Может, кто-нибудь кинет ссылку, где про этот протокол почитать? Может, нужен какой-то особый формат данных? Очень жду ответа
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|