diff options
| author | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2019-10-07 10:10:38 +0300 |
|---|---|---|
| committer | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2019-10-07 10:10:38 +0300 |
| commit | 032b53897657f88e674d83ae06b76d0ac4d09abc (patch) | |
| tree | 29f3cf8ce2e10524b7787e140c01a6b651b8c0bc /Software/Embedded_SW | |
| parent | a009e4db12c49028bd7414bdbfd645dc6b7f52cd (diff) | |
| parent | 00489c9af7f6753601c1392c8b8141bcb79d4ea9 (diff) | |
| download | Tango-032b53897657f88e674d83ae06b76d0ac4d09abc.tar.gz Tango-032b53897657f88e674d83ae06b76d0ac4d09abc.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW')
10 files changed, 286 insertions, 34 deletions
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 4b0ca5af4..79866acb2 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 @@ -498,7 +498,7 @@ uint32_t DeActivateCoolerPump() //WHS - Pump the waste accumulated in cooler to uint32_t ActivateHeadMagnet() { Report("ActivateHeadMagnet - Close the lid magnet",__FILE__,__LINE__,(int)HARDWARE_MOTOR_TYPE__MOTO_RLOADARM,RpWarning,(int)DH_LID_OPEN,0); - Task_sleep(500); + //Task_sleep(500); F2_CTRL_Reg.ushort &= ~SPARE_SSR13_CTRL; F2_CTRL = F2_CTRL_Reg.ushort; if (isMotorConfigured(HARDWARE_MOTOR_TYPE__MOTO_RLOADARM)) diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c index 6b367f76f..2645af25b 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_SPI_Comm.c @@ -1123,11 +1123,12 @@ void FPGA_SetGoToPosition(TimerMotors_t _motorId)//GoTo if (MotorDriverRequest[_motorId].Position > 0x3FFFFF) //TODO to check if it is needed here MotorDriverRequest[_motorId].Position = 0x3FFFFF; - temp |= (MotorDriverRequest[_motorId].Position);; + temp |= (MotorDriverRequest[_motorId].Position); Fpga_Spi[_motorId].TX_MOSI = temp; //MillisecWriteToMotor(_motorId, temp, 4, NULL); - FPGA_SPI_Transnit(_motorId); + //FPGA_SPI_Transnit(_motorId); + MillisecWriteToMotor(_motorId, temp, 4, NULL); } diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c index 93c432f32..27063dab4 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/ADC_MUX/ADC_MUX.c @@ -4,7 +4,7 @@ * Created on: Aug 12, 2018 * Author: avi * - * 8-Channel, I2C, 12-Bit SAR ADC with Temperature Sensor AD7291 + * 8-Channel, I2C, 12-Bit SAR ADC with Temperature Sensor AD7291 (AD7291BCPZ) * Mid tank pressure sensor. Bosch 02612300215 */ #include <stdint.h> @@ -51,7 +51,7 @@ uint32_t I2C_ADC_Config(uint32_t I2C_Slave_Add,uint32_t channel ) return Status; } -const uint8_t SetRead = 0x01; +static const uint8_t SetRead = 0x01; uint32_t I2C_ADC_Set_For_Read_Ch(uint32_t I2C_Slave_Add ) { diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.c index e29fcc15d..c2e817656 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.c @@ -3,6 +3,8 @@ * * Created on: Sep 12, 2019 * Author: avi + * + * 8-Channel, I2C, 12-Bit SAR ADC with Temperature Sensor AD7291 (AD7291BCPZ) */ /* @@ -14,4 +16,213 @@ ADDR 0x50 */ +#include "include.h" +#include "Head_ADC.h" +#include "../I2C_Head_Mux.h" +#include <Drivers/I2C_Communication/I2C.h> + +static const uint8_t SetRead = 0x01; +static uint8_t I2C_Read_buf[2] = {0,0}; +static uint8_t I2C_Head_Config_Buf[3]; +uint32_t Head_ADC_Bits[HEAD_NUM_OF_ADC]; +double Head_ADC_Measuring[HEAD_NUM_OF_ADC]; + +uint32_t Head_I2C_ADC_Set_For_Read_Ch(uint32_t I2C_Slave_Add ) +{ + uint32_t Status = OK; + + Select_Main_Head_Mux_Channel(); + + Status = I2C_Write(I2C_ID_HEAD_CARD, I2C_Slave_Add, &SetRead, 1); + + return Status; +} + +uint32_t Head_I2C_ADC_Read_Ch(uint32_t I2C_Slave_Add ) +{ + uint32_t VsampleInBits = 0,temp; + + uint8_t No_BytesToRead = 2; + + Select_Main_Head_Mux_Channel(); + + I2C_Read(I2C_ID_HEAD_CARD, I2C_Slave_Add, I2C_Read_buf, No_BytesToRead ); + + temp = (I2C_Read_buf[0] << 8) | I2C_Read_buf[1]; + + VsampleInBits=temp & 0x0fff; + + return VsampleInBits; +} + +uint32_t I2C_Head_ADC_Config(uint32_t I2C_Slave_Add,uint32_t channel ) +{ + uint32_t Status = OK; + + I2C_Head_Config_Buf[0] = 0x00; + I2C_Head_Config_Buf[1] = channel; + I2C_Head_Config_Buf[2] = 0x80; + + Status = I2C_Write(I2C_ID_HEAD_CARD, I2C_Slave_Add, I2C_Head_Config_Buf, 3); + + return Status; +} + +double Read_Head_ADC(HEAD_ADC_t Head_ADC_ID) +{ + uint32_t Status = OK; + uint32_t I2C_Slave_Add; + uint32_t Channel; + uint32_t VsampleInBits; + + assert (Head_ADC_ID < HEAD_NUM_OF_ADC); + + switch(Head_ADC_ID) + { + //HEAD_ADC1_0x50: + case HEAD_CURRENT_ZONE_1: + I2C_Slave_Add = 0x50; + Channel = 0x00; + break; + case HEAD_CURRENT_ZONE_2: + I2C_Slave_Add = 0x50; + Channel = 0x01; + break; + case HEAD_CURRENT_ZONE_3: + I2C_Slave_Add = 0x50; + Channel = 0x02; + break; + case HEAD_CURRENT_ZONE_4: + I2C_Slave_Add = 0x50; + Channel = 0x03; + break; + case HEAD_CURRENT_ZONE_5: + I2C_Slave_Add = 0x50; + Channel = 0x04; + break; + case HEAD_CURRENT_ZONE_6: + I2C_Slave_Add = 0x50; + Channel = 0x05; + break; + case HEAD_CURRENT_ZONE_7: + I2C_Slave_Add = 0x50; + Channel = 0x06; + break; + case HEAD_CURRENT_ZONE_8: + I2C_Slave_Add = 0x50; + Channel = 0x07; + + //HEAD_ADC2_0x54: + case HEAD_CURRENT_ZONE_9: + I2C_Slave_Add = 0x54; + Channel = 0x01; + break; + case HEAD_CURRENT_ZONE_10: + I2C_Slave_Add = 0x54; + Channel = 0x02; + break; + case HEAD_CURRENT_ZONE_11: + I2C_Slave_Add = 0x54; + Channel = 0x03; + break; + case HEAD_CURRENT_ZONE_12: + I2C_Slave_Add = 0x54; + Channel = 0x04; + break; + case HEAD_CURRENT_HTIN_1: + I2C_Slave_Add = 0x54; + Channel = 0x05; + break; + case HEAD_CURRENT_HTIN_2: + I2C_Slave_Add = 0x54; + Channel = 0x06; + break; + case HEAD_CURRENT_HTIN_3: + I2C_Slave_Add = 0x54; + Channel = 0x07; + break; + case HEAD_CURRENT_HTIN_4: + I2C_Slave_Add = 0x54; + Channel = 0x01; + + //HEAD_ADC3_0x56: + case HEAD_CURRENT_HTOT_1: + I2C_Slave_Add = 0x56; + Channel = 0x02; + break; + case HEAD_CURRENT_HTOT_2: + I2C_Slave_Add = 0x56; + Channel = 0x03; + break; + case HEAD_CURRENT_HTOT_3: + I2C_Slave_Add = 0x56; + Channel = 0x04; + break; + case HEAD_CURRENT_HTOT_4: + I2C_Slave_Add = 0x56; + Channel = 0x04; + break; + case HEAD_CURRENT_MIXER: + I2C_Slave_Add = 0x56; + Channel = 0x05; + break; + case HEAD_CURRENT_HT_TOTAL: + I2C_Slave_Add = 0x56; + Channel = 0x06; + break; + case HEAD_CURRENT_VALUE: + I2C_Slave_Add = 0x56; + Channel = 0x07; + break; + case HEAD_CURRENT_24V: + I2C_Slave_Add = 0x56; + Channel = 0x08; + break; + default: + + break; + } + + Status = I2C_Head_ADC_Config(I2C_Slave_Add, Channel); + SysCtlDelay(1); + Status |= Head_I2C_ADC_Set_For_Read_Ch(I2C_Slave_Add); + SysCtlDelay(1); + VsampleInBits = Head_I2C_ADC_Read_Ch(I2C_Slave_Add); + + if (Status) + LOG_ERROR(Status, "Head ADC I2C actions failed"); + + Head_ADC_Bits[Head_ADC_ID] = VsampleInBits;//just for debug +/* + if(Head_ADC_ID <= HEAD_CURRENT_ZONE_12) + Head_ADC_Measuring[Head_ADC_ID] = Calc_Head_Current(VsampleInBits, Head_ADC_ID, 1.3, 2500, 4096 ); + else + if(Head_ADC_ID <= HEAD_CURRENT_HTOT_4) + Head_ADC_Measuring[Head_ADC_ID] = Calc_Head_Current(VsampleInBits, Head_ADC_ID, 2.1, 5000, 4096 ); + else + if(Head_ADC_ID == HEAD_CURRENT_MIXER) + Head_ADC_Measuring[Head_ADC_ID] = Calc_Head_Current(VsampleInBits, Head_ADC_ID, 1.7, 2500, 4096 ); + else + if(Head_ADC_ID == HEAD_CURRENT_MIXER) + Head_ADC_Measuring[Head_ADC_ID] = Calc_Head_Current(VsampleInBits, Head_ADC_ID, 2.35, 0, 4.9 ); ??? + else + if(Head_ADC_ID == HEAD_CURRENT_MIXER) + Head_ADC_Measuring[Head_ADC_ID] = Calc_Head_Current(VsampleInBits, Head_ADC_ID, 0.5, 2500, 4096 ); + else + if(Head_ADC_ID == HEAD_CURRENT_MIXER) + Head_ADC_Measuring[Head_ADC_ID] = Calc_Head_Current(VsampleInBits, Head_ADC_ID, 2.05, 27500, 4096 ); ??? +*/ + return Head_ADC_Measuring[Head_ADC_ID]; +} + +//------------------------------ +uint32_t Head_Test_ADC() +{ + uint32_t status = PASSED; + + Read_Head_ADC(0x50); + Read_Head_ADC(0x54); + Read_Head_ADC(0x56); + return status; +} diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h index 73c7c444b..ff925d94a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/ADC/Head_ADC.h @@ -8,9 +8,9 @@ #ifndef DRIVERS_I2C_COMMUNICATION_HEAD_CARD_ADC_HEAD_ADC_H_ #define DRIVERS_I2C_COMMUNICATION_HEAD_CARD_ADC_HEAD_ADC_H_ - -enum +typedef enum { + //----------------------------------------- HEAD_ADC1_0x50 //Maximum value: 1.3V, 1 LSB: 2500/4096 mA HEAD_CURRENT_ZONE_1, //0 HEAD_CURRENT_ZONE_2, //1 @@ -21,44 +21,41 @@ enum HEAD_CURRENT_ZONE_7, //6 HEAD_CURRENT_ZONE_8, //7 -}HEAD_ADC1_0x50; - -enum -{ + //----------------------------------------- HEAD_ADC2_0x54 //Maximum value: 1.3V, 1 LSB: 2500/4096 mA - HEAD_CURRENT_ZONE_9, //0 - HEAD_CURRENT_ZONE_10, //1 - HEAD_CURRENT_ZONE_11, //2 - HEAD_CURRENT_ZONE_12, //3 + HEAD_CURRENT_ZONE_9, //8 + HEAD_CURRENT_ZONE_10, //9 + HEAD_CURRENT_ZONE_11, //10 + HEAD_CURRENT_ZONE_12, //11 //Maximum value: 2.1V, 1 LSB: 5000/4096 mA - HEAD_CURRENT_HTIN_1, //4 - HEAD_CURRENT_HTIN_2, //5 - HEAD_CURRENT_HTIN_3, //6 - HEAD_CURRENT_HTIN_4, //7 + HEAD_CURRENT_HTIN_1, //12 + HEAD_CURRENT_HTIN_2, //13 + HEAD_CURRENT_HTIN_3, //14 + HEAD_CURRENT_HTIN_4, //15 -}HEAD_ADC2_0x54; - -enum -{ + //----------------------------------------- HEAD_ADC3_0x56 //Maximum value: 2.1V, 1 LSB: 5000/4096 mA - HEAD_CURRENT_HTOT_1, //0 - HEAD_CURRENT_HTOT_2, //1 - HEAD_CURRENT_HTOT_3, //2 - HEAD_CURRENT_HTOT_4, //3 + HEAD_CURRENT_HTOT_1, //16 + HEAD_CURRENT_HTOT_2, //17 + HEAD_CURRENT_HTOT_3, //18 + HEAD_CURRENT_HTOT_4, //19 //Maximum value: 1.7V, 1 LSB: 2500/4096 mA - HEAD_CURRENT_MIXER, //4 + HEAD_CURRENT_MIXER, //20 //Maximum value: 2.34V, 1 LSB: 4.9 mA - HEAD_CURRENT_HT_TOTAL,//5 + HEAD_CURRENT_HT_TOTAL,//21 //Maximum value: 0.5V, 1 LSB: 2500/4096 mA - HEAD_CURRENT_VALUE, //6 + HEAD_CURRENT_VALUE, //22 //Maximum value: (2.05 -2.3) V, 1 LSB: 27500/4096 mV - HEAD_CURRENT_24V //7 + HEAD_CURRENT_24V, //23 + + HEAD_NUM_OF_ADC //24 +}HEAD_ADC_t; -}HEAD_ADC3_0x56; +double Read_Head_ADC(HEAD_ADC_t Head_ADC_ID); #endif /* DRIVERS_I2C_COMMUNICATION_HEAD_CARD_ADC_HEAD_ADC_H_ */ diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Heaters/Head_Heaters.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Heaters/Head_Heaters.c index 7a6bb7d30..53b5f613f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Heaters/Head_Heaters.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Heaters/Head_Heaters.c @@ -5,6 +5,25 @@ * Author: avi */ +#include "include.h" +#include "../IO_Ports/Head_IO.h" +#include "../I2C_Head_Mux.h" +#include <Drivers/I2C_Communication/I2C.h> +#include "Head_Heaters.h" +uint32_t Activate_Head_Card_Heaters(Head_Heaters Head_Heater_ID)//12 Zones +{ + uint32_t status= OK; + Head_I2C_EXP1_0x40.ushort |= Head_Heater_ID; + status = Head_Write_IO_Reg(0x40); + return status; +} +uint32_t Deactivate_Head_Card_Heaters(Head_Heaters Head_Heater_ID)//12 Zones +{ + uint32_t status= OK; + Head_I2C_EXP1_0x40.ushort &= ~Head_Heater_ID; + status = Head_Write_IO_Reg(0x40); + return status; +} diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Heaters/Head_Heaters.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Heaters/Head_Heaters.h index 522824b0f..cffdd865d 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Heaters/Head_Heaters.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/Heaters/Head_Heaters.h @@ -9,7 +9,22 @@ #define DRIVERS_I2C_COMMUNICATION_HEAD_CARD_HEATERS_HEAD_HEATERS_H_ - +typedef enum +{ + //Don't change the value - keep it according to the bits in F3_GPO_02_bus + HEAD_HEATER_ZN1 = BIT0, + HEAD_HEATER_ZN2 = BIT1, + HEAD_HEATER_ZN3 = BIT2, + HEAD_HEATER_ZN4 = BIT3, + HEAD_HEATER_ZN5 = BIT4, + HEAD_HEATER_ZN6 = BIT5, + HEAD_HEATER_ZN7 = BIT6, + HEAD_HEATER_ZN8 = BIT7, + HEAD_HEATER_ZN9 = BIT8, + HEAD_HEATER_ZN10 = BIT9, + HEAD_HEATER_ZN11 = BIT10, + HEAD_HEATER_ZN12 = BIT11, +}Head_Heaters; #endif /* DRIVERS_I2C_COMMUNICATION_HEAD_CARD_HEATERS_HEAD_HEATERS_H_ */ diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c index c7e9a5e9e..96f564b7a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.c @@ -221,6 +221,8 @@ uint32_t Head_Read_IO_Reg(uint8_t TCA9555_ADDRESS) return status; } + + //------------------------------ uint8_t Head_Test_IO() { diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h index 21df04f9e..452f986ea 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/Head_Card/IO_Ports/Head_IO.h @@ -72,6 +72,7 @@ typedef union bool OUTPUT_ON_HTIN4 : 1; //p17 }bits; unsigned char uchar[2]; + unsigned short ushort; }HEAD_I2C_EXP1_0x40; //I2C expander @@ -98,6 +99,7 @@ typedef union bool OUTPUT_ACTLOW_HTOT_LATCH_RST : 1; //p17 Pull-Up }bits; unsigned char uchar[2]; + unsigned short ushort; }HEAD_I2C_EXP2_0x42; //I2C expander: Break Zones, Break HTIN @@ -152,6 +154,11 @@ typedef union unsigned char uchar[2]; }HEAD_I2C_EXP4_0x46; +extern HEAD_I2C_EXP1_0x40 Head_I2C_EXP1_0x40; +extern HEAD_I2C_EXP2_0x42 Head_I2C_EXP1_0x42; +extern HEAD_I2C_EXP3_0x44 Head_I2C_EXP1_0x44; +extern HEAD_I2C_EXP4_0x46 Head_I2C_EXP1_0x46; + uint32_t Head_IO_Init(); uint32_t Head_Write_IO_Reg(uint8_t TCA9555_ADDRESS); uint32_t Head_Read_IO_Reg(uint8_t TCA9555_ADDRESS); diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c index 1e4b1c0b3..aab2f3329 100644 --- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c +++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c @@ -66,7 +66,7 @@ uint32_t MotorJoggingRequestFunc(MessageContainer* requestContainer) } if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID) { - int Pos_Value = (direction == 1)?0:2; + uint32_t Pos_Value = ((direction == 1)?0:2); MotorGoTo(MotorId, Pos_Value ); } else |
