#include #include "pru_ecap.h" // initialization using py-uio: // pruss.ecap.pwm.initialize( 2**32 ) // // initialization using pru: static void timestamp_initialize() { CT_ECAP.ECCTL2 = 0x0200; CT_ECAP.ECCTL1 = 0; CT_ECAP.TSCTR = 0; CT_ECAP.CAP3 = 0xffffffff; CT_ECAP.CAP4 = 0; CT_ECAP.CAP1 = 0xffffffff; CT_ECAP.CAP2 = 0; CT_ECAP.ECCTL2 = 0x0210; } // returns timestamp in units of 1 pru cycle (= 5ns). // timestamp wraps every 21.47483648 seconds (exactly). static inline uint32_t timestamp() { return CT_ECAP.TSCTR; } // returns timestamp in units of 65536 pru cycles (= 0.32768 ms). // must be called at least once every 21 seconds to ensure correct timekeeping. // timestamp wraps every 16 days (approximately). uint32_t timestamp_shr16() { static uint32_t now = 0; return now += (uint16_t)( ( timestamp() >> 16 ) - now ); } // returns 64-bit timestamp in units of pru cycles (= 5 ns). // must be called at least once every 21 seconds to ensure correct timekeeping. // timestamp never wraps. uint64_t timestamp64() { static uint64_t now = 0; return now += (uint32_t)( timestamp() - now ); }