Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:7
Форум » starterkit.ru » Embedded Linux
Интерфейс драйвера для синтезатора частоты
Lampus
Добавлено 17.10.2011 17:24
0
Сообщение: 1
Lampus
5

Пункты: 3552
Регистрация: 26.04.2011
Приветствую.
Появилась необходимость написать драйвер для программируемого синтезатора частоты TI CDCE913.
Подогнать его для использования Linux Clock Framework ( http://kernel.org/doc/htmldocs/kernel-api/clk.html ) не выходит, ибо для того чтобы посчитать коэффициенты для PLL нужно провести относительно сложные вычисления с логарифмами, степенями, подбором коэф-ов и прочей мутотой. Тащить в модуль все эти вычисления даже в fixed point исполнении мысль не самая светлая. В связи с этим вопрос: как лучше всего в таком случае организовать userspace-интерфейс драйвера?
Пока что я это делаю через sysfs.
То бишь, если надо задать, например, значение какого-либо из делителей, то в файл pdiv натурально пишется особым образом сформированное шестнадцатиричное число. Но данный подход уж слишком не прозрачен.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 17.10.2011 19:28 Сообщение: 2
sasamy
4.71

Пункты: 83542
Регистрация: 14.08.2009
Цитата

Появилась необходимость написать драйвер для программируемого синтезатора частоты TI CDCE913.
Подогнать его для использования Linux Clock Framework


Настраивать частоту в широких пределах нужно ? а то проще всего было бы таблицу задать для нужных частот статически.
Спуститься к концу Подняться к началу
Персональная информация
Lampus
Добавлено 17.10.2011 19:38 Сообщение: 3
Lampus
5

Пункты: 3552
Регистрация: 26.04.2011
Да, в широких диапазонах. От 100 до 200 МГц с шагом 0,5 МГц (пока что, потом может и точнее понадобится). Так что идею с таблицей пришлось сразу отбросить.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 17.10.2011 20:35 Редактировалось 17.10.2011 20:39 Сообщение: 4
sasamy
4.71

Пункты: 83542
Регистрация: 14.08.2009
Мельком посмотрел на даташит - помоему там все быстро считается на целочисленке, логарифмы по основанию 2 и умножения на степени двойки - сплошные сдвиги, кроме пары делений и умножений целочисленных.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 17.10.2011 21:00 Сообщение: 5
Pavel Ivanchenko
Admin
4.39

Пункты: 92788
Регистрация: 24.03.2009
Пол: Мужчина
Цитата
Да, в широких диапазонах. От 100 до 200 МГц с шагом 0,5 МГц (пока что, потом может и точнее понадобится). Так что идею с таблицей пришлось сразу отбросить.

Э-э ... 100*2=200 слов таблица ...
Спуститься к концу Подняться к началу
Персональная информация
Lampus
Добавлено 17.10.2011 21:09 Сообщение: 6
Lampus
5

Пункты: 3552
Регистрация: 26.04.2011
Ды проблема даже не совсем в этом, там же на все коэф-ы накладываются ограничения, все они должны лежать в определённых пределах. К тому же, получить одну частоту можно при разных коэф-ах, но с разной погрешностью, то бишь ещё нужно искать вариант коэф-ов при которых значение погрешности минимально. Но это в идеале, если плюнуть на погрешность и считать её незначительной, то можно получить значение коэф-ов относительно быстро. Может я уже туплю, завтра надо будет внимательно посмотреть на расчёты. Но в любом случае, прибор делается измерительный, чем точнее частота - тем лучше.
Спуститься к концу Подняться к началу
Персональная информация
Lampus
Добавлено 17.10.2011 21:24 Сообщение: 7
Lampus
5

Пункты: 3552
Регистрация: 26.04.2011
Цитата
Э-э ... 100*2=200 слов таблица ...

Я пока сам точно не знаю какая точность понадобится, шаг 0,5МГц был взят с потолка. Да у меня сейчас даже железки на руках нет =)
В любом случае это решение из разряда "прибить гвоздями", то есть ограничить возможности железки софтварно. Но как вариант вполне рассматривается, если уж совсем прижмёт.
Спуститься к концу Подняться к началу
Персональная информация
Lampus
Добавлено 19.10.2011 16:14 Редактировалось 19.10.2011 16:16 Сообщение: 8
Lampus
5

Пункты: 3552
Регистрация: 26.04.2011
Я знаю что здесь это вряд ли кому то интересно, но всё же...
Итак, я накидал простенькую программку, которая вычисляет значение коэффициентов по заданным N и M используя только целочисленную арифметику, а также проверяет значение полученных коэффициентов на попадание в допустимые диапазоны:
https://github.com/Lampus/cdce913/blob/master/calc_coeff.c
Прошу сильно не закидывать тухлыми помидорами, коли что не так.
Теперь остаётся решить каким образом подобрать коэф-ы N и M имея заданную Fvco в минимальное количество итераций, таким образом, чтобы полученные коэф-ы попадали в заданные диапазоны и погрешность была минимальной.
Даташит лежит тут: http://focus.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=SCAS849&track=no
Итак, входные данные:
Цитата

Fvco = Fin * (N / M);
Входная частота Fin = 27МГц;
Формулы для вычисления коэф-ов:
P = 4 - int(log2(N/M));
Если P окажется меньше нуля, то P = 0;
Q = int(N' / M);
R = N' - M*Q;
Где
N' = N * 2^P;
N >= M;
100 MHz <= Fvco <= 200 MHz;
16 <= Q <= 63;
0 <= P <= 7;
0<= R <= 51;

Из первой формулы ясно что N/M = Fvco/Fin. То есть нам известно соотношение между N и M, но одно и то же соотношение можно получить с разными коэф-ами N и M. Например, пусть N/M = 1,5, тогда возможны следующие варианты пар N и M: (3,2), (6,4), (12,8) и т.д. При некоторых значениях N и M полученные коэф-ы будут попадать в заданные диапазоны, а в некоторых нет. Я строил график зависимости погрешности от M - для валидных значений он имеет пилообразную форму. В общем, коли кому не лень - пните в нужном направлении =)
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux