2015-11-06 51 views
0

我需要使用BBB來計算50KHz二進制信號的轉換。我認爲使用連接到引腳P8.07的外部信號觸發的TIMER4將是最簡單的方法。如何讀取BeagleBone Black上的外部計時器計數器?

所以,我發出以下命令來加載正確的斗篷和設置引腳作爲定時器:

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

一切似乎工作,並沒有出現在dmesg

我的問題是:如何讀取TIMER4的值?我看着SysFs,發現沒有什麼有趣的。 /dev也一樣。我如何檢索我剛設置的定時器計數器的值?我也開放給C/C++解決方案,但我想避免進行內核空間編程。

我正在使用最新的Ubuntu Linux for BeagleBone,內核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

隨着一點點的谷歌搜索我看到了AM335x DMTimer子系統這裏pps司機:https://github.com/ddrown/pps-gmtimer

它看起來像它沒有被合併的上游和README給出了構建它到3.8內核的指令 - 你可以恢復到3.8,或者您可以將其調整爲4.1,在這種情況下,您可能需要調整設備樹覆蓋以及4.1版中dtc編譯器的較新版本。你也可以爲PRU寫一個脈衝計數器固件(只有50KHz的輸入,它不需要非常優化就可以捕捉每個脈衝)。您可以每隔一段時間向ARM發送一個信號,並在用戶空間程序中捕捉到該信號。

另一種選擇是直接訪問DMTimer使用mmap映射/dev/mem文件(此方法GPIO here的例子)用戶空間註冊,但這是做一個漂亮的「哈克」的方式,而且它通常皺眉在GNU/Linux世界中,用戶空間而不是空間空間來完成那些東西。

+0

在我使用Linux 4.1時,我還沒有考慮到答案的第一部分。第二部分看起來很有趣,但是在我看來,爲PRU編寫自定義固件需要很多工作。 mmap看起來很有前途,因爲我只需要讀取一個寄存器。 – slaadvak

+0

@slaadvak:嗯,你首先需要編寫一些寄存器來啓用定時器並將其配置爲捕獲等。您可以使用該驅動程序作爲參考,例如:[omap_dm_timer_setup_capture()](https:// github。 COM/ddrown/PPS-gmtimer /斑點/主/ PPS-gmtimer.c#L188)。 –

+0

天哪,我認爲這已經由'config-pin'工具處理過,但我明白我錯了...... – slaadvak