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
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;
}
#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();