/**************************************************************************** * drivers/timers/ds3231.h * * Copyright (C) 2015 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * 3. Neither the name NuttX nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ #ifndef __DRIVERS_TIMERS_DS3231_H #define __DRIVERS_TIMERS_DS3231_H /**************************************************************************** * Included Files ****************************************************************************/ #include /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ #define DSXXXX_TIME_SECR 0x00 /* Seconds register */ # define DSXXXX_TIME_SEC_SHIFT 0 /* Bits 0-3: Seconds, range 0-9 */ # define DSXXXX_TIME_SEC_MASK (15 << DSXXXX_TIME_SEC_SHIFT) # define DSXXXX_TIME_SEC(n) ((uint8_t)(n) << DSXXXX_TIME_SEC_SHIFT) # define DSXXXX_TIME_10SEC_SHIFT 4 /* Bits 4-6: 10 seconds, range 0-5 */ # define DSXXXX_TIME_10SEC_MASK (7 << DSXXXX_TIME_10SEC_SHIFT) # define DSXXXX_TIME_10SEC(n) ((uint8_t)(n) << DSXXXX_TIME_10SEC_SHIFT) # define DSXXXX_TIME_SEC_BCDMASK (DSXXXX_TIME_SEC_MASK | DSXXXX_TIME_10SEC_MASK) #if defined(CONFIG_RTC_DS1302) || defined(CONFIG_RTC_DS1307) # define DS130x_TIME_CH (1 << 7) /* Bit 7: Clock halt */ #endif #define DSXXXX_TIME_MINR 0x01 /* Minutes register */ # define DSXXXX_TIME_MIN_SHIFT 0 /* Bits 0-3: Minutes, range 0-9 */ # define DSXXXX_TIME_MIN_MASK (15 << DSXXXX_TIME_MIN_SHIFT) # define DSXXXX_TIME_MIN(n) ((uint8_t)(n) << DSXXXX_TIME_MIN_SHIFT) # define DSXXXX_TIME_10MIN_SHIFT 4 /* Bits 4-6: 10 minutes, range 0-5 */ # define DSXXXX_TIME_10MIN_MASK (7 << DSXXXX_TIME_10MIN_SHIFT) # define DSXXXX_TIME_10MIN(n) ((uint8_t)(n) << DSXXXX_TIME_10MIN_SHIFT) # define DSXXXX_TIME_MIN_BCDMASK (DSXXXX_TIME_MIN_MASK | DSXXXX_TIME_10MIN_MASK) #define DSXXXX_TIME_HOURR 0x02 /* Hours register */ # define DSXXXX_TIME_HOUR_SHIFT 0 /* Bits 0-3: Hours, range 0-9 */ # define DSXXXX_TIME_HOUR_MASK (15 << DSXXXX_TIME_HOUR_SHIFT) # define DSXXXX_TIME_HOUR(n) ((uint8_t)(n) << DSXXXX_TIME_HOUR_SHIFT) # define DSXXXX_TIME_10HOUR12_SHIFT 4 /* Bit 4: 10 hours, range 0-1 */ # define DSXXXX_TIME_10HOUR12_MASK (1 << DSXXXX_TIME_10HOUR12_SHIFT) # define DSXXXX_TIME_10HOUR12(n) ((uint8_t)(n) << DSXXXX_TIME_10HOUR12_SHIFT) # define DSXXXX_TIME_10HOUR24_SHIFT 4 /* Bits 4-5: 10 hours, range 0-2 */ # define DSXXXX_TIME_10HOUR24_MASK (3 << DSXXXX_TIME_10HOUR24_SHIFT) # define DSXXXX_TIME_10HOUR24(n) ((uint8_t)(n) << DSXXXX_TIME_10HOUR24_SHIFT) # define DSXXXX_TIME_HOUR12_BCDMASK (DSXXXX_TIME_HOUR_MASK | DSXXXX_TIME_10HOUR12_MASK) # define DSXXXX_TIME_HOUR24_BCDMASK (DSXXXX_TIME_HOUR_MASK | DSXXXX_TIME_10HOUR24_MASK) # define DSXXXX_TIME_AMPM_SHIFT 5 /* Bit 5: AM/PM Indication */ # define DSXXXX_TIME_AMPM_MASK (1 << DSXXXX_TIME_AMPM_SHIFT) # define DSXXXX_TIME_AM ((uint8_t)(0) << DSXXXX_TIME_AMPM_SHIFT) # define DSXXXX_TIME_PM ((uint8_t)(1) << DSXXXX_TIME_AMPM_SHIFT) # define DSXXXX_TIME_1224_SHIFT 6 /* Bit 6: 12/24 Indication */ # define DSXXXX_TIME_1224_MASK (1 << DSXXXX_TIME_1224_SHIFT) # define DSXXXX_TIME_24 ((uint8_t)(0) << DSXXXX_TIME_1224_SHIFT) # define DSXXXX_TIME_12 ((uint8_t)(1) << DSXXXX_TIME_1224_SHIFT) #define DSXXXX_TIME_DAYR 0x03 /* Day of the week register */ # define DSXXXX_TIME_DAY_SHIFT 0 /* Bits 0-3: Day of the week, range 1-7 */ # define DSXXXX_TIME_DAY_MASK (7 << DSXXXX_TIME_DAY_SHIFT) # define DSXXXX_TIME_DAY(n) ((uint8_t)(n) << DSXXXX_TIME_DAY_SHIFT) #define DSXXXX_TIME_DATER 0x04 /* Date register */ # define DSXXXX_TIME_DATE_SHIFT 0 /* Bits 0-3: Days, range 0-9 */ # define DSXXXX_TIME_DATE_MASK (15 << DSXXXX_TIME_DATE_SHIFT) # define DSXXXX_TIME_DATE(n) ((uint8_t)(n) << DSXXXX_TIME_DATE_SHIFT) # define DSXXXX_TIME_10DATE_SHIFT 4 /* Bits 4-5: 10 days, range 0-5 */ # define DSXXXX_TIME_10DATE_MASK (3 << DSXXXX_TIME_10DATE_SHIFT) # define DSXXXX_TIME_10DATE(n) ((uint8_t)(n) << DSXXXX_TIME_10DATE_SHIFT) # define DSXXXX_TIME_DATE_BCDMASK (DSXXXX_TIME_DATE_MASK | DSXXXX_TIME_10DATE_MASK) #define DSXXXX_TIME_MONTHR 0x05 /* Month register */ # define DSXXXX_TIME_MONTH_SHIFT 0 /* Bits 0-3: Month, range 0-9 */ # define DSXXXX_TIME_MONTH_MASK (15 << DSXXXX_TIME_MONTH_SHIFT) # define DSXXXX_TIME_MONTH(n) ((uint8_t)(n) << DSXXXX_TIME_MONTH_SHIFT) # define DSXXXX_TIME_10MONTH_SHIFT 4 /* Bit 4: 10 month, range 0-1 */ # define DSXXXX_TIME_10MONTH_MASK (1 << DSXXXX_TIME_10MONTH_SHIFT) # define DSXXXX_TIME_10MONTH(n) ((uint8_t)(n) << DSXXXX_TIME_10MONTH_SHIFT) # define DSXXXX_TIME_MONTH_BCDMASK (DSXXXX_TIME_MONTH_MASK | DSXXXX_TIME_10MONTH_MASK) #if defined(CONFIG_RTC_DS3231) || defined(CONFIG_RTC_DS3232) || defined(CONFIG_RTC_DS3234) # define DS323X_TIME_CENTURY_SHIFT 7 /* Bit 7: Century Indication */ # define DS323X_TIME_CENTURY_MASK (1 << DS323X_TIME_CENTURY_SHIFT) # define DS323X_TIME_1900 ((uint8_t)(0) << DS323X_TIME_CENTURY_SHIFT) # define DS323X_TIME_2000 ((uint8_t)(1) << DS323X_TIME_CENTURY_SHIFT) #endif #define DSXXXX_TIME_YEARR 0x06 /* Date register */ # define DSXXXX_TIME_YEAR_SHIFT 0 /* Bits 0-3: Year, range 0-9 */ # define DSXXXX_TIME_YEAR_MASK (15 << DSXXXX_TIME_YEAR_SHIFT) # define DSXXXX_TIME_YEAR(n) ((uint8_t)(n) << DSXXXX_TIME_YEAR_SHIFT) # define DSXXXX_TIME_10YEAR_SHIFT 4 /* Bits 4-7: 10 year, range 0-9 */ # define DSXXXX_TIME_10YEAR_MASK (15 << DSXXXX_TIME_10YEAR_SHIFT) # define DSXXXX_TIME_10YEAR(n) ((uint8_t)(n) << DSXXXX_TIME_10YEAR_SHIFT) # define DSXXXX_TIME_YEAR_BCDMASK (DSXXXX_TIME_YEAR_MASK | DSXXXX_TIME_10YEAR_MASK) #ifdef CONFIG_RTC_DS1302 # define DS1302_CR 0x07 /* Control register */ # define DS1302_CR_WP (1 << 7) /* Bit 7: Write protect */ # define DS1302_TCR 0x08 /* Trickle charge register */ # define DS1302_TCR_RS_SHIFT (0) /* Bits 0-1: Reistance select */ # define DS1302_TCR_RS_MASK (3 << DS1302_TCR_RS_SHIFT) # define DS1302_TCR_RS(n) ((uint8_t)(n) << DS1302_TCR_RS_SHIFT) # define DS1302_TCR_RS_DISABLED (0 << DS1302_TCR_RS_SHIFT) # define DS1302_TCR_RS_2OHM (1 << DS1302_TCR_RS_SHIFT) # define DS1302_TCR_RS_4OHM (2 << DS1302_TCR_RS_SHIFT) # define DS1302_TCR_RS_8OHM (3 << DS1302_TCR_RS_SHIFT) # define DS1302_TCR_DS_SHIFT (4) /* Bits 2-3: Diode select */ # define DS1302_TCR_DS_MASK (3 << DS1302_TCR_DS_SHIFT) # define DS1302_TCR_DS(n) ((uint8_t)(n) << DS1302_TCR_DS_SHIFT) # define DS1302_TCR_DS_DISABLED (0 << DS1302_TCR_DS_SHIFT) # define DS1302_TCR_DS_1DIODE (1 << DS1302_TCR_DS_SHIFT) # define DS1302_TCR_DS_2DIODE (2 << DS1302_TCR_DS_SHIFT) # define DS1302_TCR_DS_DISABLED_2 (3 << DS1302_TCR_DS_SHIFT) # define DS1302_TCR_TCS_SHIFT (4) /* Bits 4-7: Trickle charge select */ # define DS1302_TCR_TCS_MASK (15 << DS1302_TCR_TCS_SHIFT) # define DS1302_TCR_TCS(n) ((uint8_t)(n) << DS1302_TCR_TCS_SHIFT) # define DS1302_TCR_DISABLED (DS1302_TCR_RS_DISABLED | DS1302_TCR_DS_DISABLED | define DS1302_TCR_TCS(0)) # define DS1302_TCR_1DIODE_2OHM (DS1302_TCR_RS_2OHM | DS1302_TCR_DS_1DIODE | define DS1302_TCR_TCS(10)) # define DS1302_TCR_1DIODE_4OHM (DS1302_TCR_RS_4OHM | DS1302_TCR_DS_1DIODE | define DS1302_TCR_TCS(10)) # define DS1302_TCR_1DIODE_8OHM (DS1302_TCR_RS_8OHM | DS1302_TCR_DS_1DIODE | define DS1302_TCR_TCS(10)) # define DS1302_TCR_2DIODE_2OHM (DS1302_TCR_RS_2OHM | DS1302_TCR_DS_2DIODE | define DS1302_TCR_TCS(10)) # define DS1302_TCR_2DIODE_4OHM (DS1302_TCR_RS_4OHM | DS1302_TCR_DS_2DIODE | define DS1302_TCR_TCS(10)) # define DS1302_TCR_2DIODE_8OHM (DS1302_TCR_RS_8OHM | DS1302_TCR_DS_2DIODE | define DS1302_TCR_TCS(10)) # define DS1302_TCR_INIT (DS1302_TCR_RS_DISABLED | DS1302_TCR_DS_DISABLED_2 | define DS1302_TCR_TCS(5)) #endif #ifdef CONFIG_RTC_DS1307 # define DS1307_CR 0x07 /* Control register */ # define DS1307_CR_RS_SHIFT (3) /* Bits 0-1: Rate selection */ # define DS1307_CR_RS_MASK (3 << DS1307_CR_RS_SHIFT) # define DS1307_CR_RS_1HZ (0 << DS1307_CR_RS_SHIFT) /* 1Hz */ # define DS1307_CR_RS_4KHZ (1 << DS1307_CR_RS_SHIFT) /* 4.096kHz */ # define DS1307_CR_RS_8KHZ (2 << DS1307_CR_RS_SHIFT) /* 8.192kHz */ # define DS1307_CR_RS_32KHZ (3 << DS1307_CR_RS_SHIFT) /* 32.768kHz */ # define DS1307_CR_SQWE (1 << 4) /* Bit 4: Square wave enable */ # define DS1307_CR_OUT (1 << 7) /* Bit 7: Output control */ # define DS1307_RAM_BASER 0x08 /* 0x08-0x3f: 56x8 RAM */ #endif #if defined(CONFIG_RTC_DS3231) || defined(CONFIG_RTC_DS3232) || defined(CONFIG_RTC_DS3234) # define DS323X_ALARM1_SECR 0x07 /* Alarm1 seconds register */ # define DS323X_ALARM1_SEC_SHIFT 0 /* Bits 0-3: Seconds, range 0-9 */ # define DS323X_ALARM1_SEC_MASK (15 << DS323X_ALARM1_SEC_SHIFT) # define DS323X_ALARM1_SEC(n) ((uint8_t)(n) << DS323X_ALARM1_SEC_SHIFT) # define DS323X_ALARM1_10SEC_SHIFT 4 /* Bits 4-6: 10 seconds, range 0-5 */ # define DS323X_ALARM1_10SEC_MASK (7 << DS323X_ALARM1_10SEC_SHIFT) # define DS323X_ALARM1_10SEC(n) ((uint8_t)(n) << DS323X_ALARM1_10SEC_SHIFT) # define DS323X_ALARM1_SEC_BCDMASK (DS323X_ALARM1_SEC_MASK | DS323X_ALARM1_10SEC_MASK) # define DS323X_ALARM1_A1M1_SHIFT 7 /* Bits 7: A1M1 mask */ # define DS323X_ALARM1_A1M1_MASK (1 << DS323X_ALARM1_A1M1_SHIFT) # define DS323X_ALARM1_A1M1(n) ((uint8_t)(n) << DS323X_ALARM1_A1M1_SHIFT) # define DS323X_ALARM1_MINR 0x08 /* Alarm1 minutes register */ # define DS323X_ALARM1_MIN_SHIFT 0 /* Bits 0-3: Minutes, range 0-9 */ # define DS323X_ALARM1_MIN_MASK (15 << DS323X_ALARM1_MIN_SHIFT) # define DS323X_ALARM1_MIN(n) ((uint8_t)(n) << DS323X_ALARM1_MIN_SHIFT) # define DS323X_ALARM1_10MIN_SHIFT 4 /* Bits 4-6: 10 minutes, range 0-5 */ # define DS323X_ALARM1_10MIN_MASK (7 << DS323X_ALARM1_10MIN_SHIFT) # define DS323X_ALARM1_10MIN(n) ((uint8_t)(n) << DS323X_ALARM1_10MIN_SHIFT) # define DS323X_ALARM1_MIN_BCDMASK (DS323X_ALARM1_MIN_MASK | DS323X_ALARM1_10MIN_MASK) # define DS323X_ALARM1_A1M2_SHIFT 7 /* Bits 7: A1M2 mask */ # define DS323X_ALARM1_A1M2_MASK (1 << DS323X_ALARM1_A1M2_SHIFT) # define DS323X_ALARM1_A1M2(n) ((uint8_t)(n) << DS323X_ALARM1_A1M2_SHIFT) # define DS323X_ALARM1_HOURR 0x09 /* Alarm1 hours register */ # define DS323X_ALARM1_HOUR_SHIFT 0 /* Bits 0-3: Hours, range 0-9 */ # define DS323X_ALARM1_HOUR_MASK (15 << DS323X_ALARM1_HOUR_SHIFT) # define DS323X_ALARM1_HOUR(n) ((uint8_t)(n) << DS323X_ALARM1_HOUR_SHIFT) # define DS323X_ALARM1_10HOUR12_SHIFT 4 /* Bit 4: 10 hours, range 0-1 */ # define DS323X_ALARM1_10HOUR12_MASK (1 << DS323X_ALARM1_10HOUR12_SHIFT) # define DS323X_ALARM1_10HOUR12(n) ((uint8_t)(n) << DS323X_ALARM1_10HOUR12_SHIFT) # define DS323X_ALARM1_10HOUR24_SHIFT 4 /* Bits 4-5: 10 hours, range 0-2 */ # define DS323X_ALARM1_10HOUR24_MASK (3 << DS323X_ALARM1_10HOUR24_SHIFT) # define DS323X_ALARM1_10HOUR24(n) ((uint8_t)(n) << DS323X_ALARM1_10HOUR24_SHIFT) # define DS323X_ALARM1_HOUR12_BCDMASK (DS323X_ALARM1_HOUR_MASK | DS323X_ALARM1_10HOUR12_MASK) # define DS323X_ALARM1_HOUR24_BCDMASK (DS323X_ALARM1_HOUR_MASK | DS323X_ALARM1_10HOUR24_MASK) # define DS323X_ALARM1_AMPM_SHIFT 5 /* Bit 5: AM/PM Indication */ # define DS323X_ALARM1_AMPM_MASK (1 << DS323X_ALARM1_AMPM_SHIFT) # define DS323X_ALARM1_AM ((uint8_t)(0) << DS323X_ALARM1_AMPM_SHIFT) # define DS323X_ALARM1_PM ((uint8_t)(1) << DS323X_ALARM1_AMPM_SHIFT) # define DS323X_ALARM1_1224_SHIFT 6 /* Bit 6: 12/24 Indication */ # define DS323X_ALARM1_1224_MASK (1 << DS323X_ALARM1_1224_SHIFT) # define DS323X_ALARM1_12 ((uint8_t)(0) << DS323X_ALARM1_1224_SHIFT) # define DS323X_ALARM1_24 ((uint8_t)(1) << DS323X_ALARM1_1224_SHIFT) # define DS323X_ALARM1_A1M3_SHIFT 7 /* Bits 7: A1M3 mask */ # define DS323X_ALARM1_A1M3_MASK (1 << DS323X_ALARM1_A1M3_SHIFT) # define DS323X_ALARM1_A1M3(n) ((uint8_t)(n) << DS323X_ALARM1_A1M3_SHIFT) # define DS323X_ALARM1_DAYDATER 0x0a /* Alarm1 date / day of the week register */ # define DS323X_ALARM1_DAY_SHIFT 0 /* Bits 0-3: Day of the week, range 1-7 */ # define DS323X_ALARM1_DAY_MASK (7 << DS323X_ALARM1_DAY_SHIFT) # define DS323X_ALARM1_DAY(n) ((uint8_t)(n) << DS323X_ALARM1_DAY_SHIFT) # define DS323X_ALARM1_DATE_SHIFT 0 /* Bits 0-3: Days, range 0-9 */ # define DS323X_ALARM1_DATE_MASK (15 << DS323X_ALARM1_DATE_SHIFT) # define DS323X_ALARM1_DATE(n) ((uint8_t)(n) << DS323X_ALARM1_DATE_SHIFT) # define DS323X_ALARM1_10DATE_SHIFT 4 /* Bits 4-5: 10 days, range 0-5 */ # define DS323X_ALARM1_10DATE_MASK (3 << DS323X_ALARM1_10DATE_SHIFT) # define DS323X_ALARM1_10DATE(n) ((uint8_t)(n) << DS323X_ALARM1_10DATE_SHIFT) # define DS323X_ALARM1_DATE_BCDMASK (DS323X_ALARM1_DATE_MASK | DS323X_ALARM1_10DATE_MASK) # define DS323X_ALARM1_DYDT_SHIFT 6 /* Bits 6: DY/DT */ # define DS323X_ALARM1_DYDT_MASK (1 << DS323X_ALARM1_DYDT_SHIFT) # define DS323X_ALARM1_DYDT_DATE ((uint8_t)(0) << DS323X_ALARM1_DYDT_SHIFT) # define DS323X_ALARM1_DYDT_DAY ((uint8_t)(1) << DS323X_ALARM1_DYDT_SHIFT) # define DS323X_ALARM1_A1M4_SHIFT 7 /* Bits 7: A1M4 mask */ # define DS323X_ALARM1_A1M4_MASK (1 << DS323X_ALARM1_A1M4_SHIFT) # define DS323X_ALARM1_A1M4(n) ((uint8_t)(n) << DS323X_ALARM1_A1M4_SHIFT) # define DS323X_ALARM2_MINR 0x0b /* Alarm2 minutes register */ # define DS323X_ALARM2_MIN_SHIFT 0 /* Bits 0-3: Minutes, range 0-9 */ # define DS323X_ALARM2_MIN_MASK (15 << DS323X_ALARM2_MIN_SHIFT) # define DS323X_ALARM2_MIN(n) ((uint8_t)(n) << DS323X_ALARM2_MIN_SHIFT) # define DS323X_ALARM2_10MIN_SHIFT 4 /* Bits 4-6: 10 minutes, range 0-5 */ # define DS323X_ALARM2_10MIN_MASK (7 << DS323X_ALARM2_10MIN_SHIFT) # define DS323X_ALARM2_10MIN(n) ((uint8_t)(n) << DS323X_ALARM2_10MIN_SHIFT) # define DS323X_ALARM2_MIN_BCDMASK (DS323X_ALARM2_MIN_MASK | DS323X_ALARM2_10MIN_MASK) # define DS323X_ALARM2_A2M2_SHIFT 7 /* Bits 7: A2M2 mask */ # define DS323X_ALARM2_A2M2_MASK (1 << DS323X_ALARM2_A2M2_SHIFT) # define DS323X_ALARM2_A2M2(n) ((uint8_t)(n) << DS323X_ALARM2_A2M2_SHIFT) # define DS323X_ALARM2_HOURR 0x0c /* Alarm2 hours register */ # define DS323X_ALARM2_HOUR_SHIFT 0 /* Bits 0-3: Hours, range 0-9 */ # define DS323X_ALARM2_HOUR_MASK (15 << DS323X_ALARM2_HOUR_SHIFT) # define DS323X_ALARM2_HOUR(n) ((uint8_t)(n) << DS323X_ALARM2_HOUR_SHIFT) # define DS323X_ALARM2_10HOUR12_SHIFT 4 /* Bit 4: 10 hours, range 0-1 */ # define DS323X_ALARM2_10HOUR12_MASK (1 << DS323X_ALARM2_10HOUR12_SHIFT) # define DS323X_ALARM2_10HOUR12(n) ((uint8_t)(n) << DS323X_ALARM2_10HOUR12_SHIFT) # define DS323X_ALARM2_10HOUR24_SHIFT 4 /* Bits 4-5: 10 hours, range 0-2 */ # define DS323X_ALARM2_10HOUR24_MASK (3 << DS323X_ALARM2_10HOUR24_SHIFT) # define DS323X_ALARM2_10HOUR24(n) ((uint8_t)(n) << DS323X_ALARM2_10HOUR24_SHIFT) # define DS323X_ALARM2_HOUR12_BCDMASK (DS323X_ALARM2_HOUR_MASK | DS323X_ALARM2_10HOUR12_MASK) # define DS323X_ALARM2_HOUR24_BCDMASK (DS323X_ALARM2_HOUR_MASK | DS323X_ALARM2_10HOUR24_MASK) # define DS323X_ALARM2_AMPM_SHIFT 5 /* Bit 5: AM/PM Indication */ # define DS323X_ALARM2_AMPM_MASK (1 << DS323X_ALARM2_AMPM_SHIFT) # define DS323X_ALARM2_AM ((uint8_t)(0) << DS323X_ALARM2_AMPM_SHIFT) # define DS323X_ALARM2_PM ((uint8_t)(1) << DS323X_ALARM2_AMPM_SHIFT) # define DS323X_ALARM2_1224_SHIFT 6 /* Bit 6: 12/24 Indication */ # define DS323X_ALARM2_1224_MASK (1 << DS323X_ALARM2_1224_SHIFT) # define DS323X_ALARM2_12 ((uint8_t)(0) << DS323X_ALARM2_1224_SHIFT) # define DS323X_ALARM2_24 ((uint8_t)(1) << DS323X_ALARM2_1224_SHIFT) # define DS323X_ALARM2_A2M3_SHIFT 7 /* Bits 7: A2M3 mask */ # define DS323X_ALARM2_A2M3_MASK (1 << DS323X_ALARM2_A2M3_SHIFT) # define DS323X_ALARM2_A2M3(n) ((uint8_t)(n) << DS323X_ALARM2_A2M3_SHIFT) # define DS323X_ALARM2_DAYDATER 0x0d /* Alarm2 date / day of the week register */ # define DS323X_ALARM2_DAY_SHIFT 0 /* Bits 0-3: Day of the week, range 1-7 */ # define DS323X_ALARM2_DAY_MASK (7 << DS323X_ALARM2_DAY_SHIFT) # define DS323X_ALARM2_DAY(n) ((uint8_t)(n) << DS323X_ALARM2_DAY_SHIFT) # define DS323X_ALARM2_DATE_SHIFT 0 /* Bits 0-3: Days, range 0-9 */ # define DS323X_ALARM2_DATE_MASK (15 << DS323X_ALARM2_DATE_SHIFT) # define DS323X_ALARM2_DATE(n) ((uint8_t)(n) << DS323X_ALARM2_DATE_SHIFT) # define DS323X_ALARM2_10DATE_SHIFT 4 /* Bits 4-5: 10 days, range 0-5 */ # define DS323X_ALARM2_10DATE_MASK (3 << DS323X_ALARM2_10DATE_SHIFT) # define DS323X_ALARM2_10DATE(n) ((uint8_t)(n) << DS323X_ALARM2_10DATE_SHIFT) # define DS323X_ALARM2_DATE_BCDMASK (DS323X_ALARM2_DATE_MASK | DS323X_ALARM2_10DATE_MASK) # define DS323X_ALARM2_DYDT_SHIFT 6 /* Bits 6: DY/DT */ # define DS323X_ALARM2_DYDT_MASK (1 << DS323X_ALARM2_DYDT_SHIFT) # define DS323X_ALARM2_DYDT_DATE ((uint8_t)(0) << DS323X_ALARM2_DYDT_SHIFT) # define DS323X_ALARM2_DYDT_DAY ((uint8_t)(1) << DS323X_ALARM2_DYDT_SHIFT) # define DS323X_ALARM2_A2M4_SHIFT 7 /* Bits 7: A2M4 mask */ # define DS323X_ALARM2_A2M4_MASK (1 << DS323X_ALARM2_A2M4_SHIFT) # define DS323X_ALARM2_A2M4(n) ((uint8_t)(n) << DS3231_ALARM2_A2M4_SHIFT) # define DS323X_CR 0x0e /* Control register */ # define DS323X_CR_A1IE (1 << 0) /* Bit 0: Alarm 1 interrupt enable */ # define DS323X_CR_A2IE (1 << 1) /* Bit 1: Alarm 2 interrupt enable */ # define DS323X_CR_INTCN (1 << 2) /* Bit 2: Interrupt control */ # define DS323X_CR_RS_SHIFT (3) /* Bits 3-4: Rate selection */ # define DS323X_CR_RS_MASK (3 << DS323X_CR_RS_SHIFT) # define DS323X_CR_RS_1HZ (0 << DS323X_CR_RS_SHIFT) /* 1Hz */ # define DS323X_CR_RS_1KHZ (1 << DS323X_CR_RS_SHIFT) /* 1.024kHz */ # define DS323X_CR_RS_4KHZ (2 << DS323X_CR_RS_SHIFT) /* 4.096kHz */ # define DS323X_CR_RS_8KHZ (3 << DS323X_CR_RS_SHIFT) /* 8.192kHz */ # define DS323X_CR_CONV (1 << 5) /* Bit 5: Convert temperature */ # define DS323X_CR_BBSQW (1 << 6) /* Bit 6: Battery backed square wave enable */ # define DS323X_CR_EOSC (1 << 7) /* Bit 7: Enable oscillator */ # define DS323X_CSR 0x0f /* Control/status register */ # define DS323X_CSR_A1F (1 << 0) /* Bit 0: Alarm 1 flag */ # define DS323X_CSR_A2F (1 << 1) /* Bit 1: Alarm 2 flag */ # define DS323X_CSR_BSY (1 << 2) /* Bit 2: Busy */ # define DS323X_CSR_EN32kHz (1 << 3) /* Bit 3: Enable 32kHz output */ # if defined(CONFIG_RTC_DS3232) || defined(CONFIG_RTC_DS3234) # define DS323x_CSR_CRATE_SHIFT (4) /* Bits 4-5: Conversion rate */ # define DS323x_CSR_CRATE_MASK (3 << DS323x_CSR_CRATE_SHIFT) # define DS323x_CSR_CRATE_64SEC (0 << DS323x_CSR_CRATE_SHIFT) # define DS323x_CSR_CRATE_128SEC (1 << DS323x_CSR_CRATE_SHIFT) # define DS323x_CSR_CRATE_256SEC (2 << DS323x_CSR_CRATE_SHIFT) # define DS323x_CSR_CRATE_512SEC (3 << DS323x_CSR_CRATE_SHIFT) # define DS323x_CSR_BB32KHZ (1 << 6) /* Bit 6: Battery-Backed 32kHz Output */ # endif # define DS323X_CSR_OSF (1 << 7) /* Bit 7: Oscillator stop flag */ # define DS323X_AGINGR 0x10 /* Aging offset register (8-bit, 2's complement) */ # define DS323X_TMPMR 0x11 /* MSB of temp register (8-bit, 2's complement) */ # define DS323X_TMPLR 0x12 /* LSB of temp register (2-bits) */ # define DS323X_TMPLR_MASK 0xc0 /* Bits 6-7: LSB of temp register (2-bits) */ #endif /* CONFIG_RTC_DS3231 || CONFIG_RTC_DS3232 || CONFIG_RTC_DS3234 */ #ifdef CONFIG_RTC_DS3232 # define DS3232_SRAM_BASER 0x14 /* 0x14-0xff: SRAM */ #endif /* CONFIG_RTC_DS3232 */ #ifdef CONFIG_RTC_DS3234 # define DS3234_SRAM_ADDRR 0x98 /* SRAM address register */ # define DS3234_SRAM_DATAR 0x99 /* SRAM data register */ #endif /* CONFIG_RTC_DS3234 */ #endif /* __DRIVERS_TIMERS_DS3231_H */