diff options
author | fishsoupisgood <github@madingley.org> | 2020-06-14 10:55:07 +0100 |
---|---|---|
committer | fishsoupisgood <github@madingley.org> | 2020-06-14 10:55:07 +0100 |
commit | 0060468326b7ab0cd07d0d80a84118e7c5bcf348 (patch) | |
tree | 8be8ad7b1cb23be4765b9d94a7b8fcefa4d67e27 /app/tacho.c | |
parent | dbc21c1e5dfd95248fe2cd7da6d96c92bdbb97a4 (diff) | |
download | robs_speedo-0060468326b7ab0cd07d0d80a84118e7c5bcf348.tar.gz robs_speedo-0060468326b7ab0cd07d0d80a84118e7c5bcf348.tar.bz2 robs_speedo-0060468326b7ab0cd07d0d80a84118e7c5bcf348.zip |
add tacho
Diffstat (limited to 'app/tacho.c')
-rw-r--r-- | app/tacho.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/app/tacho.c b/app/tacho.c new file mode 100644 index 0000000..35331da --- /dev/null +++ b/app/tacho.c @@ -0,0 +1,64 @@ +#include "project.h" + +#define SPURIOUS MS(10) /*Anything faster than 6000rpm is a false trigger */ + + + +uint32_t raw_tacho; + +static uint32_t +cycle_diff (uint32_t a, uint32_t b) +{ + return b - a; +} + + + +void exti3_isr (void) +{ +uint32_t now, diff; +static uint32_t last_edge; + +if (!( EXTI_PR & TACHO)) return; + +EXTI_PR=TACHO; + +now=dwt_read_cycle_counter(); + +diff= cycle_diff(last_edge,now); + +if (diff < SPURIOUS) return; + +last_edge=now; + + +/* Want RPM, diff is in units of 1/72 us */ + +if (!diff) return; + +/* uint32_t is able to express 60s in clock ticks, so divide everything by 2 */ + +diff >>=1; + + + +raw_tacho =(US ((60*1000000)/2))/diff; + +} + + +void tacho_init (void) +{ + MAP_INPUT_PU (TACHO); + + exti_select_source (TACHO,TACHO_PORT); + exti_set_trigger (TACHO, EXTI_TRIGGER_FALLING); + exti_enable_request (TACHO); + exti_reset_request (TACHO); + + nvic_enable_irq (TACHO_IRQ); + +} + + + |