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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Синхронизация 2-х SSP в LPC2366
Dopler
сообщение Oct 12 2008, 12:41
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Нужно получить некоторое подобие 2-х битного ЦАПа на частоте ~10МГц. Для этого есть идея использовать параллельно 2 SSP, т.е. выводить синхронно два битовых потока. Встает вопрос - как их синхронизировать. Сначала хотел сделать 1 SSP мастером, второй слейвом (с объединением клоков). В таком случае синхронизация получилась бы автоматически. Но оказалось, что
Цитата
In Slave mode, the SSP clock rate provided by the master must not exceed 1/12 of the
SSP peripheral clock


Может быть, есть еще какие-нибудь варианты? Желательно, конечно, обеспечить одновременность начала битовых потоков, но в крайнем случае можно рассмотреть варианты постоянного сдвига на целое число бит.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 12 2008, 12:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dopler @ Oct 12 2008, 14:41) *
Может быть, есть...

Конечно - использовать естественным образом I2S на удвоенной частоте добавив к нему примитивный дешифратор битового потока на два.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dopler
сообщение Oct 12 2008, 14:03
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(zltigo @ Oct 12 2008, 16:55) *
Конечно - использовать естественным образом I2S на удвоенной частоте добавив к нему примитивный дешифратор битового потока на два.


Дешифратор может и примитивный, но все равно громоздкий. Как минимум сдвиговый регистр+триггер.

Вот если бы SSP поддерживал бы слова 2 бита, то триггер бы не понадобился, хватило бы только сдвигового регистра и сигнала FS.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 12 2008, 14:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dopler @ Oct 12 2008, 16:03) *
Как минимум сдвиговый регистр+триггер.

Сдвиговый-то зачем? Пара D триггеров запоминающие каждый свой бит из потока и триггер делящий для них частоту. Можно одним корпусом, можно из "одногейтовых" набрать...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dopler
сообщение Oct 12 2008, 14:36
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(zltigo @ Oct 12 2008, 18:11) *
Сдвиговый-то зачем? Пара D триггеров запоминающие каждый свой бит из потока и триггер делящий для них частоту. Можно одним корпусом, можно из "одногейтовых" набрать...


И работать не будет, так как без линии задержки на выходе будем иметь две последовательности, сдвинутые на один период двойной частоты
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 12 2008, 15:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dopler @ Oct 12 2008, 16:36) *
И работать не будет...

Уж не знаю, что Вы там себе нарисовали, что такое str и почему оно идет на 1/4 частоте клоков, ибо:
- на I2S имеется чередующийся битовый поток, естественно, c частотой 1/2 клоков;
- имеется клок по rising edge которого поток семплируется;
- делим этот клок на два;
- получившимся клоком rising edge семплируем (записываем в первый триггер) нечетные биты для первого
выходного потока
- falling edge (rising c инверсного выхода тригера делящего частоту) семплируем четные биты во втором триггере для второго битового потока.
В результате получаем два битовых потока на половинной частоте исходного клока.
Единственно, что в результате получаем от I2S два потока максимум на 72MHz/4. Это соответствует озвученному ранее "~10MHz"?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dopler
сообщение Oct 12 2008, 15:54
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(zltigo @ Oct 12 2008, 19:25) *
Уж не знаю, что Вы там себе нарисовали, что такое str и почему оно идет на половинной частоте клоков, ибо:
- имеется чередующийся битовый поток, естественно, c частотой клоков;
- имеется клок по rising edge которого поток семплируется;
- делим этот клок на два;
- получившимся rising edge семплируем (записываем в первый триггер) биты для первого
выходного потока
- falling edge (rising c инверсного выхода тригера делящего частоту) семплируем биты во втором триггере для второго битового потока.


Это все понятно, но очевидно, что на выход отсчеты не могут попасть одновременно, (т.е. синхронно), так как попадают туда заведомо по противоположным фронтам одного клока, т.е. выходная последовательность будет сдвинута на пол бита или на период исходной частоты.

Цитата
В результате получаем два битовых потока на половинной частоте исходного клока.


Получать-то мы их получаем, но не синхронными! Более того сдвиг не равен одному биту, а равен половине, что тоже не годится.


Цитата(zltigo @ Oct 12 2008, 19:25) *
Уж не знаю, что Вы там себе нарисовали, что такое str и почему оно идет на 1/4 частоте клоков, ибо:
озвученному ранее "~10MHz"?


Не успеваю отвечать, как сообщение изменяется.
str - это и есть поток, 2 единицы, 2 нуля подряд
он и есть 1/2 а не одна 1/4 (clk2 = clk1*2)


На всякий случай прикладываю осцилограму, что надо получить:
Прикрепленное изображение


Т.е. сплошной поток на удвоенной частоте 11001100 синхронно преобразуется в два потока 1010 на одинарной частоте. На самом деле такое легко реализуется сдвиговым регистром и триггером.



А если я просто соседними командами запишу в буфер SSP0 и SSP1 (с настроенными DMA), насколько детерменированным/постоянным будет сдвиг между выходными потоками?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 12 2008, 16:01
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dopler @ Oct 12 2008, 17:49) *
Это все понятно

Это хорошо.
Цитата
т.е. выходная последовательность будет сдвинута на пол бита или на период исходной частоты.
Получать-то мы их получаем, но не синхронными! Более того сдвиг не равен одному биту, а равен половине, что тоже не годится.

Не знаю, что там у Вас дальше, но полученные потоки можно/нужно семплировать сложенным по ИЛИ прямой и поделенной тактовыми - фронт на 3/4 тактовой соответствует установившимся значениям по обеим каналам.
Цитата
А если я просто соседними командами запишу в буфер SSP0 и SSP1 (с настроенными DMA), насколько детерменированным/постоянным будет сдвиг между выходными потоками?

Полный произвол, тем более, что "две соседних" команды относятся к периферии висящей на меееедленной периферийной шине.
Цитата
str - это и есть поток...

Ну так рисуйте нормально - уменьшите длительность бита str с четырех до двух клеток, ибо написанное словами полностью не соответствует рисунку.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dopler
сообщение Oct 12 2008, 16:21
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(zltigo @ Oct 12 2008, 20:01) *
Не знаю, что там у Вас дальше, но полученные потоки можно/нужно семплировать сложенным по ИЛИ прямой и поделенной тактовыми - фронт на 3/4 тактовой соответствует установившимся значениям по обеим каналам.


Ладно, из удвоенного потока тем или иным способом два одиночных выделить можно.
Но может "как-нибудь так"?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 12 2008, 16:22
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dopler @ Oct 12 2008, 18:21) *
Но может "как-нибудь так"?

Неа....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dopler
сообщение Oct 12 2008, 16:27
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(zltigo @ Oct 12 2008, 20:01) *
Ну так рисуйте нормально - уменьшите длительность бита str с четырех до двух клеток, ибо написанное словами полностью не соответствует рисунку.



как же я до двух уменьшу, когда там 2 единицы подряд идут
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 12 2008, 16:33
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dopler @ Oct 12 2008, 18:27) *
как же я до двух уменьшу, когда там 2 единицы подряд идут

То, что там идет подряд или не подряд, это дело десятое - рисуются БИТЫ, а не их значение. Длительность бита в I2C один период CLK а не два.
Если у Вас почему-то ВСЕГДА идут биты по одинаковым парам, то я вообще перестал понимать что мы тут вообще обсуждаем, ибо это прото два совершенно одинаковых потока....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dopler
сообщение Oct 12 2008, 16:47
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(zltigo @ Oct 12 2008, 20:33) *
То, что там идет подряд или не подряд, это дело десятое - рисуются БИТЫ, а не их значение. Длительность бита в I2C один период CLK а не два.
Если у Вас почему-то ВСЕГДА идут биты по одинаковым парам, то я вообще перестал понимать что мы тут вообще обсуждаем, ибо это прото два совершенно одинаковых потока....


К сожалению, квартус стирает границу между двумя битами, если они имееют одинаковое значение.
Вот, поправил в паинте.


Прикрепленное изображение
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 12 2008, 16:54
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dopler @ Oct 12 2008, 18:47) *
Вот, поправил в паинте.

Теперь осталось 0 и 1 расставить правильно в соответствии с КАНАЛАМИ а не значениями битов и задание готово smile.gif
Цитата
квартус

Если у Вас CPLD/FPGA подключается, то тогда вообще проблем '0' smile.gif. Делайте двойную скорость и не морочте голову!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dopler
сообщение Oct 12 2008, 17:06
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Цитата(zltigo @ Oct 12 2008, 20:54) *
Теперь осталось 0 и 1 расставить правильно в соответствии с КАНАЛАМИ а не значениями битов и задание готово smile.gif


так оно так и расставлено 1100 в двойной последовательности соответсвует 10 в первом канале и 10 во втором, но уже на пониженной частоте


Цитата
Если у Вас CPLD/FPGA подключается, то тогда вообще проблем '0' smile.gif. Делайте двойную скорость и не морочте голову!


Как раз всеми силами стараюсь CPLD не подключить (всмысле обойтись).


Ладно, этот вариант я понял.

Может быть есть какие-то шансы воспользоваться контроллером SD/MMC и его 4-х битной шиной?
А это у всех LPC ограничение максимального клока в pclk/12 для режима slave?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 07:24
Рейтинг@Mail.ru


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