summaryrefslogtreecommitdiff
path: root/n/es-2006/src/main.c
diff options
context:
space:
mode:
authordufourj2006-05-08 13:36:09 +0000
committerdufourj2006-05-08 13:36:09 +0000
commite7fb4f1b6b94fbcbaf56bbd350e4d45c1d7eef39 (patch)
treed3b648c9cdc8189e7cbc299cc0d2c568bf7f5be5 /n/es-2006/src/main.c
parentbb2dc882b10243fb0301379be0f1dbd43a393f49 (diff)
ES :
- début d'intégration avec la futur PWM de marcel ; - meilleur gestion des interruptions qui pourraient se "chevaucher". TODO : - améliorer un if pour le décallage de bits ; - calculer le nombre d'overflow de manière dynamique.
Diffstat (limited to 'n/es-2006/src/main.c')
-rw-r--r--n/es-2006/src/main.c61
1 files changed, 44 insertions, 17 deletions
diff --git a/n/es-2006/src/main.c b/n/es-2006/src/main.c
index a269dfe..f5e15a8 100644
--- a/n/es-2006/src/main.c
+++ b/n/es-2006/src/main.c
@@ -29,18 +29,20 @@
#include "modules/proto/proto.h"
#include "modules/utils/utils.h"
-#include "timer.h" /* main timer */
+#include "timer_main.h" /* main timer */
#include "sensor_rvb.h" /* RVB sensors management */
+#include "es_config.h" /* timer/counter 1 */
-/* Statistics for sensors */
-uint8_t sensor_rvb_stat_enable = 0;
-uint8_t sensor_rvb_stats = 0;
+/* Statistics for RVB sensors */
+uint8_t sensor_rvb_stat_enable[RVB_MAX_SENSOR] = { 0 };
+uint8_t sensor_rvb_stats[RVB_MAX_SENSOR] = { 0 };
/** Call when we receive some data from proto (uart) */
void
proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
{
+ uint8_t compt;
/* This macro combine command and size in one integer. */
#define c(cmd, size) (cmd << 8 | size)
switch (c (cmd, size))
@@ -49,13 +51,21 @@ proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
case c ('z', 0):
utils_reset ();
break;
- case c ('S', 1):
- sensor_rvb_stats = sensor_rvb_stat_enable = args[0];
+ /* RVB sensors stats */
+ case c ('S', 3):
+ for (compt = 0; compt < RVB_MAX_SENSOR; compt++)
+ // TODO improve this !
+ if ( ((compt >= 8) && (args[0] & _BV(compt)))
+ || ((compt < 8) && (args[1] & _BV(compt))) )
+ {
+ sensor_rvb_stat_enable[compt] = sensor_rvb_stats[compt] =
+ args[2];
+ }
break;
- case c ('s', 2):
- sensor_rvb_watch (args[0], args[1]);
- break;
- /* Unknown command */
+// case c ('s', 2):
+// sensor_rvb_watch (args[0], args[1]);
+// break;
+ /* Unknown commands */
default:
proto_send0 ('?');
return;
@@ -68,26 +78,43 @@ proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
int
main (void)
{
- int compt;
+ uint8_t compt;
+ /* Serial port */
uart0_init ();
- timer_init ();
+ /* Main timer init */
+ timer_main_init ();
+ /* Init timer/counter 1 for RVB & PWM
+ * /!\ Must be called before RVB/PWM init ! */
+ timer1_init ();
+ /* Init RVB sensors system */
sensor_rvb_init ();
+
+ /* Enable interrupts */
sei ();
+
+ /* We are ready ! */
proto_send0 ('z');
while (1)
{
- timer_wait ();
- if (sensor_rvb_stat_enable && !--sensor_rvb_stats)
+ /* Wait 4.44 ms */
+ timer_main_wait ();
+
+ /* RVB Sensors stats */
+ for (compt = 0; compt < RVB_MAX_SENSOR; compt++)
+ if (sensor_rvb_stat_enable[compt] && !--sensor_rvb_stats[compt])
{
- sensor_rvb_stats = sensor_rvb_stat_enable;
- for (compt = 0; compt < RVB_MAX_SENSOR; compt++)
- proto_send4w ('S', sensor_rvb_values[compt][0],
+ /* Re init stats system for this sensor */
+ sensor_rvb_stats[compt] = sensor_rvb_stat_enable[compt];
+ proto_send4w ('S', sensor_rvb_values[compt][0],
sensor_rvb_values[compt][1], sensor_rvb_values[compt][2],
sensor_rvb_values[compt][3]);
}
+ /* Update RVB sensors data. */
sensor_rvb_start_capture ();
+
+ /* Get data for serial port */
while (uart0_poll ())
proto_accept (uart0_getc ());
}