~ruther/avr-shift-registers

ref: 1f2a92a06212f4f39cef70035f3250a2ae43e640 avr-shift-registers/src/sr/shift_register_internal.h -rw-r--r-- 961 bytes
1f2a92a0 — František Boháček fix: code 5 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#ifndef _SHIFT_REGISTERS_INTERNAL
#define _SHIFT_REGISTERS_INTERNAL

#include "seduce.h"

void set_value_to(volatile byte* reg, byte position, byte value);
void set_value(volatile byte* reg, byte position);
void reset_value(volatile byte* reg, byte position);
bool get_value(volatile byte* reg, byte position);

typedef enum {
    SR_PISO,
    SR_SIPO
} ShiftRegisterTypeHeader;

typedef struct {
    ShiftRegisterTypeHeader type;
} ShiftRegisterHeader;

typedef struct {
    ShiftRegisterHeader header;
    const DataPosition* clockEnable;
    const DataPosition* clockPulse;
    int waitTime;
    bool clockEnabled;
} ShiftRegister;

typedef struct {
    ShiftRegister shiftRegister;
    const DataPosition* output;
    const DataPosition* parallelLoad;
} PisoShiftRegister;

typedef struct {
    ShiftRegister shiftRegister;
    const DataPosition* input;
    const DataPosition* outputEnable;
    const DataPosition* pushOutput;
} SipoShiftRegister;

#endif