trennfix/sw: Was not as beautiful as expected. Now it's better!
[eisenbahn.git] / trennfix / sw / include / pin_magic.h
CommitLineData
54de37bf
PH
1#ifndef __HACHTIS_PIN_MAGIC_H
2#define __HACHTIS_PIN_MAGIC_H
3
70095677
PH
4#include <avr/io.h>
5
54de37bf
PH
6struct __ph_pin__ {
7 volatile uint8_t *addr;
8 uint8_t bitno;
9};
10
11#define _PIN(port, bit) ((volatile struct __ph_pin__){&port, bit})
12
54de37bf
PH
13#define OUTPUT_PIN(pin) (*(pin.addr - 1) |= _BV(pin.bitno))
14#define INPUT_PIN(pin) (*(pin.addr - 1) &= ~_BV(pin.bitno))
15
16#define PINON(pin) (*pin.addr |= _BV(pin.bitno))
17#define PINOFF(pin) (*pin.addr &= ~_BV(pin.bitno))
18
d0047978
PH
19//#define PINVAL(pin) (*(pin.addr - 2) & _BV(pin.bitno) ? 1 : 0)
20#define PINVAL(pin) (*(pin.addr - 2) & _BV(pin.bitno))
54de37bf
PH
21
22#define setpin(pin, val) ((val) ? PINON(pin) : PINOFF(pin))
23
24#endif