Здравствуйте.
Пытаюсь подключить к плате SK-iMX53 v3.B АЦП. Для работы АЦП нужен тактовый сигнал 12 МГц. Для генерации меандра планировал использовать PWM. На основе примера работы с GPIO сделал программу. Но на выводе PWM1(на схеме платы разъем Х1) сигнала нет. Есть подозрение что вывод не настроен на работу с PWM. В каком файле с исходниками ядра это можно посмотреть?
Может быть есть другой способ сгенерировать меандр?
При работе с этим выводом как с GPIO на выходе есть сигнал.
ход ваших мыслей разумен и подозрения про пин правильные..
вариант в лоб - если всё делать из своей программы, то в даташите смотрите раздел с описанием работы с GPIO и что нужно записать в регистры для правильного инита..
потом, сначала делаете mmap для блока GPIO, интите нужный пин в режим MF PWM, далее mmap на блок работы с PWM и всё должно взлететь..
есть вариант с ядром - прописываете пин и нужные структуры в файле ядра, включаете поддержку через менюконфиг и после пересборки ядро само будет всё делать и пин пэвээмить..
еще есть вариант с фиксированной частотой - прописываете структуру для таймера (разумеется с инитом пинов) в файле борды и на выхлопе фиксированная частота..
После изучения документации на процессор возник вопрос. На схеме платы 3.В есть линии PWM1 и PWM2 (разъем Х1 и Х2), но в содержимом регистров IOMUX таких вариантов подключения выводов нет. Относятся ли названия выводов на схеме к модулям PWM процессора?
В каком файле в исходниках ядра можно посмотреть конфигурацию выводов процессора?
В программу добавил настройку IOMUX, но на нужном выводе эффекта не наблюдается:
*(int*)(mapped_base_iomuxc+IOMUXC_SW_MUX_CTL_PAD_GPIO9) = 4; // GPIO9 -> PWM
Может быть нужно еще какой то регистр настроить?
Можете подробнее рассказать про вариант с структурой для таймера.
не всегда и не везде - всегда надо проверять соответствие имени шарика(контакта) тому, что написано в даташите на конкретный процессор..
если кратко - сначала берется даташит от производителя (где уже могут быть ошибки), потом рисуется элемент в библиотеку (и тут могут быть ошибки),потом делается футпринт элемента и потом это попадает в финальную электросхему и монтаж..
по счастью, у Павла мне не припомнится ни одного бажного элемента - снимаю шляпу..
никогда не рисовали чип на 600 копыт? я на третий день после третьей верификации готов был всех разорвать..
/arch/arm/mach-mx5/mx53_loco.c
в старых исходниках нашел, как прикручивал управление яркостью и задействовал pwm (разъем {2, контакт 38)
в файле борды в структуре пинов прописано:
структура для подсветки
ну и в ините:
не-а, ибо не владею нужными знаниями..
имхо, если нужно 12МГц "здесь и сейчас", то я бы прислушался к совету Павла и через буфер взял нужную частоту..
всегда можно сгородить на рассыпухе или в монокорпусе генератор на 12МГц частоту..
кстати, для pwm надо почитать характеристики стабильности сигнала, иначе у АЦП может крышу снести от плавающей частоты..
К сожалению вариант с сигналом от кодека не подходит. В конечном устройстве возможно будет аудио, а тактовый сигнал АЦП может быть от 7 до 34 МГц в зависимости от требований.
Пробовал запускать АЦП от контроллера, тактовый сигнал генерировался внутренним модулем PWM, АЦП работало, частота была достаточно стабильна. С процессорами от Freescale пока не работал, но судя по описанию PWM должен генерировать достаточно стабильную частоту.
Клок судя по настройке вы берете с ipg_clk_highfreq
скорей всего в настройках выставлено в качестве источника как раз CKIH - посмотрел на своей плате V3.А (пин CKIH1) - генератор DA9 не запаян и частота у него штатная 22_5792 МГц. Попробуйте ipg_clk
*(int*)(mapped_base_pwm+PWM_PWMCR) = 0xFC10000;
но штатно вы даже с него не получите 34 МГц на PWM-е
ipg clock: 66 666 666 Hz
стандартно там надо 3 регистра проинициализировать на каждый пин, я как-то давно с этим разбирался, уже не помню - проще взять хидеры и код из майнстримного убута - там все достаточно компактно сделано.
ШИМ заработал. Нужно было настроить модуль тактового генератора.
Работают оба варианта: ipg_clk и ipg_clk_highfreq.
Настройку IOMUX сначала сделал в программе. Когда ШИМ заработал настроил ядро - в файле ядра(/arch/arm/mach-mx5/mx53_loco.c) дописал в массив определения пинов строку: MX53_PAD_GPIO_9__PWM1_PWM0. Пересобрал ядро и залил на плату, программа работает. Задействован выход 38 разъем Х2.
ну вот - результат положительный..
теперь в файле борды оформить в структурку с нужными параметрами, зарегать свой pwm и юзать через sysfs, не залезая в железо..