1 /****************************************************************************** 2 * 3 * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by 4 * Analog Devices, Inc.), 5 * Copyright (C) 2023-2024 Analog Devices, Inc. 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 ******************************************************************************/ 20 21 #ifndef LIBRARIES_PERIPHDRIVERS_SOURCE_RTC_RTC_REVA_H_ 22 #define LIBRARIES_PERIPHDRIVERS_SOURCE_RTC_RTC_REVA_H_ 23 24 #include "gpio.h" 25 #include "mxc_delay.h" 26 #include "mxc_device.h" 27 #include "mxc_errors.h" 28 #include "mxc_sys.h" 29 #include "rtc_reva_regs.h" 30 #include "rtc.h" 31 #include "tmr.h" 32 33 typedef enum { 34 MXC_RTC_REVA_SQUARE_WAVE_DISABLED, ///< Sq. wave output disabled 35 MXC_RTC_REVA_SQUARE_WAVE_ENABLED, ///< Sq. wave output enabled 36 } mxc_rtc_reva_sqwave_en_t; 37 38 #define MXC_RTC_REVA_CTRL_RESET_DEFAULT (0x0000UL) 39 #define MXC_RTC_REVA_IS_BUSY (MXC_F_RTC_REVA_CTRL_BUSY & MXC_RTC->ctrl) 40 #define MXC_RTC_REVA_IS_ENABLED (MXC_F_RTC_REVA_CTRL_RTCE & MXC_RTC->ctrl) 41 42 #define MXC_RTC_REVA_TRIM_PERIODS 5 43 #define MXC_RTC_REVA_TICKS_PER_PERIOD (MXC_RTC_MAX_SSEC / MXC_RTC_REVA_TRIM_PERIODS) 44 #define PPM(ppm) ((ppm * 1000000) / 4096) 45 46 #define MXC_BUSY_TIMEOUT 1000 // Timeout counts for the Busy bit 47 48 int MXC_RTC_RevA_Init(mxc_rtc_reva_regs_t *rtc, uint32_t sec, uint32_t ssec); 49 int MXC_RTC_RevA_EnableInt(mxc_rtc_reva_regs_t *rtc, uint32_t mask); 50 int MXC_RTC_RevA_DisableInt(mxc_rtc_reva_regs_t *rtc, uint32_t mask); 51 int MXC_RTC_RevA_SetTimeofdayAlarm(mxc_rtc_reva_regs_t *rtc, uint32_t ras); 52 int MXC_RTC_RevA_SetSubsecondAlarm(mxc_rtc_reva_regs_t *rtc, uint32_t rssa); 53 int MXC_RTC_RevA_Start(mxc_rtc_reva_regs_t *rtc); 54 int MXC_RTC_RevA_Stop(mxc_rtc_reva_regs_t *rtc); 55 int MXC_RTC_RevA_SquareWave(mxc_rtc_reva_regs_t *rtc, mxc_rtc_reva_sqwave_en_t sqe, 56 mxc_rtc_freq_sel_t ft); 57 int MXC_RTC_RevA_Trim(mxc_rtc_reva_regs_t *rtc, int8_t trm); 58 int MXC_RTC_RevA_GetFlags(mxc_rtc_reva_regs_t *rtc); 59 int MXC_RTC_RevA_ClearFlags(mxc_rtc_reva_regs_t *rtc, int flags); 60 int MXC_RTC_RevA_GetSubSecond(mxc_rtc_reva_regs_t *rtc); 61 int MXC_RTC_RevA_GetSecond(mxc_rtc_reva_regs_t *rtc); 62 int MXC_RTC_RevA_GetSubSeconds(mxc_rtc_reva_regs_t *rtc, uint32_t *ssec); 63 int MXC_RTC_RevA_GetSeconds(mxc_rtc_reva_regs_t *rtc, uint32_t *sec); 64 int MXC_RTC_RevA_GetTime(mxc_rtc_reva_regs_t *rtc, uint32_t *sec, uint32_t *subsec); 65 int MXC_RTC_RevA_GetBusyFlag(mxc_rtc_reva_regs_t *rtc); 66 int MXC_RTC_RevA_TrimCrystal(mxc_rtc_reva_regs_t *rtc, mxc_tmr_regs_t *tmr); 67 68 #endif // LIBRARIES_PERIPHDRIVERS_SOURCE_RTC_RTC_REVA_H_ 69