trennfix/sw: Something is working already
[eisenbahn.git] / trennfix / sw / pin_magic.h
CommitLineData
54de37bf
PH
1#ifndef __HACHTIS_PIN_MAGIC_H
2#define __HACHTIS_PIN_MAGIC_H
3
4struct __ph_pin__ {
5 volatile uint8_t *addr;
6 uint8_t bitno;
7};
8
9#define _PIN(port, bit) ((volatile struct __ph_pin__){&port, bit})
10
11#define LED _PIN(PORTB, PORTB2)
12
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
19#define PINVAL(pin) (*(pin.addr - 2) & _BV(pin.bitno) ? 1 : 0)
20
21#define setpin(pin, val) ((val) ? PINON(pin) : PINOFF(pin))
22
23#endif