/************************************************************************* * * Copyright Diality, Inc. 2019-2020. All Rights Reserved. * 181 Technology, Ste. 150 * Irvine, CA 92618 * * Project Denali * * @file CPLD.c * * @brief Monitor/Controller for the CPLD. * * @date 20-Sep-2019 * *************************************************************************/ #include "gio.h" #include "lin.h" #include "Common.h" #include "AlarmLamp.h" #include "Buttons.h" #include "WatchdogMgmt.h" #include "CPLD.h" // ********** private definitions ********** // GIO port A pin assignments for pins connected to CPLD #define GREEN_GIO_PORT_PIN 6U #define RED_GIO_PORT_PIN 7U // GIO port B pin assignments for pins connected to CPLD #define OFF_REQUEST_GIO_PORT_PIN 0U #define WD_PET_GIO_PORT_PIN 1U #define OFF_BUTTON_GIO_PORT_PIN 2U #define STOP_BUTTON_GIO_PORT_PIN 3U // LIN port pin assignments for pins connected to CPLD #define WD_EXP_LIN_PORT_MASK 2U // (Rx - re-purposed as input GPIO) #define YELLOW_LIN_PORT_MASK 4U // (Tx - re-purposed as output GPIO) // CPLD pin I/O macros #define GET_OFF() (PIN_SIGNAL_STATE_T)(gioGetBit(gioPORTB, OFF_BUTTON_GIO_PORT_PIN)) #define GET_STOP() (PIN_SIGNAL_STATE_T)(gioGetBit(gioPORTB, STOP_BUTTON_GIO_PORT_PIN)) #define GET_WD_EXP() (PIN_SIGNAL_STATE_T)(((linREG->PIO2 | WD_EXP_LIN_PORT_MASK) == 0 ? PIN_SIGNAL_LOW : PIN_SIGNAL_HIGH)) #define SET_WD_PET() gioSetBit( gioPORTB, WD_PET_GIO_PORT_PIN, PIN_SIGNAL_HIGH ) #define SET_OFF_REQ() gioSetBit( gioPORTB, OFF_REQUEST_GIO_PORT_PIN, PIN_SIGNAL_HIGH ) #define SET_GREEN() gioSetBit( gioPORTA, GREEN_GIO_PORT_PIN, PIN_SIGNAL_HIGH ) #define SET_RED() gioSetBit( gioPORTA, RED_GIO_PORT_PIN, PIN_SIGNAL_HIGH ) #define SET_YELLOW() linREG->PIO3 |= YELLOW_LIN_PORT_MASK #define CLR_WD_PET() gioSetBit( gioPORTB, WD_PET_GIO_PORT_PIN, PIN_SIGNAL_LOW ) #define CLR_OFF_REQ() gioSetBit( gioPORTB, OFF_REQUEST_GIO_PORT_PIN, PIN_SIGNAL_LOW ) #define CLR_GREEN() gioSetBit( gioPORTA, GREEN_GIO_PORT_PIN, PIN_SIGNAL_LOW ) #define CLR_RED() gioSetBit( gioPORTA, RED_GIO_PORT_PIN, PIN_SIGNAL_LOW ) #define CLR_YELLOW() linREG->PIO3 &= ~YELLOW_LIN_PORT_MASK /************************************************************************* * @brief initCPLD * The initCPLD function initializes the CPLD module. * @details * Inputs : none * Outputs : CPLD module signal outputs set to initial states. * @param none * @return none *************************************************************************/ void initCPLD( void ) { // initialize watchdog pet output low (inactive) CLR_WD_PET(); // initialize power off request output low (inactive) CLR_OFF_REQ(); // initialize alarm lamp color LED outputs low (off) CLR_GREEN(); CLR_RED(); CLR_YELLOW(); // initialize the associated s/w modules initAlarmLamp(); initButtons(); initWatchdogMgmt(); } /************************************************************************* * @brief setCPLDWatchdog * The setCPLDWatchdog function sets the watchdog pet signal to CPLD to \n * given level. * @details * Inputs : none * Outputs : watchdog pet signal set to given level. * @param level : LOW or HIGH * @return none *************************************************************************/ void setCPLDWatchdog( PIN_SIGNAL_STATE_T level ) { if ( level == PIN_SIGNAL_HIGH ) { SET_WD_PET(); } else { CLR_WD_PET(); } } /************************************************************************* * @brief getCPLDWatchdogExpired * The getCPLDWatchdogExpired function determines the current signal level \n * on the watchdog expired pin from the CPLD. * @details * Inputs : Signal from CPLD on watchdog expired pin. * Outputs : none * @param none * @return level : (LOW or HIGH) *************************************************************************/ PIN_SIGNAL_STATE_T getCPLDWatchdogExpired( void ) { PIN_SIGNAL_STATE_T level = GET_WD_EXP(); return level; } /************************************************************************* * @brief setCPLDLampGreen * The setCPLDLampGreen function sets the alarm lamp green signal to CPLD \n * to given level. * @details * Inputs : none * 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 setCPLDLampYellow * The setCPLDLampYellow function sets the alarm lamp yellow signal to CPLD \n * to given level. * @details * Inputs : none * Outputs : alarm lamp yellow signal set to given level. * @param level : LOW or HIGH * @return none *************************************************************************/ void setCPLDLampYellow( PIN_SIGNAL_STATE_T level ) { if ( level == PIN_SIGNAL_HIGH ) { SET_YELLOW(); } else { CLR_YELLOW(); } } /************************************************************************* * @brief setCPLDLampRed * The setCPLDLampRed function sets the alarm lamp red signal to CPLD \n * to given level. * @details * Inputs : none * 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(); } } /************************************************************************* * @brief setCPLDOffRequest * The setCPLDOffRequest function sets the off request signal to CPLD to \n * given level. * @details * Inputs : none * Outputs : off request signal set to given level. * @param level : LOW or HIGH * @return none *************************************************************************/ void setCPLDOffRequest( PIN_SIGNAL_STATE_T level ) { if ( level == PIN_SIGNAL_HIGH ) { SET_OFF_REQ(); } else { CLR_OFF_REQ(); } } /************************************************************************* * @brief getCPLDOffButton * The getCPLDOffButton function determines the current signal level\n * on the off button pin from the CPLD. * @details * Inputs : Signal from CPLD on off button pin. * Outputs : none * @param none * @return level : (LOW or HIGH) *************************************************************************/ PIN_SIGNAL_STATE_T getCPLDOffButton( void ) { PIN_SIGNAL_STATE_T level = GET_OFF(); return level; } /************************************************************************* * @brief getCPLDStopButton * The getCPLDStopButton function determines the current signal level\n * on the stop button pin from the CPLD. * @details * Inputs : Signal from CPLD on off button pin. * Outputs : none * @param none * @return level : (LOW or HIGH) *************************************************************************/ PIN_SIGNAL_STATE_T getCPLDStopButton( void ) { PIN_SIGNAL_STATE_T level = GET_STOP(); return level; }