]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
eb_vytah_09: IRC code edit
authorMarek Peca <mp@duch.cz>
Thu, 9 Apr 2009 14:27:10 +0000 (16:27 +0200)
committerMarek Peca <mp@duch.cz>
Thu, 9 Apr 2009 14:27:10 +0000 (16:27 +0200)
src/eb_vytah_09/Makefile.omk
src/eb_vytah_09/irc.c
src/eb_vytah_09/irc.h

index 170aba599a553423cb690087ec174056b29d633a..d87d2d73ca09f43c210422abcdd504552c488a13 100644 (file)
@@ -2,6 +2,6 @@
 
 bin_PROGRAMS = eb_vytah_09
 
-eb_vytah_09_SOURCES = main.c pusher.c lift.c serv.c uar.c
+eb_vytah_09_SOURCES = main.c pusher.c lift.c serv.c uar.c irc.c
 eb_vytah_09_LIBS = can ebb
 
index 8eb22c953bd3ef473cec1f4618722b6561e12a5b..0d8f722ac34c4f3e5fdba245c1c7050af1b97ab8 100644 (file)
@@ -49,21 +49,41 @@ int irc_deglitch(deglitcher_t *dg, char inp) {
   return change;
 }
 
+/**
+ * update IRC1, IRC2 deglitchers' state structs,
+ * initialize IRC1,2 as GPIO inputs
+ */
 void irc_init() {
   irc_deglitch_init(&dg1);
   irc_deglitch_init(&dg2);
+  IRC1DIR &= ~(1<<IRC1BIT);
+  IRC2DIR &= ~(1<<IRC1BIT);
   IRC1PINSEL &= ~(0x3<<IRC1PINBIT);
   IRC2PINSEL &= ~(0x3<<IRC2PINBIT);
 }
 
-void irc_read() {
+/**
+ * -!- to be called @ approx. 100kHz fixed period -!-
+ *
+ * read IRC1,2 inputs, deglitch signal, update irc*_count variables
+ * increments on falling edge
+ * @return r; r==0: no change, r&1: IRC1 increment, r&2: IRC2 increment
+ */
+int irc_read() {
   char inp;
+  int rc = 0;
 
   inp = !(!(IRC1PIN & (1<<IRC1BIT)));
-  if (irc_deglitch(&dg1, inp) && (inp == 0))
+  if (irc_deglitch(&dg1, inp) && (inp == 0)) {
     ++irc1_count;
+    rc |= 1;
+  }
   inp = !(!(IRC2PIN & (1<<IRC2BIT)));
-  if (irc_deglitch(&dg2, inp) && (inp == 0))
+  if (irc_deglitch(&dg2, inp) && (inp == 0)) {
     ++irc2_count;
+    rc |= 2;
+  }
+
+  return rc;
 }
 
index c2304cc97237f93c73ef8262ef7639bed173ea19..f53600f117cd0cd21a268fb5ad972b02086959ce 100644 (file)
@@ -2,20 +2,19 @@
 #include <types.h>
 
 #define IRC1PIN     IO0PIN
+#define IRC1DIR     IO0DIR
 #define IRC1BIT     15
 #define IRC1PINSEL  PINSEL0
 #define IRC1PINBIT  (2*IRC1BIT)
 
 #define IRC2PIN     IO0PIN
+#define IRC2DIR     IO0DIR
 #define IRC2BIT     9
 #define IRC2PINSEL  PINSEL0
 #define IRC2PINBIT  (2*IRC2BIT)
 
-
-/* incremented at falling edge of particular single input */
+/* IRC number counts, incremented on falling edges */
 extern uint32_t irc1_count, irc2_count;
 
-/* initialize IRC inputs as GPIO & reset deglitchers' internal state */
 void irc_init();
-/* to be called at approx. 100kHz at fixed rate, fills in irc*_count values */
-void irc_read();
+int irc_read();