From ad7e11910e34b683035feb89776b4ac6686df3c5 Mon Sep 17 00:00:00 2001 From: Avi Levkovich Date: Mon, 25 Mar 2019 11:21:08 +0200 Subject: use registers for SSR registers and add the function Is_FPGA_WD_Occurred() --- .../Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c | 73 ++++++++++++++++++---- .../Embedded_SW/Embedded/Drivers/Heater/Heater.c | 30 +++++++-- .../Embedded_SW/Embedded/Drivers/Valves/Valve.c | 11 +++- 3 files changed, 94 insertions(+), 20 deletions(-) (limited to 'Software/Embedded_SW') diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index bd716eea8..de196fdc2 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -18,10 +18,14 @@ FPGA_GPI FPGA_Gpi; +extern F2_CTRL_REG F2_CTRL_Reg; + bool FPGA_Gpi_Buf[MAX_GPI] = {0}; extern bool Machine_Idle_Mode; +extern F3_GPO_01_REG F3_GPO_01_Reg; + void Read_FPGA_GPI_Rgisters() { uint32_t i; @@ -427,21 +431,24 @@ bool FPGA_Read_limit_Switches(FPGA_GPI_ENUM Limit_Switch) uint32_t ActivateDilutorPump() { - F2_CTRL |= CHILLER_SSR9_CTRL; + F2_CTRL_Reg.ushort |= CHILLER_SSR9_CTRL; + F2_CTRL = F2_CTRL_Reg.ushort; return OK; } uint32_t DeActivateDilutorPump() { - F2_CTRL &= ~CHILLER_SSR9_CTRL; + F2_CTRL_Reg.ushort &= ~CHILLER_SSR9_CTRL; + F2_CTRL = F2_CTRL_Reg.ushort; return OK; } //---------------------------------- void Power_Off()//Power Down { - F2_CTRL |= PDOWN_RL1_CTRL; + F2_CTRL_Reg.ushort |= PDOWN_RL1_CTRL; + F2_CTRL = F2_CTRL_Reg.ushort; } void Power_Reset()// Resets the MCU @@ -455,41 +462,75 @@ void Power_Reset()// Resets the MCU uint32_t ActivateChiller() { - F2_CTRL |= SPARE_SSR12_CTRL; + F2_CTRL_Reg.ushort |= SPARE_SSR12_CTRL; + F2_CTRL = F2_CTRL_Reg.ushort; return OK; } uint32_t DeActivateChiller() { - F2_CTRL &= ~SPARE_SSR12_CTRL; + F2_CTRL_Reg.ushort &= ~SPARE_SSR12_CTRL; + F2_CTRL = F2_CTRL_Reg.ushort; return OK; } uint32_t ActivateHeadMagnet() { Task_sleep(500); - F2_CTRL &= ~SPARE_SSR13_CTRL; + F2_CTRL_Reg.ushort &= ~SPARE_SSR13_CTRL; + F2_CTRL = F2_CTRL_Reg.ushort; + return OK; } uint32_t DeActivateHeadMagnet() { - F2_CTRL |= SPARE_SSR13_CTRL; + F2_CTRL_Reg.ushort |= SPARE_SSR13_CTRL; + F2_CTRL = F2_CTRL_Reg.ushort; Task_sleep(500); return OK; } uint32_t ReadHeadMagnetBit() { - return (F2_CTRL & BIT0); + return (F2_CTRL & BIT0);//SSR13 is not in the WD therefore it it possible to read the bit } uint32_t DeActivateAllSSR() { - F2_CTRL = 0; + F2_CTRL_Reg.ushort = 0; + F2_CTRL = F2_CTRL_Reg.ushort; return OK; } +bool Is_FPGA_WD_Occurred() +{ + if( (F1_Moto_Driver_NSTBYRST1 != 0xFFFF) || + (F1_Moto_Driver_NSTBYRST2 != 0xFFFF) || + (F2_Moto_Driver_NSTBYRST1 != 0xFFFF) || + (F3_Moto_Driver_NSTBYRST1 != 0xFFFF) ) + { + /* + To recover: + //1. Disable all FPGA's WD: + Control_WD(DISABLE,0); + //2. Enqable all FPGA's WD: + Control_WD(ENABLE,250); + //3. Call FPGA_SetMotorsInit: + FPGA_SetMotorsInit(); + //4. Init Motor's Drivers: + + //OR + + //Reset MCU (will reset also the FPGA): + Power_Reset(); + */ + return true; + } + else + return false; + +} uint32_t Control_WD(bool IsEnable, unsigned char SetTimer_Steps100mSec) // Control_WD(ENABLE, 30);//Enable the watchdog for 3 seconds /* @@ -501,6 +542,8 @@ uint32_t Control_WD(bool IsEnable, unsigned char SetTimer_Steps100mSec) // Contr * the control register will take the value it had before to be resetted. */ { + uint32_t status = OK; + #ifndef EVALUATION_BOARD short WD_Enable = 0x4000 | SetTimer_Steps100mSec; @@ -513,12 +556,14 @@ uint32_t Control_WD(bool IsEnable, unsigned char SetTimer_Steps100mSec) // Contr } else { + status |= Is_FPGA_WD_Occurred(); + F1_Watchdog_reg = WD_Enable; // Enable the watchdog F3_GPO_01_bus BIT4 DYEINGH_SSR11_CTRL HeadHeaterZ6 F2_Watchdog_reg = WD_Enable; // Enable the watchdog F2_CTRL + reset dispensers motor drivers F3_Watchdog_reg = WD_Enable; // Enable the watchdog F1_gpo_01 BIT2 DYEINGH_SSR10_CTRL HeadHeaterZ5 } #endif - return OK; + return status; } uint32_t ReadBreakSensor() @@ -689,16 +734,20 @@ uint8_t Buzzer(OPERATION_MODE Buzzer_Mode) switch(Buzzer_Mode) { case MODE_ON: - F3_GPO_01_bus |= BIT5; + //F3_GPO_01_bus |= BIT5; + F3_GPO_01_Reg.bits.F3_GPO_BUZZER = ON; break; case MODE_OFF: - F3_GPO_01_bus &= ~BIT5; + //F3_GPO_01_bus &= ~BIT5; + F3_GPO_01_Reg.bits.F3_GPO_BUZZER = OFF; break; default: Status = ERROR; break; } + F3_GPO_01_bus = F3_GPO_01_Reg.ushort; + return Status; } diff --git a/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.c b/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.c index 0c44ef71e..14c548f2a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.c +++ b/Software/Embedded_SW/Embedded/Drivers/Heater/Heater.c @@ -38,6 +38,10 @@ typedef struct uint32_t HeaterActive = 0; +extern F2_CTRL_REG F2_CTRL_Reg; +extern F1_GPO_REG F1_GPO_Reg; +extern F3_GPO_01_REG F3_GPO_01_Reg; + static GPIOIntPortMap portMap[MAX_HEATERS_NUM] = { {DRYER_SSR3_CTRL, false}, // HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature **** Not connected **** @@ -67,15 +71,23 @@ uint32_t ActivateHeater (int HeaterId) #ifndef EVALUATION_BOARD if(HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5) { - F1_gpo_01 |= portMap[HeaterId].m_pin; + //F1_gpo_01 |= portMap[HeaterId].m_pin; + F1_GPO_Reg.ushort |= portMap[HeaterId].m_pin; + F1_gpo_01 = F1_GPO_Reg.ushort; + } else if(HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6) { - F3_GPO_01_bus |= portMap[HeaterId].m_pin; + //F3_GPO_01_bus |= portMap[HeaterId].m_pin; + F3_GPO_01_Reg.ushort |= portMap[HeaterId].m_pin; + F3_GPO_01_bus = F3_GPO_01_Reg.ushort; + } else { - F2_CTRL |= portMap[HeaterId].m_pin; + //F2_CTRL |= portMap[HeaterId].m_pin; + F2_CTRL_Reg.ushort |= portMap[HeaterId].m_pin; + F2_CTRL = F2_CTRL_Reg.ushort; } #endif //--------------------------------------------------------------------------------------- @@ -114,15 +126,21 @@ uint32_t DeActivateHeater (int HeaterId) #ifndef EVALUATION_BOARD if(HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ5) { - F1_gpo_01 &= ~portMap[HeaterId].m_pin; + //F1_gpo_01 &= ~portMap[HeaterId].m_pin; + F1_GPO_Reg.ushort&= ~portMap[HeaterId].m_pin; + F1_gpo_01 = F1_GPO_Reg.ushort; } else if(HeaterId == HARDWARE_PID_CONTROL_TYPE__HeadHeaterZ6) { - F3_GPO_01_bus &= ~portMap[HeaterId].m_pin; + //F3_GPO_01_bus &= ~portMap[HeaterId].m_pin; + F3_GPO_01_Reg.ushort &= ~portMap[HeaterId].m_pin; + F3_GPO_01_bus = F3_GPO_01_Reg.ushort; } else { - F2_CTRL &= ~portMap[HeaterId].m_pin; + //F2_CTRL &= ~portMap[HeaterId].m_pin; + F2_CTRL_Reg.ushort &= ~portMap[HeaterId].m_pin; + F2_CTRL = F2_CTRL_Reg.ushort; } #endif //--------------------------------------------------------------------------------------- diff --git a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c index 4e653f98e..c546dc30a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c +++ b/Software/Embedded_SW/Embedded/Drivers/Valves/Valve.c @@ -24,6 +24,8 @@ VALVE_GPO_REG Valve_GPO_Reg; extern F1_GPO_REG F1_GPO_Reg; DISPENSER_VALVE_GPO_REG Dispenser_Valve_GPO_Reg; +extern F3_GPO_01_REG F3_GPO_01_Reg; + Valves_t IDS_Id_to_AirValve[MAX_IDS_UNITS] = {VALVE_2W_MID_AIR_1,VALVE_2W_MID_AIR_2,VALVE_2W_MID_AIR_3,VALVE_2W_MID_AIR_4,VALVE_2W_MID_AIR_5,VALVE_2W_MID_AIR_6,VALVE_2W_MID_AIR_7,VALVE_2W_MID_AIR_8}; Valves_t IDS_Id_to_CartrideValve[MAX_IDS_UNITS] = {VALVE_2W_CART_MID_1,VALVE_2W_CART_MID_2,VALVE_2W_CART_MID_3,VALVE_2W_CART_MID_4,VALVE_2W_CART_MID_5,VALVE_2W_CART_MID_6,VALVE_2W_CART_MID_7,VALVE_2W_CART_MID_8}; @@ -385,13 +387,18 @@ uint8_t Lubricant_2Way_Valve(bool Direction) if(Direction == OPEN) { - F3_GPO_01_bus |= BIT0; + //F3_GPO_01_bus |= BIT0; + F3_GPO_01_Reg.bits.F3_LUBRICANT_VALVE = OPEN; } else //Direction = CLOSE { - F3_GPO_01_bus &= ~(BIT0); + //F3_GPO_01_bus &= ~(BIT0); + F3_GPO_01_Reg.bits.F3_LUBRICANT_VALVE = CLOSE; } + + F3_GPO_01_bus = F3_GPO_01_Reg.ushort; + return Status; } -- cgit v1.3.1