Skip to content
Linux kernel module PPS Client Driver using OMAP Timer hardware
C Perl Makefile
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
DD-GPS-00A0.dts tclkin support Jan 1, 2015
Makefile tclkin support Jan 1, 2015 more documentation cleanup #2 Feb 12, 2015
kernel-tclkin.patch tclkin support Jan 1, 2015
pps-gmtimer.c disable TCLKIN on cleanup in case it is stopped during boot time Jan 8, 2015
watch-pps clean up documentation and add watch-pps helper program Feb 12, 2015

Beaglebone Black Hardware Counter Capture Driver

Building the kernel

  • put kernel source from in the directory linux
  • The official beaglebone 3.8.x kernel (branch "3.8") needs commit 8fc7fcb593ac3c5730c8391c2d7db5b87e2d0bf2
  • You can backport it with the command: git cherry-pick 8fc7fcb593ac3c5730
  • To build on an Intel Linux machine, you'll need to install a cross compiler
    • (Fedora) sudo yum install gcc-arm-linux-gnu
  • uncompress /proc/config.gz from beaglebone and put it in linux/.config
  • modify .config: CONFIG_CROSS_COMPILE="arm-linux-gnu-"

make ARCH=arm oldconfig make ARCH=arm zImage make ARCH=arm modules

Building the module

The makefile assumes the kernel sources are in ../linux. If this is incorrect, change the KDIR variable

to build the module, type: make

Installing the Device Tree Overlay

on the BBB:

  • install zImage and modules
  • make DD-GPS-00A0.dtbo
  • cp DD-GPS-00A0.dtbo /lib/firmware/
  • add DD-GPS to your list of capes in /etc/default/capemgr

Using an external oscillator (TCLKIN)

To use an external clock source on pin P9.41 (TCLKIN). It accepts up to a 24MHz clock.

  • apply the patch kernel-tclkin.patch to your kernel
  • If you're not using a 24MHz clock, update the DEFINE_CLK_FIXED_RATE tclkin_ck definition in arch/arm/mach-omap2/cclock33xx_data.c
  • rebuild your kernel
  • Use the device tree overlay file DD-GPS-TCLKIN-00A0.dtbo, which has the pinctl changes needed

To use this clock as your system time source:

echo timer4 > /sys/devices/system/clocksource/clocksource0/current_clocksource

If you're not using the timer4 hardware, use the other timer's name in place.

To switch back to the default time source:

echo gp_timer > /sys/devices/system/clocksource/clocksource0/current_clocksource

Monitoring operation

The sysfs files in /sys/devices/ocp.3/pps_gmtimer.* contain the counter's current state:

  • capture - the counter's raw value at PPS capture
  • count_at_interrupt - the counter's value at interrupt time
  • interrupt_delta - the value used for the interrupt latency offset
  • pps_ts - the final timestamp value sent to the pps system
  • timer_counter - the raw counter value
  • stats - the number of captures and timer overflows
  • timer_name - the name of time timer hardware
  • ctrlstatus - the state of the TCLR register (see the AM335x Technical Reference Manual for bit meanings)

The program "watch-pps" will watch these files and produce an output that looks like:

1423775690.000 24000010 169 0.000007041 0 3988681035 -0.000001434

The columns are: pps timestamp, capture difference, cycles between capture and interrupt, interrupt_delta, raw capture value, offset

You can’t perform that action at this time.