blob: 24932a9c7068c58844f0d0af1fd7907907bd914f (
plain)
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
42
43
44
45
46
47
48
49
50
51
52
53
|
#ifndef SEVENSEGMENT_H_
#define SEVENSEGMENT_H_
#include "util.h"
enum sseg_segment_id {
SSEG_A,
SSEG_B,
SSEG_C,
SSEG_D,
SSEG_E,
SSEG_F,
SSEG_G,
SSEG_DP,
SSEG_NR_SEGMENTS,
};
struct sseg_segment_iomap {
sfr_addr_t segment_ddr;
sfr_addr_t segment_port;
uint8_t segment_masks[SSEG_NR_SEGMENTS];
bool segment_polarity;
};
struct sseg_iomap {
const struct sseg_segment_iomap __flash *segment;
sfr_addr_t mux_ddr;
sfr_addr_t mux_port;
uint8_t mux_mask;
bool mux_polarity;
};
struct sseg_digit_data {
const struct sseg_iomap __flash *iomap;
uint8_t segment_enable_set;
uint8_t segment_enable_mask;
};
#define SSEG_DIGIT_DP ((char)(1u << 7))
void sseg_digit_set(struct sseg_digit_data *ddata,
char digit);
void sseg_multiplex(const struct sseg_digit_data *ddata_from,
const struct sseg_digit_data *ddata_to);
void sseg_init(struct sseg_digit_data *ddata);
void sseg_exit(struct sseg_digit_data *ddata);
#endif /* SEVENSEGMENT_H_ */
|