Loading...
Searching...
No Matches
max313xx_internal.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 Technische Universität Hamburg
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20#include <stdint.h>
21
22#include "kernel_defines.h"
23
24#if IS_USED(MODULE_MAX31331) && IS_USED(MODULE_MAX31343)
25# error "Only one driver variant can be used at a time!"
26#endif
27
32#if IS_USED(MODULE_MAX31331) || IS_USED(MODULE_MAX31343) || DOXYGEN
33# define MAX313XX_I2C_ADDR (0x68U)
34
35/* Status/Config registers */
36# define MAX313XX_REG_STATUS (0x00U)
37# define MAX313XX_REG_INT_EN (0x01U)
38# define MAX313XX_REG_RTC_RESET (0x02U)
39# define MAX313XX_REG_RTC_CFG1 (0x03U)
40# define MAX313XX_REG_RTC_CFG2 (0x04U)
41
42# define MAX313XX_TIME_LEN (7U)
43
44# define MAX313XX_MONTH_CENTURY (1U << 7)
45
46# define MAX313XX_ALM1_LEN (6U)
47
48# define MAX313XX_ALM_MASK_BIT (1U << 7)
49# define MAX313XX_ALM_DY_DT (1U << 6)
50
51# define MAX313XX_STATUS_A1F (1U << 0)
52# define MAX313XX_STATUS_A2F (1U << 1)
53# define MAX313XX_STATUS_OSF (1U << 6)
55
56# define MAX313XX_INTEN_A1IE (1U << 0)
57# define MAX313XX_INTEN_A2IE (1U << 1)
58#endif
59
60#if IS_USED(MODULE_MAX31331)
61# define MAX313XX_REG_TIMER_CFG (0x06U)
62# define MAX313XX_REG_TIME0 (0x08U)
63
64# define MAX313XX_RTC_CFG1_ENOSC (1U << 0)
65
66# define MAX313XX_RTC_CFG2_ENCLKO (1U << 2)
67# define MAX313XX_RTC_CFG2_CLKO_MASK (0x03U)
68
69# define MAX313XX_REG_ALM1_SEC (0x0FU)
70# define MAX313XX_REG_ALM1_MIN (0x10U)
71# define MAX313XX_REG_ALM1_HRS (0x11U)
72# define MAX313XX_REG_ALM1_DAY_DATE (0x12U)
73# define MAX313XX_REG_ALM1_MON (0x13U)
74# define MAX313XX_REG_ALM1_YEAR (0x14U)
75
76# define MAX313XX_REG_TRICKLE (0x1BU)
77
78# define MAX313XX_TRICKLE_D_MASK (0x08U)
79# define MAX313XX_TRICKLE_D_DIODE (1U << 4)
80# define MAX313XX_TRICKLE_D_RES_MASK (0x06U)
81
82#elif IS_USED(MODULE_MAX31343)
83# define MAX313XX_REG_TIMER_CFG (0x05U)
84
85# define MAX313XX_REG_TIME0 (0x06U)
86
87# define MAX313XX_RTC_CFG1_ENOSC (1U << 1)
88
89# define MAX313XX_RTC_CFG2_ENCLKO (1U << 7)
90# define MAX313XX_RTC_CFG2_CLKO_MASK (0x78U)
91
92# define MAX313XX_REG_ALM1_SEC (0x0DU)
93# define MAX313XX_REG_ALM1_MIN (0x0EU)
94# define MAX313XX_REG_ALM1_HRS (0x0FU)
95# define MAX313XX_REG_ALM1_DAY_DATE (0x10U)
96# define MAX313XX_REG_ALM1_MON (0x11U)
97# define MAX313XX_REG_ALM1_YEAR (0x12U)
98
99# define MAX313XX_REG_TRICKLE (0x19U)
100
101# define MAX313XX_TRICKLE_D_MASK (0x0FU)
102# define MAX313XX_TRICKLE_D_CHARGER_OFF (1U << 3)
103# define MAX313XX_TRICKLE_D_DIODE (1U << 2)
104# define MAX313XX_TRICKLE_D_RES_MASK (0x03U)
105
106#elif DOXYGEN
107# define MAX313XX_REG_TIMER_CFG
114# define MAX313XX_REG_TIME0
115
116# define MAX313XX_RTC_CFG1_ENOSC
117
118# define MAX313XX_RTC_CFG2_ENCLKO
119# define MAX313XX_RTC_CFG2_CLKO_MASK
120
121# define MAX313XX_REG_ALM1_SEC
122# define MAX313Xx_REG_ALM1_MIN
123# define MAX313XX_REG_ALM1_HRS
124# define MAX313XX_REG_ALM1_DAY_DATE
125# define MAX313XX_REG_ALM1_MON
126# define MAX313XX_REG_ALM1_YEAR
127
128# define MAX313XX_REG_TRICKLE
129
130# define MAX313XX_TRICKLE_D_MASK
131# define MAX313XX_TRICKLE_D_DIODE
132# define MAX313XX_TRICKLE_D_RES_MASK
133#endif
135
136/* The device specific registers are defined unconditionally to allow using
137 * `IS_USED(MODULE_MAX313..)` in the code instead of preprocessor conditions. */
142#define MAX31331_REG_TS_CFG (0x05U)
143
144#define MAX31331_TRICKLE_ENABLE (1U << 0)
145#define MAX31331_TRICKLE_RES_SHIFT (1U << 0)
147
152#define MAX31343_RTC_CFG2_SQW_HZ_MASK (0x07U)
153
154#define MAX31343_REG_TEMP_MSB (0x1AU)
155#define MAX31343_REG_TEMP_LSB (0x1BU)
156#define MAX31343_REG_TS_CONFIG (0x1CU)
157
158#define MAX31343_TS_AUTOMODE (1U << 7)
159#define MAX31343_TS_TTSINT_MASK (0x38U)
160#define MAX31343_TS_TTSINT_SHIFT (3U)
161
162#define MAX31343_TRICKLE_TCHE_SHIFT (4U)
163#define MAX31343_TRICKLE_TCHE_MASK (0xF0U)
164#define MAX31343_TRICKLE_TCHE_ENABLE (0x5U)
167
168#ifdef __cplusplus
169}
170#endif
Common macros and compiler attributes/pragmas configuration.