summaryrefslogtreecommitdiff
path: root/n/es-2006/src/sensor_rvb.c
diff options
context:
space:
mode:
Diffstat (limited to 'n/es-2006/src/sensor_rvb.c')
-rw-r--r--n/es-2006/src/sensor_rvb.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/n/es-2006/src/sensor_rvb.c b/n/es-2006/src/sensor_rvb.c
index a354c53..b6576e1 100644
--- a/n/es-2006/src/sensor_rvb.c
+++ b/n/es-2006/src/sensor_rvb.c
@@ -27,8 +27,6 @@
#include "io.h"
#include "modules/utils/utils.h" /* regv */
-#include "modules/uart/uart.h"
-#include "modules/proto/proto.h"
/**
* Somes defines.
@@ -37,7 +35,7 @@
#define S1RVB 7
#define S0RVB 6
/** Max input capture before considering we can start the real capture. */
-#define RVB_MAX_FALSE_IC 4
+#define RVB_MAX_FALSE_IC 8
/** Max overflow of the timer 1 before thinking the sensor is HS. */
/* TODO Find a way to compute this value */
#define RVB_MAX_OVERFLOW 250
@@ -206,6 +204,9 @@ sensor_rvb_update (void)
else
{
sensor_rvb_state_ = RVB_STATE_WAIT_IC;
+ /* Ensure we have no pending interrupt for IC1. */
+ // XXX | ?
+ TIFR |= _BV (ICF1);
/* Enable interrupt for IC1 */
TIMSK |= _BV (TICIE1);
}
@@ -227,6 +228,9 @@ sensor_rvb_update (void)
sensor_rvb_color_select (sensor_rvb_color_ = 0);
sensor_rvb_state_ = RVB_STATE_WAIT_IC;
sensor_rvb_overflow_count_ = 0;
+ /* Ensure we have no pending interrupt for IC1. */
+ // XXX | ?
+ TIFR |= _BV (ICF1);
/* Enable interrupt for IC1 and counter overflow */
TIMSK |= _BV (TICIE1);
TIMSK |= _BV (TOIE1);
@@ -238,7 +242,7 @@ SIGNAL (SIG_OVERFLOW1)
{
switch (sensor_rvb_state_)
{
- case RVB_STATE_START_CAPTURE:
+ case RVB_STATE_STOP_CAPTURE:
++sensor_rvb_overflow_count_;
break;
case RVB_STATE_WAIT_IC:
@@ -265,28 +269,26 @@ SIGNAL (SIG_INPUT_CAPTURE1)
case RVB_STATE_WAIT_IC:
sensor_rvb_ic_count_ = RVB_MAX_FALSE_IC;
sensor_rvb_state_ = RVB_STATE_WAIT_IC2;
+ /* nobreak */
case RVB_STATE_WAIT_IC2:
if (!--sensor_rvb_ic_count_)
/* Last ignored capture */
sensor_rvb_state_ = RVB_STATE_START_CAPTURE;
break;
case RVB_STATE_START_CAPTURE:
- sensor_rvb_overflow_count_ = 0;
/* Save capture start */
sensor_rvb_value_ = ICR1;
+ sensor_rvb_overflow_count_ = 0;
/* New capture */
sensor_rvb_state_ = RVB_STATE_STOP_CAPTURE;
break;
case RVB_STATE_STOP_CAPTURE:
+ /* Save */
+ // XXX Check this please
+ sensor_rvb_values[sensor_rvb_number_ - 1][sensor_rvb_color_] = ICR1 +
+ sensor_rvb_overflow_count_ * TC1_TOP - sensor_rvb_value_;
/* Disable IC interrupt */
TIMSK &= ~_BV (TICIE1);
- /* Ensure we have no pending interrupt for IC1. */
- TIFR = _BV (ICF1);
- /* Compute value */
- sensor_rvb_value_ = ICR1 + sensor_rvb_overflow_count_ * TC1_TOP -
- sensor_rvb_value_;
- /* Save */
- sensor_rvb_values[sensor_rvb_number_ - 1][sensor_rvb_color_] = sensor_rvb_value_;
sensor_rvb_state_ = RVB_STATE_NEXT_COLOR;
/* Next please */
sensor_rvb_update ();