/************************************************************************** * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file CPLD.c * * @author (last) Quang Nguyen * @date (last) 25-Aug-2020 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 * ***************************************************************************/ #include "gio.h" #include "mibspi.h" #include "WatchdogMgmt.h" #include "CPLD.h" /** * @addtogroup CPLD * @{ */ // ********** private definitions ********** #define WD_PET_GIO_PORT_PIN 1U ///< Watchdog pet GPIO pin number. #define WD_EXP_GIO_PORT_PIN 2U ///< Watchdog expired GPIO pin number. #define LAMP_GRN_SPI5_PORT_MASK 0x00000200 ///< Lamp green GPIO port mask (CLK(100) - re-purposed as output GPIO). #define LAMP_BLU_SPI5_PORT_MASK 0x00010000 ///< Lamp blue GPIO port mask (SIMO[0](99) - re-purposed as output GPIO). #define LAMP_RED_SPI5_PORT_MASK 0x01000000 ///< Lamp red GPIO port mask (SOMI[0](98) - re-purposed as output GPIO). #define GET_WD_EXP() ( PIN_SIGNAL_STATE_T )( gioGetBit( gioPORTB, WD_EXP_GIO_PORT_PIN ) ) ///< Get watchdog expired pin state macro. #define TGL_WD_PET() gioToggleBit( gioPORTB, WD_PET_GIO_PORT_PIN ) ///< Toggle watchdog GPIO macro. #define SET_WD_PET() gioSetBit( gioPORTB, WD_PET_GIO_PORT_PIN, PIN_SIGNAL_HIGH ) ///< Set watchdog GPIO macro. #define CLR_WD_PET() gioSetBit( gioPORTB, WD_PET_GIO_PORT_PIN, PIN_SIGNAL_LOW ) ///< Clear watchdog GPIO macro. #define SET_GREEN() {mibspiREG5->PC3 |= LAMP_GRN_SPI5_PORT_MASK;} ///< Set alarm lamp green signal. #define CLR_GREEN() {mibspiREG5->PC3 &= ~LAMP_GRN_SPI5_PORT_MASK;} ///< Clear alarm lamp green signal. #define SET_BLUE() {mibspiREG5->PC3 |= LAMP_BLU_SPI5_PORT_MASK;} ///< Set alarm lamp blue signal. #define CLR_BLUE() {mibspiREG5->PC3 &= ~LAMP_BLU_SPI5_PORT_MASK;} ///< Clear alarm lamp blue signal. #define SET_RED() {mibspiREG5->PC3 |= LAMP_RED_SPI5_PORT_MASK;} ///< Set alarm lamp red signal. #define CLR_RED() {mibspiREG5->PC3 &= ~LAMP_RED_SPI5_PORT_MASK;} ///< Clear alarm lamp red signal. /*********************************************************************//** * @brief * The initCPLD function initializes the CPLD module. * @details Inputs: none * @details Outputs: CPLD module signal outputs set to initial states. * @return none *************************************************************************/ void initCPLD( void ) { // initialize watchdog pet output low (inactive) CLR_WD_PET(); // initialize alarm lamp color LED outputs low (off) CLR_GREEN(); CLR_RED(); CLR_BLUE(); } /*********************************************************************//** * @brief * The toggleCPLDWatchdog function toggles the watchdog pet signal to CPLD. * @details Inputs: none * @details Outputs: watchdog pet signal toggled. * @return none *************************************************************************/ void toggleCPLDWatchdog( void ) { TGL_WD_PET(); } /*********************************************************************//** * @brief * The getCPLDWatchdogExpired function determines the current signal level * on the watchdog expired pin from the CPLD. * @details Inputs: Signal from CPLD on watchdog expired pin. * @details Outputs: none * @return level (LOW or HIGH) *************************************************************************/ PIN_SIGNAL_STATE_T getCPLDWatchdogExpired( void ) { PIN_SIGNAL_STATE_T level = GET_WD_EXP(); return level; } /*********************************************************************//** * @brief * The setCPLDLampGreen function sets the alarm lamp green signal to CPLD to given level. * @details Inputs: none * @details Outputs: alarm lamp green signal set to given level. * @param level LOW or HIGH * @return none *************************************************************************/ void setCPLDLampGreen( PIN_SIGNAL_STATE_T level ) { if ( level == PIN_SIGNAL_HIGH ) { SET_GREEN(); } else { CLR_GREEN(); } } /*********************************************************************//** * @brief * The setCPLDLampBlue function sets the alarm lamp blue signal to CPLD to given level. * @details Inputs: none * @details Outputs: alarm lamp blue signal set to given level. * @param level LOW or HIGH * @return none *************************************************************************/ void setCPLDLampBlue( PIN_SIGNAL_STATE_T level ) { if ( level == PIN_SIGNAL_HIGH ) { SET_BLUE(); } else { CLR_BLUE(); } } /*********************************************************************//** * @brief * The setCPLDLampRed function sets the alarm lamp red signal to CPLD to given level. * @details Inputs: none * @details Outputs: alarm lamp red signal set to given level. * @param level LOW or HIGH * @return none *************************************************************************/ void setCPLDLampRed( PIN_SIGNAL_STATE_T level ) { if ( level == PIN_SIGNAL_HIGH ) { SET_RED(); } else { CLR_RED(); } } /**@}*/