From b05df9df58bc6fdd122abfec3012bc2537fc069c Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Tue, 22 Apr 2014 16:48:50 +0200 Subject: Fix interrupt stuff Sorta polling based now, with interrupts used to wake up from sleep only. At least it works. --- accel.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'accel.c') diff --git a/accel.c b/accel.c index b58f7f7..ede53ff 100644 --- a/accel.c +++ b/accel.c @@ -5,6 +5,7 @@ #include #include #include +#include #include "i2c.h" #include "accel.h" @@ -16,8 +17,6 @@ #define LIS302DL_CTRLREG1 0x20 #define LIS302DL_UNUSED1 0x28 -/* the first interrupt is lost */ -static volatile bool drdy = true; /* 0, 2 and 4 are zero, as they contain the dummy register’s content */ static volatile int8_t val[6] = {0, 0, 0, 0, 0, 0}; /* currently reading from i2c */ @@ -26,13 +25,13 @@ static bool reading = false; /* data ready interrupt */ ISR(PCINT1_vect) { - drdy = true; + /* empty */ } void accelInit () { /* set interrupt lines to input with pull-up */ - DDRC = DDRC & ~((1 << PC0) | (1 << PC1)); - PORTC = PORTC | (1 << PC0) | (1 << PC1); + DDRC = DDRC & ~((1 << DDC0) | (1 << DDC1)); + PORTC = PORTC | (1 << PORTC0) | (1 << PORTC1); /* enable interrupt PCI1 for PCINT8/9 */ PCICR = PCICR | (1 << PCIE1); /* enable interrupts from port PC0/PC1 aka PCINT8/PCINT9 */ @@ -67,13 +66,13 @@ bool accelProcess () { reading = false; } } else { - if (drdy && twr.status != TWST_WAIT) { + if (!((PINC >> PINC1) & 0x1) && twr.status != TWST_WAIT) { /* new data available in device buffer and bus is free, we are * reading the registers inbetween out_x/y/z and ignore them */ - if (!twRequest (TWM_READ, LIS302DL, LIS302DL_UNUSED1, (uint8_t *) val, 6)) { + if (!twRequest (TWM_READ, LIS302DL, LIS302DL_UNUSED1, + (uint8_t *) val, 6)) { printf ("cannot start read\n"); } else { - drdy = false; reading = true; } } -- cgit v1.2.3