src/switch.c
author Tero Marttila <terom@paivola.fi>
Wed, 08 Oct 2014 23:20:34 +0300
changeset 11 a383e22204f2
parent 8 61eba9d55764
permissions -rw-r--r--
adxl345: control/data registers read/write
8
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#include "stdlib.h"
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
//#include "switch.h"
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
#include <avr/io.h>
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
#include <avr/interrupt.h>
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
byte switch_mask;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
byte switch_status;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
byte switch_state;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
ISR(PCINT0_vect)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
{
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
    switch_status = 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
    switch_state = PINB;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
}
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
ISR(PCINT1_vect)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
{
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    switch_status = 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
    switch_state = PINC;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
}
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
ISR(PCINT2_vect)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
{
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
    switch_status = 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
    switch_state = PIND;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
}
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
byte switch_read (byte *sp)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
{
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
    if (!switch_status)
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
        return 0;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
    switch_status = 0;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
    *sp = ~switch_state & switch_mask;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    return 1;
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
}