2015-11-06 1 views
0

Мне нужно подсчитать переходы двоичного сигнала 50 кГц с использованием BBB. Я думаю, что использование TIMER4, вызванное внешним сигналом, подключенным к выходу P8.07, было бы самым простым способом.Как читать счетчик внешнего таймера на BeagleBone Black?

Итак, я выпустил следующие команды, чтобы загрузить соответствующую накидку и установку штифт в качестве таймера:

./config-pin overlay cape-universaln 
./config-pin P8.07 timer 

Все, кажется, работает и ничего не появляется в dmesg.

Мой вопрос:: Как я могу узнать значение TIMER4? Я посмотрел в SysFs и не нашел ничего интересного. Ничего в /dev. Как я могу получить значение счетчика таймера, который я только что установил? Я также открыт для решения C/C++, но я бы хотел избежать программирования ядра.

Я использую последнюю версию Ubuntu Linux для BeagleBone, kernel 4.1.10-ti-r21.

+0

https://e2e.ti.com/support/arm/sitara_arm/f/791/t/262837? – JimmyB

+0

@ Hanno Binder: Это голое металлическое решение, я использую Linux. – slaadvak

ответ

1

С небольшим Googling я вижу драйвер pps для подсистемы AM335x DMTimer здесь: https://github.com/ddrown/pps-gmtimer

Похоже, он не был слит вверх и README дает инструкцию по построению его в 3,8 ядро ​​- вы могли бы вернитесь назад к 3.8, или вы можете адаптировать это значение для 4.1, и в этом случае вам может понадобиться настроить наложение дерева устройств, а также на новую версию компилятора , который находится в 4.1.

Вы также можете написать прошивку счетчика импульсов для PRU (с входным сигналом 50 кГц, чтобы не улавливать каждый импульс). Вы можете посылать сигнал в ARM так часто и поймать это в своей программе пользовательского пространства.

Другим вариантом был бы непосредственно получить доступ к DMTimer регистров из пользовательского пространства с использованием mmap для отображения /dev/mem файла (примера этого метода для GPIO here), но это довольно «Hacky» способ сделать это, и это обычно неодобрение в мире GNU/Linux, чтобы делать такие вещи из пользовательского пространства, а не из пространства ядра.

+0

Поскольку я использую Linux 4.1, я еще не рассмотрел первую часть вашего ответа. Вторая часть выглядит интересной, но мне кажется, что для написания специальной прошивки для PRU очень много работы. mmap выглядит многообещающим, так как мне нужно только прочитать регистр. – slaadvak

+0

@slaadvak: Ну, сначала вам нужно написать несколько регистров, чтобы включить таймер и настроить его для захвата и т. Д. Вы можете использовать этот драйвер в качестве ссылки, например: [omap_dm_timer_setup_capture()] (https: // github. ком/ddrown/имп-gmtimer/BLOB/Master/имп-gmtimer.C# L188). –

+0

Gosh, я думал, что это уже обрабатывается утилитой 'config-pin', но я понимаю, что я ошибся ... – slaadvak