Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of QM_BAE_review_1 by
Diff: main.cpp
- Revision:
- 20:949d13045431
- Parent:
- 19:79e69017c855
- Child:
- 21:81c888bb6125
- Child:
- 22:950dbe9fbeb8
diff -r 79e69017c855 -r 949d13045431 main.cpp
--- a/main.cpp Sat Jun 04 11:29:13 2016 +0000
+++ b/main.cpp Fri Jul 01 17:55:30 2016 +0000
@@ -9,15 +9,92 @@
#define tc_len 11
#define batt_heat_low 20
+DigitalOut time_wdog(PIN68);// for determining the time between code
+
//**********************************************GLOBAL RTOS TIMER*********************************************************//
RtosTimer *BAE_STANDBY_STATUS_TIMER;
+
+//bcn heater rtostimers=============================================================================
+RtosTimer *HTR_OFF=NULL;
+RtosTimer *HTR_CYCLE=NULL;
+RtosTimer *HTR_DLY=NULL;
+
+extern DigitalOut EN_BTRY_HT;
+
+uint8_t HTR_CYCLE_COUNTS=0; //Count of heater cycles
+uint8_t HTR_CYCLE_START_DLY=0; //EPS_HTR_DLY_TIMER timer duration in minutes
+uint8_t HTR_ON_DURATION=0; //EPS_HTR_OFF timer duration in minutes
+uint16_t HTR_CYCLE_PERIOD =0; //EPS_HTR_CYCLE timer duration - MSB minutes, LSB seconds
+uint8_t HTR_CYCLE_COUNTER = 0 ;
+
+uint32_t HTR_CYCLE_PERIOD_DECODER() //To convert HTR_CYCLE_PERIOD to millisecs
+{
+ uint8_t PERIOD_mins, PERIOD_secs;
+ //pc.printf("\n\r FCTN_HTR_CYCLE_PERIOD");
+ PERIOD_secs = HTR_CYCLE_PERIOD;
+ PERIOD_mins = HTR_CYCLE_PERIOD >> 8;
+ uint32_t period = 1000*((int)PERIOD_mins * 60 + (int)PERIOD_secs);
+
+ return period;
+}
+
+void FCTN_EPS_HTR_CYCLE(void const *arg)
+{
+ EN_BTRY_HT = 1;//assuming its active high check
+ //pc.printf("\n\r on kar diya");
+ //pc.printf("\n\r FCTN_EPS_HTR_CYCLE");
+ //tim.reset();
+ //tim.start();
+ //HTR_OFF->start(((uint32_t)HTR_ON_DURATION)*1000);
+ HTR_OFF->start((int)HTR_ON_DURATION*60*1000);
+}
+
+void FCTN_EPS_HTR_DLY(void const* arg)
+{
+ EN_BTRY_HT = 1;
+ HTR_CYCLE_COUNTER = 0;
+ HTR_OFF->start(((int)HTR_ON_DURATION*60*1000));
+ //pc.printf("\n\r on kar diya");
+ //pc.printf("\n\r FCTN_EPS_HTR_DLY");
+ //tim.start();
+ HTR_CYCLE->start((uint32_t)HTR_CYCLE_PERIOD_DECODER);
+}
+
+void FCTN_EPS_HTR_OFF(void const *arg)
+{
+ EN_BTRY_HT = 0;
+ //tim.stop();
+ //pc.printf("\n\r off kar diya");
+ //pc.printf("\n\r the timer value is %f",tim.read());
+ //tim.reset();
+ if(HTR_CYCLE_COUNTS != 0xFF)
+ {
+ HTR_CYCLE_COUNTER++;
+ if( HTR_CYCLE_COUNTER == (int)HTR_CYCLE_COUNTS)//HTR_CYCLE_COUNTS )
+ HTR_CYCLE->stop();
+ }
+}
+
+//====================================================================================================
+
+//fctn to pass the data to bcn long type
+uint8_t CDMS_HK_data[134];
+void FCTN_CDMS_HK_TC(uint8_t tc[])
+{
+ for(int i=0;i<134;i++)
+ CDMS_HK_data[i] = tc[i];
+}
+
+uint8_t BAE_STANDBY=0x00;// as Bcn Acs Eps last three bits BAE order , 1 refer to switch off.
+
void BAE_STANDBY_STATUS_RESET(const void* arg)
{
printf("\n\rBAE standby reset to 0x00");
BAE_STANDBY=0x00;
}
+
/*no problem in first stopping and then starting even when for the first time*/
void BAE_STANDBY_TIMER_RESET()
{
@@ -25,101 +102,183 @@
BAE_STANDBY_STATUS_TIMER->start(30000);//20 min ie 20*60=1200 sec or 1200,000 milisec but for testing setting it to 30sec
}
-//***************************************************** flags *************************************************************//
+extern void gen_I_TM();
+
+//*************** FLAGS ****************************//
uint32_t BAE_STATUS = 0x00000000;
uint32_t BAE_ENABLE = 0xFFFFFFFF;
//i2c//
char data_send_flag = 'h';
+//uint8_t BAE_MNG_I2C_STATUS = 0;
-//.........bae......................................//
+//BAE
uint8_t BAE_INIT_STATUS=0;
-uint8_t BAE_I2CRX_STATUS=0;
+uint8_t BAE_MNG_I2C_STATUS=0;
-//.........acs......................................//
-/* removed character initialized values */
+//ACS
uint8_t ACS_INIT_STATUS = 0;
uint8_t ACS_DATA_ACQ_STATUS = 0;
-uint8_t ACS_ATS_STATUS = 0;
+uint8_t ACS_ATS_STATUS = 0x73;
uint8_t ACS_MAIN_STATUS = 0;
uint8_t ACS_STATUS = 0;
-
+uint8_t ACS_DETUMBLING_ALGO_TYPE = 0;
uint8_t ACS_ATS_ENABLE = 1;
uint8_t ACS_DATA_ACQ_ENABLE = 1;
-uint8_t ACS_STATE = 4;
-
-//_______________________bcn__________________________//
+uint8_t ACS_STATE = 7;
-/*added for removing the stuck/hang problem*/
-/*does it work? now doing it in main*/
-//it works great
+extern uint16_t ACS_MM_X_COMSN;
+extern uint16_t ACS_MM_Y_COMSN;
+extern uint16_t ACS_MG_X_COMSN;
+extern uint16_t ACS_MG_Y_COMSN;
+extern uint16_t ACS_MM_Z_COMSN;
+extern uint16_t ACS_MG_Z_COMSN;
+
+//BCN
extern uint8_t BCN_FEN;
extern void FCTN_BCN_FEN(void const *args);
+extern void LONG_BCN_DATA(uint8_t* );
+extern uint16_t gencrc16_for_me();//for calculating the crc of baehk data before sendingkk as including crc causes problem
+extern DigitalOut EN_BTRY_HT;
+
+
Timeout timeout_bcn;
/*long beacon data/sending*/
/*be sure it is created in bcn.cpp*/
-extern void LONG_BCN_DATA(uint8_t* );
-//.....................eps...................//
-/* removed character initialization*/
-//eps init
+//EPS
uint8_t EPS_INIT_STATUS = 0;
uint8_t EPS_BATTERY_GAUGE_STATUS = 0;
-//eps main
uint8_t EPS_MAIN_STATUS = 0;
uint8_t EPS_BATTERY_TEMP_STATUS = 0;
uint8_t EPS_STATUS = 7; //invalid status
-uint8_t EPS_BATTERY_HEAT_ENABLE = 0;
+uint8_t EPS_BTRY_HTR_AUTO = 1;
+extern uint8_t EPS_SOC_LEVEL_12;
+extern uint8_t EPS_SOC_LEVEL_23;
+extern uint8_t EPS_BAT_TEMP_LOW;
+extern uint8_t EPS_BAT_TEMP_HIGH;
+extern uint8_t EPS_BAT_TEMP_DEFAULT;
+
+
+//**********************GLOBAL DECLARATIONS********************************//
+
+//CDMS
+//eps cdms fault
+uint8_t CDMS_SW_STATUS;
+DigitalOut CDMS_OC_FAULT(PIN79);
+bool CDMS_SW_ENABLE;
+int CDMS_FAULT_COUNTER = 0;
+
+
+//BAE new hk structure- everything has to changed based on this
+char BAE_chardata[74];
+uint8_t BAE_HK_data[134];
+uint8_t BAE_RESET_COUNTER;// INITIALIZATION or do you want to initialize evertime the main is reset? or is it same
+uint16_t BAE_I2C_COUNTER = 0;//change/apply
+//uint8_t BAE_STANDBY=0x00;// as Bcn Acs Eps last three bits BAE order , 1 refer to switch off.
+
+//BCN
+//uint16_t BCN_TX_MAIN_COUNTER = 0;
+uint8_t BCN_LONG_MSG_TYPE = 1;
-//.......................global variables..................................................................// new hk structure- everything has to changed based on this
-uint8_t BAE_data[74];
-char BAE_chardata[74];
-uint8_t BAE_RESET_COUNTER = 0; // INITIALIZATION or do you want to initialize evertime the main is reset? or is it same
-uint32_t BAE_I2C_COUNTER = 0;
-uint8_t BAE_STANDBY=0x00;// as Bcn Acs Eps last three bits BAE order , 1 refer to switch off.
+DigitalOut BCN_TX_OC_FAULT(PIN80);
+int BCN_TX_FAULT_COUNTER;
+
+//ACS
+uint16_t ACS_MAIN_COUNTER = 0;
+
+//eps hw faults
+//uint8_t ACS_TR_Z_SW_STATUS;
+DigitalOut ACS_TR_Z_ENABLE(PIN40);
+DigitalOut ACS_TR_Z_OC_FAULT(PIN91);
+DigitalOut ACS_TR_Z_FAULT(PIN89); //Driver IC fault
+int ACS_TR_Z_FAULT_COUNTER = 0;
-//*************************************Global declarations************************************************//
+//uint8_t ACS_TR_XY_SW_STATUS;
+DigitalOut ACS_TR_XY_ENABLE(PIN71);
+DigitalOut ACS_TR_XY_OC_FAULT(PIN72);
+DigitalOut ACS_TR_XY_FAULT(PIN83); //Driver IC fault
+int ACS_TR_XY_FAULT_COUNTER = 0;
+
+//bool ACS_ATS1_ENABLE;
+DigitalOut ACS_ATS1_OC_FAULT(PIN97);
+int ACS_ATS1_FAULT_COUNTER = 0;
+
+//bool ACS_ATS2_ENABLE;
+DigitalOut ACS_ATS2_OC_FAULT(PIN5);
+int ACS_ATS2_FAULT_COUNTER;
+
+//EPS
+int EPS_MAIN_COUNTER = 0;
+
+
+//GEN DEC FOR TESTING or to be DECIDED whre to ASSIGN HERE
const int addr = 0x20; //slave address
-
Timer t_rfsilence;
Timer t_start;
/*defined as of now to check execution time*/
/*remember to remove them*/
Timer t_acs;
Timer t_eps;
-
-Timer t_tc;
+//Timer t_tc;
Timer t_tm;
Serial pc(USBTX, USBRX);
int power_flag_dummy=2;
float data[6];
-extern float moment[3];
-extern uint8_t BCN_FEN;
+
+//*************EXTERN PARA********
+
+//BAE
+
extern BAE_HK_actual actual_data;
extern BAE_HK_quant quant_data;
extern BAE_HK_min_max bae_HK_minmax;
extern BAE_HK_arch arch_data;
+
+//BCN
+extern uint8_t BCN_FEN;
+extern uint8_t BCN_TX_SW_STATUS;
+extern uint8_t BCN_SPND_TX;
+
+
+//TCTM
+extern uint8_t telemetry[135];
+
+
+//ACS
+extern uint8_t ACS_TR_Z_SW_STATUS;
+extern uint8_t ACS_TR_XY_SW_STATUS;
+extern float gyro_data[3];
+extern float mag_data[3];
+extern float moment[3];
+extern float b_old[3]; // Unit: Tesla
+extern float db[3];
+extern uint8_t flag_firsttime;
+extern uint8_t ACS_MAG_TIME_DELAY;
+extern uint8_t ACS_DEMAG_TIME_DELAY;
+extern uint16_t ACS_Z_FIXED_MOMENT;
+
int write_ack = 1;
int read_ack = 1;
char telecommand[tc_len];
-extern uint8_t telemetry[135];
+
bool pf1check = 0;
bool pf2check = 0;
bool if1check = 0;
bool if2check = 0;
-//*****************************************************Assigning pins******************************************************//
+//ASSIGNING PINS//
DigitalOut ATS1_SW_ENABLE(PTC0); // enable of att sens2 switch
DigitalOut ATS2_SW_ENABLE(PTC16); // enable of att sens switch
InterruptIn irpt_4m_mstr(PIN38); //I2c interrupt from CDMS
DigitalOut irpt_2_mstr(PIN4); //I2C interrupt to CDMS
I2CSlave slave (PIN1,PIN2);///pin1 pin2
-DigitalOut batt_heat(PIN96);
+//DigitalOut batt_heat(PIN96);
//ATS1_SW_ENABLE = 0;
PwmOut PWM1(PIN93); //x //Functions used to generate PWM signal
@@ -132,16 +291,6 @@
DigitalIn pf2(PIN97);//Attitude Sensor 2 OC bar fault signal
DigitalIn pf3(PIN83);//Fault Bar for TRXY driver
-//Interrupt based faults
-//InterruptIn ir1(PIN73);//Battery Gauge - Alert Bar Signal
-InterruptIn ir2(PIN72);//TRXY Driver TR switch Fault
-InterruptIn ir3(PIN89);//TRZ Driver Fault Bar
-InterruptIn ir4(PIN91);//TRZ Driver TR switch Fault
-InterruptIn ir5(PIN79);//CDMS - Switch Fault
-InterruptIn ir6(PIN80);//Beacon- Switch OC bar
-InterruptIn ir7(PIN42);//Charger IC - Fault Bar
-
-
DigitalOut TRXY_SW(PIN71); //TR XY Switch
DigitalOut DRV_Z_EN(PIN88); //Sleep pin of driver z
DigitalOut TRZ_SW(PIN40); //TR Z Switch
@@ -150,6 +299,76 @@
DigitalOut DRV_XY_EN(PIN82);
+
+//================================================================================
+//default flash array some filler bits added (detail in MMS file)
+uint32_t ARR_INITIAL_VAL[8]={0x33574C00,0x505A4141,0x1A1A1400,0x00000000,0x00000000,0x00000000,0xCBA20000,0x00000000};//to be done
+
+void FLASH_INI()
+{
+ uint32_t read[8];
+ for(int i=0;i<8;i++)
+ {
+ read[i] = FCTN_BAE_RD_FLASH_ENTITY(i);
+ printf("\n\r val is read after starting %x ",read[i]);
+ }
+
+ if(read[0] == -1)
+ for(int j=0;j<8;j++)
+ {
+ FCTN_BAE_WR_FLASH(j,ARR_INITIAL_VAL[j]);
+ }
+ else
+ {
+ for(int j=0;j<8;j++)
+ {
+ read[j] = FCTN_BAE_RD_FLASH_ENTITY(j);
+ }
+ ACS_ATS_STATUS = read[0]>>24;
+ ACS_TR_XY_SW_STATUS = ((uint8_t)(read[0]>>22))&0x03;
+ ACS_TR_Z_SW_STATUS = (read[0]>>20)&0x03;
+ ACS_DETUMBLING_ALGO_TYPE = (read[0]>>19)&0x01;
+ ACS_STATE = (read[0]>>16)&0x07;
+ BCN_TX_SW_STATUS = ((uint8_t)(read[0]>>14))&0x03;
+ BCN_SPND_TX = ((uint8_t)(read[0]>>13))&0x01;
+ BCN_FEN = ((uint8_t)(read[0]>>12))&0x01;
+ BCN_LONG_MSG_TYPE = ((uint8_t)(read[0]>>11))&0x01;
+ EPS_BTRY_HTR_AUTO = ((uint8_t)(read[0]>>10))&0x03;//EPS_BATTERY_HEATER_ENABLE
+ //now two spares in telemetry[5]
+
+ //updating the reset counter
+ BAE_RESET_COUNTER = ((uint8_t)(read[0]))+1;
+ read[0]=(read[0]&0xffffff00) | (uint32_t)BAE_RESET_COUNTER;
+ FCTN_BAE_WR_FLASH(0,read[0]);
+
+
+ EPS_SOC_LEVEL_12 = (uint8_t)(read[1]>>24);
+ EPS_SOC_LEVEL_23 = (uint8_t)(read[1]>>16);
+ ACS_MAG_TIME_DELAY = (uint8_t)(read[1]>>8);
+ ACS_DEMAG_TIME_DELAY = (uint8_t)read[1];
+
+ EPS_BAT_TEMP_LOW = (uint8_t)(read[2]>>24);
+ EPS_BAT_TEMP_HIGH = (uint8_t)(read[2]>>16);
+ EPS_BAT_TEMP_DEFAULT = (uint8_t)(read[2]>>8);
+
+ ACS_MM_X_COMSN = (uint16_t)(read[3]>>16);
+ ACS_MM_Y_COMSN = (uint16_t)read[3];
+
+ ACS_MG_X_COMSN = (uint16_t)(read[4]>>16);
+ ACS_MG_Y_COMSN = (uint16_t)read[4];
+
+ ACS_MM_Z_COMSN = (uint16_t)(read[5]>>16);
+ ACS_MG_Z_COMSN = (uint16_t)read[5];
+
+ ACS_Z_FIXED_MOMENT = (uint16_t)(read[6]>>16);//assignvalues
+
+ }
+
+}
+//================================================================================
+
+
+
/*****************************************************************Threads USed***********************************************************************************/
Thread *ptr_t_i2c;
@@ -161,405 +380,457 @@
void F_EPS();
void F_BCN();
+//I2C
+uint32_t pdir_tc1,pdir_tc2,pdir_tm1,pdir_tm2,pdir_ss1,pdir_ss2;//variables used to verify i2c working
+uint16_t crc16_check;
+void I2C_busreset()
+{
+ PORTE->PCR[1] &= 0xfffffffb;
+ PORTE->PCR[0] &= 0xfffffffb;
+ I2C1->C1 &= 0x7f;
+ SIM->SCGC4 &= 0xffffff7f;
+ SIM->SCGC4 |= 0x00000080;
+ I2C1->C1 |= 0x80;
+ PORTE->PCR[1] |= 0x00000004;
+ PORTE->PCR[0] |= 0x00000004;
+ Thread::wait(1);
+}
+
//*******************************************ACS THREAD**************************************************//
uint8_t iterP1;
uint8_t iterP2;
uint8_t iterI1;
uint8_t iterI2;
-
+//FLOAT TO UINT_8 CONVERSION FUNCTION
+extern uint8_t float_to_uint8(float min,float max,float val);
+
+#define print 0
+
void F_ACS()
{
- t_acs.start();
- if(pf1check == 1)
- {
- if(iterP1 >= 3)
- {
- ATS1_SW_ENABLE = 1; // turn off ats1 permanently
- //FCTN_SWITCH_ATS(0); // switch on ATS2
- }
- else
- {
- ATS1_SW_ENABLE = 0;
- iterP1++;
- }
- pf1check = 0;
- }
- if(pf2check == 1)
- {
- if(iterP1 >= 3)
- {
- ATS2_SW_ENABLE = 1; // turn off ats2 permanently
- ACS_DATA_ACQ_ENABLE = 0;
- ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
- }
- else
- {
- ATS2_SW_ENABLE = 0;
- iterP2++;
- }
- pf2check = 0;
- }
- if(if1check == 1)
- {
- if(iterI1 >= 3)
- {
- TRXY_SW = 0; // turn off TRXY permanently
- }
- else
- {
- TRXY_SW = 1; //switch on TRXY
- iterI1++;
- }
- }
- if(if2check == 1)
- {
- if(iterI2 >= 3)
- {
- TRZ_SW = 0; // turn off TRZ permanently
- ACS_STATE = 2 ; // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
- }
- else
- {
- TRZ_SW = 1; //switch on Z
- iterI2++;
- }
- }
+ ACS_MAIN_COUNTER++;
+ //time_wdog = 1;
+ pc.printf("Entered ACS.\n\r");
+
+ ACS_MAIN_STATUS = 1; //set ACS_MAIN_STATUS flag
+ FLAG();
- //float b1[3]={-23.376,-37.56,14.739}, omega1[3]={-1.52,2.746,0.7629}, moment1[3]= {1.0498,-1.0535,1.3246};
- //b1[3] = {22, 22,10};
- //omega1[3] = {2.1,3.0,1.5};
- // ATS1_SW_ENABLE = 0; // att sens2 switch is disabled
- // ATS2_SW_ENABLE = 0; // att sens switch is disabled
-
+ ACS_MAIN_COUNTER+=1;
-
- //Thread::signal_wait(0x1);
- ACS_MAIN_STATUS = 1; //set ACS_MAIN_STATUS flag
PWM1 = 0; //clear pwm pins
PWM2 = 0; //clear pwm pins
PWM3 = 0; //clear pwm pins
- pc.printf("\n\rEntered ACS %f\n",t_start.read());
+
+ wait_ms(ACS_DEMAG_TIME_DELAY);
+ ACS_DATA_ACQ_STATUS = (uint8_t) FCTN_ATS_DATA_ACQ();
- if(ACS_DATA_ACQ_ENABLE == 1)// check if ACS_DATA_ACQ_ENABLE = 1?
- {
- //FLAG();
- FCTN_ATS_DATA_ACQ(); //the angular velocity is stored in the first 3 values and magnetic field values in next 3
- pc.printf("gyro values\n\r"); //printing the angular velocity and magnetic field values
+ #if print
+ printing the angular speed and magnetic field values
+ pc.printf("gyro values\n\r");
for(int i=0; i<3; i++)
- {
- printf("%f\n\r",actual_data.AngularSpeed_actual[i]);
- }
+ {
+ printf("%f\n\r",actual_data.AngularSpeed_actual[i]);
+ }
+
pc.printf("mag values\n\r");
for(int i=0; i<3; i++)
+ {
+ pc.printf("%f\n\r",actual_data.Bvalue_actual[i]);
+ }
+ #endif
+
+ for(int i=0;i<3;i++)
{
- pc.printf("%f\n\r",actual_data.Bvalue_actual[i]);
+ mag_data[i] = actual_data.Bvalue_actual[i]/1000000;
+ gyro_data[i] = actual_data.AngularSpeed_actual[i]*3.14159/180;
+ }
+
+ if(ACS_STATE == 0) // check ACS_STATE = ACS_CONTROL_OFF?
+ {
+ #if print
+ printf("\n\r acs control off\n");
+ #endif
+ ACS_STATUS = 0; // set ACS_STATUS = ACS_CONTROL_OFF
+ ACS_MAIN_STATUS = 0;
+ return;
+ }
+ else if(actual_data.power_mode<=2)
+ {
+ #if print
+ printf("\n\r Low Power \n\r");
+ #endif
+ DRV_Z_EN = 0;
+ DRV_XY_EN = 0;
+ ACS_STATUS = 1; // set ACS_STATUS = ACS_LOW_POWER
+ ACS_MAIN_STATUS = 0;
+ return;
+
+ }
+ else if(ACS_TR_Z_SW_STATUS != 1)
+ {
+ DRV_Z_EN = 0;
+ DRV_XY_EN = 0;
+ ACS_STATUS = 2; // set ACS_STAUS = ACS_TRZ_DISABLED
+ ACS_MAIN_STATUS = 0;
+ return;
+ }
+ else if(ACS_TR_XY_SW_STATUS != 1)
+ {
+ DRV_Z_EN = 1;
+ DRV_XY_EN = 0;
+ ACS_STATUS = 3; // set ACS_STAUS = ACS_TRXY_DISABLED , Z axis only
+ moment[0] = 0;
+ moment[1] = 0;
+ moment[2] = ACS_Z_FIXED_MOMENT; // is a dummy value
+
+ FCTN_ACS_GENPWM_MAIN(moment) ;
+ ACS_MAIN_STATUS = 0;
+ return;
}
-// for(int i=0;i<3;i++)
-// {
-// omega1[i]= data[i];
-// b1[i] = data[i+3];
-// }
- }//if ACS_DATA_ACQ_ENABLE = 1
- else
- {
- // Z axis actuation is the only final solution,
- }
- if(ACS_STATE == 0) // check ACS_STATE = ACS_CONTROL_OFF?
- {
- printf("\n\r acs control off\n");
- FLAG();
- ACS_STATUS = 0; // set ACS_STATUS = ACS_CONTROL_OFF
- PWM1 = 0; //clear pwm pins
- PWM2 = 0; //clear pwm pins
- PWM3 = 0; //clear pwm pins
- }
- else
- {
- if(actual_data.power_mode>1)
+ else if((ACS_DATA_ACQ_STATUS == 0)||(ACS_DATA_ACQ_STATUS == 1))
+ {
+ DRV_Z_EN = 1;
+ DRV_XY_EN = 0;
+ ACS_STATUS = 3; // set Set ACS_STATUS = ACS_DATA_ACQN_FAILURE , Z axis only
+
+ moment[0] = 0;
+ moment[1] = 0;
+ moment[2] = ACS_Z_FIXED_MOMENT; // is a dummy value
+
+ FCTN_ACS_GENPWM_MAIN(moment) ;
+ ACS_MAIN_STATUS = 0;
+ return;
+ }
+ else if(ACS_STATE == 5)
+ {
+ DRV_Z_EN = 1;
+ DRV_XY_EN = 0;
+ ACS_STATUS = 3; // set ACS_STAUS = ACS_TRXY_DISABLED by ACS_STATE i.e Z axis only
- {
- if(ACS_STATE == 2) // check ACS_STATE = ACS_ZAXIS_MOMENT_ONLY
+ moment[0] = 0;
+ moment[1] = 0;
+ moment[2] = ACS_Z_FIXED_MOMENT; // 1.3 is a dummy value
+ FCTN_ACS_GENPWM_MAIN(moment) ;
+
+ ACS_MAIN_STATUS = 0;
+ return;
+ }
+ else if(ACS_DATA_ACQ_STATUS == 2) // MM only is available
+ {
+ DRV_Z_EN = 1;
+ DRV_XY_EN = 1;
+
+ ACS_STATUS = 4; // set Set ACS_STATUS = ACS_BDOT_CONTROL
+ ACS_DETUMBLING_ALGO_TYPE = 0x01;
+ FCTN_ACS_CNTRLALGO(moment,mag_data,gyro_data,0x00,0x01,ACS_DETUMBLING_ALGO_TYPE);
+ #if print
+ printf("\n\r Moment values returned by control algo \n");
+ #endif
+ for(int i=0; i<3; i++)
{
- FLAG();
- printf("\n\r z axis moment only\n");
- ACS_STATUS = 2; // set ACS_STATUS = ACS_ZAXIS_MOMENT_ONLY
- // FCTN_ACS_CNTRLALGO(b1, omega1);
- moment[0] = 0;
- moment[1] = 0;
- moment[2] =1.3;// is a dummy value
- FCTN_ACS_GENPWM_MAIN(moment) ; /*printf statements*/
+ printf("%f\t",moment[i]);
}
- else
+ FCTN_ACS_GENPWM_MAIN(moment) ;
+ ACS_MAIN_STATUS = 0;
+ return;
+ }
+ else if(ACS_STATE == 7) // Nominal mode
+ {
+ #if print
+ printf("\n\r Nominal mode \n");
+ #endif
+ DRV_Z_EN = 1;
+ DRV_XY_EN = 1;
+ FCTN_ACS_CNTRLALGO(moment,mag_data,gyro_data,0x01,0x00,ACS_DETUMBLING_ALGO_TYPE);
+ #if print
+ printf("\n\r Moment values returned by control algo \n");
+ #endif
+ for(int i=0; i<3; i++)
{
- if(ACS_STATE == 3) // check ACS_STATE = ACS_DATA_ACQ_FAILURE
- {
- FLAG();
- printf("\n\r acs data failure ");
- ACS_STATUS = 3; // set ACS_STATUS = ACS_DATA_ACQ_FAILURE
- PWM1 = 0; //clear pwm pins
- PWM2 = 0; //clear pwm pins
- PWM3 = 0; //clear pwm pins
- }
- else
+ printf("%f\t",moment[i]);
+ }
+ FCTN_ACS_GENPWM_MAIN(moment) ;
+ ACS_MAIN_STATUS = 0;
+ return;
+ }
+ else if(ACS_STATE == 8) // Auto Control
+ {
+ #if print
+ printf("\n\r Auto control mode \n");
+ #endif
+ DRV_Z_EN = 1;
+ DRV_XY_EN = 1;
+ FCTN_ACS_CNTRLALGO(moment,mag_data,gyro_data,0x00,0x00,ACS_DETUMBLING_ALGO_TYPE);
+ #if print
+ printf("\n\r Moment values returned by control algo \n");
+ for(int i=0; i<3; i++)
{
- if(ACS_STATE == 4) // check ACS_STATE = ACS_NOMINAL_ONLY
- {
- FLAG();
- printf("\n\r nominal");
- ACS_STATUS = 4; // set ACS_STATUS = ACS_NOMINAL_ONLY
- FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual);
- printf("\n\r moment values returned by control algo \n");
- for(int i=0; i<3; i++)
- {
- printf("%f\t",moment[i]);
- }
- FCTN_ACS_GENPWM_MAIN(moment) ;
- }
- else
- {
- if(ACS_STATE == 5) // check ACS_STATE = ACS_AUTO_CONTROL
- {
- FLAG();
- printf("\n\r auto control");
- ACS_STATUS = 5; // set ACS_STATUS = ACS_AUTO_CONTROL
- //FCTN_ACS_AUTOCTRL_LOGIC // gotta include this code
- }
- else
- {
- if(ACS_STATE == 6) // check ACS_STATE = ACS_DETUMBLING_ONLY
- {
- FLAG();
- printf("\n\r Entered detumbling \n");
- ACS_STATUS = 6; // set ACS_STATUS = ACS_DETUMBLING_ONLY
- FCTN_ACS_CNTRLALGO(actual_data.Bvalue_actual,actual_data.AngularSpeed_actual); // detumbling code has to be included
- FCTN_ACS_GENPWM_MAIN(moment) ;
- }
- else
- {
- FLAG();
- printf("\n\r invalid state");
- ACS_STATUS = 7 ; // set ACS_STATUS = INVALID STATE
- PWM1 = 0; //clear pwm pins
- PWM2 = 0; //clear pwm pins
- PWM3 = 0; //clear pwm pins
- }//else of invalid
- }//else of autocontrol
- }//else of nominal
- }//else of data acg failure
- }//else fo z axis moment only
- }//if power >2
- else
- {
- FLAG();
- printf("\n\r low power");
- ACS_STATUS = 1; // set ACS_STATUS = ACS_LOW_POWER
- PWM1 = 0; //clear pwm pins
- PWM2 = 0; //clear pwm pins
- PWM3 = 0; //clear pwm pins
- }
- } //else for acs control off
+ printf("%f\t",moment[i]);
+ }
+ #endif
+ FCTN_ACS_GENPWM_MAIN(moment) ;// set ACS_STATUS in function
+ ACS_MAIN_STATUS = 0;
+ return;
+ }
+ else if(ACS_STATE == 9) // Detumbling
+ {
+ DRV_Z_EN = 1;
+ DRV_XY_EN = 1;
+ FCTN_ACS_CNTRLALGO(moment,mag_data,gyro_data,0x00,0x01,ACS_DETUMBLING_ALGO_TYPE);
+ FCTN_ACS_GENPWM_MAIN(moment) ;
+ ACS_MAIN_STATUS = 0;
+ return;
+ }
+ ACS_STATUS = 7; //INVALID_STATE
+ DRV_Z_EN = 0;
+ DRV_XY_EN = 0;
+ ACS_MAIN_STATUS = 0; //clear ACS_MAIN_STATUS flag
+}
- printf("\n\rlow power crossed and pwm no hang");
- ACS_MAIN_STATUS = 0; //clear ACS_MAIN_STATUS flag
-
- t_acs.stop();
- printf("\n\r the time for acs is %f",(float)t_acs.read_ms());
- t_acs.reset();
-
-}
//***************************************************EPS THREAD***********************************************//
void F_EPS()
-{
+{
+ //time_wdog = 1;
t_eps.start();
-
+ EPS_MAIN_STATUS = 1; // Set EPS main status
+ FLAG();
+ EPS_MAIN_COUNTER+=1;
+ #if print
pc.printf("\n\rEntered EPS %f\n",t_start.read());
- EPS_MAIN_STATUS = 1; // Set EPS main status
- FCTN_BATT_TEMP_SENSOR_MAIN(actual_data.Batt_temp_actual);
+ #endif
+
+
+ FCTN_BATT_TEMP_SENSOR_MAIN(actual_data.Batt_temp_actual);
+ #if print
pc.printf("\n\r Battery temperature %f %f" ,actual_data.Batt_temp_actual[0], actual_data.Batt_temp_actual[1]);
- EPS_BATTERY_TEMP_STATUS = 1; //set EPS_BATTERY_TEMP_STATUS
- if(EPS_BATTERY_HEAT_ENABLE == 1)
+ #endif
+ EPS_BATTERY_TEMP_STATUS = 1; //set EPS_BATTERY_TEMP_STATUS
+ if(EPS_BTRY_HTR_AUTO == 1)
{
if((actual_data.Batt_temp_actual[0] < batt_heat_low) && (actual_data.Batt_temp_actual[1] < batt_heat_low)) // to confirm
- {
- batt_heat = 1; //turn on battery heater
- }
+ {
+ EN_BTRY_HT = 1; //turn on battery heater //earlier named as batt_heat
+ }
else
- {
- batt_heat = 0; //turn off battery heater
- }
-
+ {
+ EN_BTRY_HT = 0; //turn off battery heater
+ }
}
- else if(EPS_BATTERY_HEAT_ENABLE == 0)
+ else if(EPS_BTRY_HTR_AUTO == 0)
{
EPS_STATUS = 1;//EPS_STATUS = EPS_BATTERY_HEATER_DISABLED
}
- FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual);
- if (actual_data.Batt_gauge_actual[1] == 200) //data not received
+ FCTN_BATTERYGAUGE_MAIN(actual_data.Batt_gauge_actual);
+ if (actual_data.Batt_gauge_actual[1] == 200) //data not received
{
actual_data.power_mode = 1;
EPS_BATTERY_GAUGE_STATUS = 0; //clear EPS_BATTERY_GAUGE_STATUS
-
}
- else
+ else
{
FCTN_EPS_POWERMODE(actual_data.Batt_gauge_actual[1]); //updating power level
EPS_BATTERY_GAUGE_STATUS = 1; //set EPS_BATTERY_GAUGE_STATUS
}
- // if( Temperature data received)
- //{
- //}
-// else
-// {
-// Set battery temp to XX
-// EPS_BATTERY_TEMP_STATUS = 0; //clear EPS_BATTERY_TEMP_STATUS
-// EPS_STATUS = EPS_ERR_BATTERY_TEMP;
-// }
- FCTN_HK_MAIN();
- FCTN_APPEND_HKDATA();
- minMaxHkData();
- EPS_MAIN_STATUS = 0; // clear EPS main status
-
- t_eps.stop();
+ FCTN_HK_MAIN();
+ FCTN_APPEND_HKDATA();
+ minMaxHkData();
+ EPS_MAIN_STATUS = 0; // clear EPS main status
+ t_eps.stop();
+ #if print
printf("\n\r the time for eps is %f",(float)t_eps.read_ms());
- t_eps.reset();
+ #endif
+ t_eps.reset();
}
+
//**************************************************BCN THREAD*******************************************************************//
void F_BCN()
{
- pc.printf("\n\rEntered BCN %f\n",t_start.read());
-
- FCTN_BCN_TX_MAIN();
-
+ pc.printf("\n\rEntered BCN %f\n",t_start.read());
+ //BCN_TX_MAIN_COUNTER=+1;
+ FCTN_BCN_TX_MAIN();
}
//**************************************************TCTM THREAD*******************************************************************//
void T_TC(void const * args)
{
- while(1)
+ while(1)
{
- Thread::signal_wait(0x4);
- wait_us(200);// se if it can be changed
-
- /*SHOULD IT BE PLACED INSIDE OR OUTSIDE?*/
- BAE_I2CRX_STATUS=1;
- FLAG();
- BAE_I2C_COUNTER++;
- //printf("\n\rreached\n"); // can be between 38 to 15700
- if( slave.receive() == 0)
- {
- slave.stop();
- //printf("\n\rnot send\n");
- }
- else if( slave.receive() == 1) // slave writes to master
- {
- if(data_send_flag == 'h')
- {
- irpt_2_mstr =1;// wait till cdms code is changed
-
- FCTN_APPEND_HKDATA();
- // pc.printf("\n\r here");
- write_ack=slave.write(BAE_chardata,74);
- if(write_ack==0)// wait till cdms code is changed
-
- {
- irpt_2_mstr = 0;
- printf("\n\rgot interrupt\n");
- }
+ Thread::signal_wait(0x4);
+ //wait_us(200);// se if it can be changed//@Lakshya:It can't be changed :)
+ wait_us(300);
+ BAE_MNG_I2C_STATUS =1 ;
+ FLAG();
+ //earlier BAE_I2CRX_STATUS=1;
+ #if print
+ printf("\n\rreached\n");
+ #endif // can be between 38 to 15700
+ if( slave.receive() == 0)
+ {
+ irpt_2_mstr = 0;
+ data_send_flag = 'h';
+ pc.printf("\n\rSlave not addressed");
+ pc.printf("\n\rPTE->DIR = 0x%08X",pdir_ss1);
+ slave.stop();
+ pdir_ss1=PTE->PDIR; /////////edited
+ if(((pdir_ss1 & 0x00000003)!=3)) //check if bus has freezed
+ {
+ I2C_busreset(); /////////edited
}
- else if(data_send_flag == 't')
- {
- write_ack=slave.write((char*)telemetry,tm_len);
- data_send_flag = 'h';
- if(write_ack==0)
+ /*pdir_ss2=PTE->PDIR;
+ #if PRINT2
+ pc.printf("\n\rPTE->DIR = 0x%08X",pdir_ss2);
+ #endif*/
+ #if print
+ printf("\n\rnot send\n");
+ #endif
+ }
+ else if( slave.receive() == 1) // slave writes to master
+ {
+ BAE_I2C_COUNTER++; //////////edited
+ if(data_send_flag = 'h') //to be renamed as BAE_I2C_STATUS
+ {
+ irpt_2_mstr =1; //wait till cdms code is changed
+ FCTN_APPEND_HKDATA();
+ uint8_t i2c_count =0;
+ //crc is already being added
+ write_ack=slave.write((char*)BAE_chardata,134);
+ Thread::wait(1); //for correct values of register to be updated
+ pdir_tm1=PTE->PDIR;
+ irpt_2_mstr = 0;
+ if(write_ack==0)// wait till cdms code is changed
+ {
+ while(((pdir_tm1 & 0x00000003)!=3)&& i2c_count<10)
+ {
+ Thread::wait(1);
+ pdir_tm1=PTE->PDIR;
+ i2c_count++;
+ }
+ if(((pdir_tm1 & 0x00000003)==3))
+ {
+ pc.printf("\n\rWrite HK success");
+ data_send_flag = 'h';
+ //shoulddn't it be here
+ irpt_2_mstr = 0; //////////edited
+ }
+ else
+ {
+ wait_ms(20); //should be atleast 7ms for correct operation but fix this value as 20ms
+ I2C_busreset();
+ }
+ #if print
+ pc.printf("\n\rgot interrupt\n");
+ #endif
+ }
+ else
+ {
+ I2C_busreset();
+ }
+ i2c_count=0;
+ }
+ else//data_send_flag = "t" //else if(telecommand[1]&0xC0 == 't')
+ {
+ uint8_t i2c_count =0;
+ write_ack=slave.write((char*)telemetry,134); ////////edited(size)
+ Thread::wait(1); //for correct values of register to be updated
+ pdir_tm1=PTE->PDIR;
irpt_2_mstr = 0;
- }
- }
- else if( slave.receive()==3 || slave.receive()==2) // slave read
- {
- read_ack=slave.read(telecommand,tc_len);
- t_tc.start();
- //pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
- pc.printf("\n\r Executing Telecommand \n");
- // FCTN_TC_DECODE((uint8_t*) telecommand);
-
- FCTN_BAE_TM_TC((uint8_t*) telecommand);
- //telemetry = (char*)temp;
-
- FCTN_TM();
- t_tc.stop();
- printf("\n\r time taken %d",t_tc.read_us());
- t_tc.reset();
- // for(int i = 0; i<134; i++)
- //pc.printf("%c", telemetry[i]);
- }
-
-
-/*implemented when cdms send telecommand as t and long bcn data seperately
- {
- read_ack=slave.read(telecommand,tc_len);
- t_tc.start();
-
- //*code for differentiating wether the given data is tc or long beacon asssuming the first bit differentiate
- if(telecommand[0]=='t') //*i.e telecommand is recieved
- {
- pc.printf("\n\r data is = %x ",telecommand[0]);
- //pc.printf("\n\rTELECOMMAND received from CDMS is %s \n",telecommand);
- pc.printf("\n\r Executing Telecommand ");
- // FCTN_TC_DECODE((uint8_t*) telecommand);
-
- FCTN_BAE_TM_TC((uint8_t*) telecommand);
- //telemetry = (char*)temp;
-
- FCTN_TM();
-/// t_tc.stop();
-/// printf("\n\r time taken %d",t_tc.read_us());
-/// t_tc.reset();
- // for(int i = 0; i<134; i++)
- //pc.printf("%c", telemetry[i]);
- }
-
- else if(telecommand[0]=='l') //*i.e long beacon data is recieved* /
- {
- pc.printf("\n\r sending the long beacon data ");
- /*if data is to send as in uint8 format if it is to be send as char
- then just forward it without converting* /
- //*creating a new function here to update the long beacon data everytime cdms sends it* /
- LONG_BCN_DATA((uint8_t*)telecommand);
- //here long beacon structure change
-/// t_tc.stop();
-/// printf("\n\r time taken %d",t_tc.read_us());
-/// t_tc.reset();
- }
- else
- {
- pc.printf("\n\r none of case met a miss ");
-/// t_tc.stop();
-/// printf("\n\r time taken %d",t_tc.read_us());
-/// t_tc.reset();
- }
-
- t_tc.stop();
- printf("\n\r time taken %d",t_tc.read_us());
- t_tc.reset();
-
- }
-*/
- BAE_I2CRX_STATUS=0;
- FLAG();
-
- }
+ data_send_flag = 'h';
+ if(write_ack==0)
+ {
+ while(((pdir_tm1 & 0x00000003)!=3)&& i2c_count<10)
+ {
+ Thread::wait(1);
+ pdir_tm1=PTE->PDIR;
+ i2c_count++;
+ }
+ if(((pdir_tm1 & 0x00000003)==3))
+ {
+ pc.printf("\n\rWrite TM success");
+ }
+ else
+ {
+ wait_ms(20); //should be atleast 7ms for correct operation but fix this value as 20ms
+ I2C_busreset();
+ }
+ }
+ else
+ {
+ I2C_busreset();
+ }
+ i2c_count=0;
+ }
+
+ }
+ else if( slave.receive()==3 || slave.receive()==2) // slave read
+ {
+ BAE_I2C_COUNTER++;
+ uint8_t i2c_count = 0;
+ read_ack=slave.read((char *)telecommand,11); //read() function returns acknowledgement
+ Thread::wait(1);
+ pdir_tc1=PTE->PDIR;
+ if(read_ack==0) //read() says it was successful
+ {
+ while(((pdir_tc1 & 0x00000003)!=3)&& i2c_count<10)//checking if SDA and SCL lines are logic 0 and not more than 10 times(10ms)
+ {
+ Thread::wait(1);
+ pdir_tc1=PTE->PDIR;
+ i2c_count++;
+ }
+ if(((pdir_tc1 & 0x00000003)==3))
+ {
+ pc.printf("\n\n\rRead TC success");
+ //if(telecommand[1]&0xC0 == 0x00)
+ if(telecommand[0] == 0x00) /////////////edited
+ FCTN_CDMS_HK_TC((uint8_t*) telecommand); /////////////edited
+ //FCTN_TC_DECODE((uint8_t*) telecommand);
+ else
+ {
+ FCTN_BAE_TM_TC((uint8_t*) telecommand);
+ //telemetry = (char*)temp;
+ data_send_flag = 't';
+ //pc.printf("\n\r Telemetry Generation \n");
+ irpt_2_mstr = 1;
+ }
+ }
+ else //either or both of SDA and SCL lines low
+ {
+ I2C_busreset();
+ // data_send_flag = 'i';
+ gen_I_TM();
+ data_send_flag = 't';
+ //shouldn't it be here
+ irpt_2_mstr = 1; /////////////added
+ }
+ }
+ else //read() says it was not successful
+ {
+ I2C_busreset();
+ //data_send_flag = 'i'; //'i' = invalid
+ gen_I_TM();
+ data_send_flag = 't';
+ irpt_2_mstr = 1; /////////////added
+ }
+ i2c_count = 0;
+ #if print
+ pc.printf("\n\r time taken %d",t_tc.read_us());
+ for(int i = 0; i<134; i++)
+ pc.printf("%c", telemetry[i]);
+ #endif
+ }
+ //was commented here now in txt file main_i2ccomment on desktp
+ BAE_MNG_I2C_STATUS=0;
+ FLAG();
+ }
}
-
void FCTN_TM()
-{
- //irpt_2_mstr = 0;
+{
data_send_flag = 't';
pc.printf("\n\r Telemetry Generation \n");
irpt_2_mstr = 1;
@@ -570,173 +841,102 @@
void FCTN_I2C_ISR()
{
- ptr_t_i2c->signal_set(0x4);
+ ptr_t_i2c->signal_set(0x4);
}
//***********************************************************FAULTS***************************************************************//
-/*void ir1clear()
-{
- actual_data.faultIr_status |= 0x01; // alert
-
-}*/
-
-
-void ir2clear()
-{
- actual_data.faultIr_status |= 0x02;
- TRXY_SW = 0; // Switch off TR XY
- if1check = 1;
-}
-
-void ir3clear()
-{
- actual_data.faultIr_status |= 0x04;
- DRV_Z_EN = 0;
- wait_us(1);
- DRV_Z_EN = 1;
-
-}
-
-void ir4clear()
-{
- if2check = 1;
- actual_data.faultIr_status |= 0x08;
- TRZ_SW = 0;
-}
-
-void ir5clear()
-{
- actual_data.faultIr_status |= 0x10;
- CDMS_RESET = 0;
- wait_us(1);
- CDMS_RESET = 1;
-}
-
-void ir6clear()
-{
- actual_data.faultIr_status |= 0x20;
- BCN_SW = 0;
- wait_us(1);
- BCN_SW = 1;
-}
-
-void ir7clear()
-{
- actual_data.faultIr_status |= 0x40;
-}
uint8_t iter2=0,iter4 = 0;
-
-
void pollfault()
{
-
+ if (pf1==0) // OC_ATS1
+ {
+ pf1check=1;
+ actual_data.faultPoll_status |=0x01 ;
+ ATS1_SW_ENABLE = 1; // turn off ats1 // to be turned on next cycle in ACS
+ }
+ else
+ actual_data.faultPoll_status &= 0xFE;
-
- if (pf1==0) // OC_ATS1
- {
- pf1check=1;
- actual_data.faultPoll_status |=0x01 ;
- ATS1_SW_ENABLE = 1; // turn off ats1 // to be turned on next cycle in ACS
- }
- else actual_data.faultPoll_status &= 0xFE;
-
- if (pf2==0)
- {
- pf2check=1;
- actual_data.faultPoll_status |=0x02 ;
- ATS2_SW_ENABLE = 1; // turn off ats2 // turn on in ACS
- }
- else actual_data.faultPoll_status &= 0xFD;
+ if(pf2==0)
+ {
+ pf2check=1;
+ actual_data.faultPoll_status |=0x02 ;
+ ATS2_SW_ENABLE = 1; // turn off ats2 // turn on in ACS
+ }
+ else
+ actual_data.faultPoll_status &= 0xFD;
if (pf3==0)
- { actual_data.faultPoll_status |=0x04 ;
- DRV_XY_EN = 0;
- wait_us(1);
- DRV_XY_EN = 1;
- }
- else actual_data.faultPoll_status &= 0xFB;
-
-
-
-
- /*if (ir1==1)
- {
- actual_data.faultIr_status &=0xFE;
- }*/
-
- if (ir2==1)
- {
- actual_data.faultIr_status &=0xFD;
- }
- if (ir3==1)
- {
- actual_data.faultIr_status &=0xFB;
- }
- if (ir4==1)
- {
- actual_data.faultIr_status &=0xF7;
- }
- if (ir5==1)
- {
- actual_data.faultIr_status &=0xEF;
- }
- if (ir6==1)
- {
- actual_data.faultIr_status &=0xDF;
- }if (ir7==1)
- {
- actual_data.faultIr_status &=0xBF;
- }
-
-
+ {
+ actual_data.faultPoll_status |=0x04 ;
+ DRV_XY_EN = 0;
+ wait_us(1);
+ DRV_XY_EN = 1;
+ }
+ else
+ actual_data.faultPoll_status &= 0xFB;
}
-
//------------------------------------------------------------------------------------------------------------------------------------------------
//SCHEDULER
//------------------------------------------------------------------------------------------------------------------------------------------------
+
uint8_t schedcount=1;
void T_SC(void const *args)
{
-/// printf("\n\r in scheduler");
-
+ #if print
+ printf("\n\r in scheduler");
+ #endif
/*if keeping thish many cases creates a problem then make 3 seperate flagvariable i.e bae_standby_acs so on that will make it easy.!!!*/
-
if(schedcount == 7) //to reset the counter
- {
schedcount = 1;
- }
if(schedcount%1==0)
- {
- if( BAE_STANDBY!=0x02 && BAE_STANDBY!=0x03 && BAE_STANDBY!=0x06 && BAE_STANDBY!=0x07)
- {
- pc.printf("\nSTATE IS !!!!!! = %x !!\n",ACS_STATE);
- F_ACS();
- }
- }
+ {
+ if( BAE_STANDBY!=0x02 && BAE_STANDBY!=0x03 && BAE_STANDBY!=0x06 && BAE_STANDBY!=0x07)
+ {
+ pc.printf("\nSTATE IS !!!!!! = %x !!\n",ACS_STATE);
+ F_ACS();
+ //time_wdog = 0;
+ }
+ }
if(schedcount%2==0)
- {
- if( BAE_STANDBY!=0x01 && BAE_STANDBY!=0x03 && BAE_STANDBY!=0x05 && BAE_STANDBY!=0x07)
- F_EPS();
- }
+ {
+ if( BAE_STANDBY!=0x01 && BAE_STANDBY!=0x03 && BAE_STANDBY!=0x05 && BAE_STANDBY!=0x07)
+ {
+ //time_wdog = 1;
+ F_EPS();
+ }
+ //time_wdog = 0;
+ }
if(schedcount%3==0)
- {
- if(BAE_STANDBY!=0x04 && BAE_STANDBY!=0x05 && BAE_STANDBY!=0x06 && BAE_STANDBY!=0x07)
- F_BCN();
- }
+ {
+ //if(BAE_STANDBY!=0x04 && BAE_STANDBY!=0x05 && BAE_STANDBY!=0x06 && BAE_STANDBY!=0x07)
+ // time_wdog = 0;
+ // F_BCN();
+ }
schedcount++;
- printf("\n\r exited scheduler h");
- printf("\n\r time taken %f",t_start.read());
+ #if print
+ printf("\n\r exited scheduler h");
+ printf("\n\r time taken %f",t_start.read());
+ #endif
}
+
Timer t_flag;
+
void FLAG()
{
+
+//I2C
+ //if(BAE_MNG_I2C_STATUS == 1)
+ // BAE_STATUS = BAE_STATUS | 0x10000000;
+ //else if(BAE_MNG_I2C_STATUS == 0)
+ // BAE_STATUS &= 0xEFFFFFF;
//.............bae..................//
if(BAE_INIT_STATUS == 1)
@@ -744,10 +944,11 @@
else if(BAE_INIT_STATUS == 0)
BAE_STATUS &= 0xFFFFFFFE;
- if(BAE_I2CRX_STATUS == 1)
+ if(BAE_MNG_I2C_STATUS == 1)
BAE_STATUS = BAE_STATUS | 0x00000002;
- if(BAE_I2CRX_STATUS == 0)
+ if(BAE_MNG_I2C_STATUS == 0)
BAE_STATUS &= 0xFFFFFFFD;
+
//.............acs..................//
if(ACS_INIT_STATUS == 1)
BAE_STATUS = BAE_STATUS | 0x00000080; //set ACS_INIT_STATUS flag
@@ -803,58 +1004,57 @@
BAE_ENABLE = ((BAE_ENABLE & 0xFFFFFF8F)| 0x00000060); //ACS_STATE = ACS_DETUMBLING_CONTROL
//...............eps......................//
-
-
-if (EPS_INIT_STATUS==1) // Set EPS_INIT_STATUS
- BAE_STATUS |= 0x00010000;
-else if(EPS_INIT_STATUS==0) // Clear
- BAE_STATUS &= 0xFFFEFFFF;
+ if (EPS_INIT_STATUS==1) // Set EPS_INIT_STATUS
+ BAE_STATUS |= 0x00010000;
+ else if(EPS_INIT_STATUS==0) // Clear
+ BAE_STATUS &= 0xFFFEFFFF;
-if (EPS_MAIN_STATUS==1) // Set EPS_MAIIN_STATUS
- BAE_STATUS |= 0x00040000;
-else if(EPS_MAIN_STATUS==0) // Clear
- BAE_STATUS &= 0xFFFBFFFF;
-
-
-if (EPS_BATTERY_GAUGE_STATUS==1) // Set EPS_BATTERY_GAUGE_STATUS
- BAE_STATUS |= 0x00020000;
-else if(EPS_BATTERY_GAUGE_STATUS==0) // Clear
- BAE_STATUS &= 0xFFFDFFFF;
+ if (EPS_MAIN_STATUS==1) // Set EPS_MAIIN_STATUS
+ BAE_STATUS |= 0x00040000;
+ else if(EPS_MAIN_STATUS==0) // Clear
+ BAE_STATUS &= 0xFFFBFFFF;
-if (EPS_BATTERY_TEMP_STATUS==1) // Set EPS_BATTERY_TEMP_STATUS
- BAE_STATUS |= 0x00080000;
-else if(EPS_BATTERY_TEMP_STATUS==0) // Clear
- BAE_STATUS &= 0xFFF7FFFF;
+ if (EPS_BATTERY_GAUGE_STATUS==1) // Set EPS_BATTERY_GAUGE_STATUS
+ BAE_STATUS |= 0x00020000;
+ else if(EPS_BATTERY_GAUGE_STATUS==0) // Clear
+ BAE_STATUS &= 0xFFFDFFFF;
+
+ if (EPS_BATTERY_TEMP_STATUS==1) // Set EPS_BATTERY_TEMP_STATUS
+ BAE_STATUS |= 0x00080000;
+ else if(EPS_BATTERY_TEMP_STATUS==0) // Clear
+ BAE_STATUS &= 0xFFF7FFFF;
-if (EPS_STATUS==0)
- BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF); // Set EPS_ERR_BATTERY_TEMP
-else if (EPS_STATUS==1)
- BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00010000; // Set EPS_BATTERY_HEATER_DISABLED
-else if (EPS_STATUS==2)
- BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00020000; // Set EPS_ERR_HEATER_SWITCH_OFF
-else if (EPS_STATUS==3)
- BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00030000; // Set EPS_ERR_HEATER_SWITCH_ON
-else if (EPS_STATUS==4)
- BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00040000; // Set EPS_BATTERY_HEATER_OFF
-else if (EPS_STATUS==5)
- BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000; // Set EPS_BATTERY_HEATER_ON
+ if (EPS_STATUS==0)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF); // Set EPS_ERR_BATTERY_TEMP
+ else if (EPS_STATUS==1)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00010000; // Set EPS_BATTERY_HEATER_DISABLED
+ else if (EPS_STATUS==2)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00020000; // Set EPS_ERR_HEATER_SWITCH_OFF
+ else if (EPS_STATUS==3)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00030000; // Set EPS_ERR_HEATER_SWITCH_ON
+ else if (EPS_STATUS==4)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00040000; // Set EPS_BATTERY_HEATER_OFF
+ else if (EPS_STATUS==5)
+ BAE_STATUS = (BAE_STATUS & 0xFF8FFFFF)|0x00050000; // Set EPS_BATTERY_HEATER_ON
-
- if(EPS_BATTERY_HEAT_ENABLE == 1)
+ if(EPS_BTRY_HTR_AUTO == 1)
BAE_ENABLE |= 0x00000080;
- else if(EPS_BATTERY_HEAT_ENABLE == 0)
+ else if(EPS_BTRY_HTR_AUTO == 0)
BAE_ENABLE = BAE_ENABLE &0xFFFFFF7;
+ #if print
+ pc.printf("\n\r BAE status %x BAE ENABLE %x ",BAE_STATUS,BAE_ENABLE);
+ #endif
+}
-
- pc.printf("\n\r BAE status %x BAE ENABLE %x ",BAE_STATUS,BAE_ENABLE);
-}
void FCTN_BAE_INIT()
{
- printf("\n\r Initialising BAE _________________________________________________________________________________");
+ #if print
+ printf("\n\r Initialising BAE _________________________________________________________________________________");
+ #endif
BAE_INIT_STATUS=1;
FLAG();
@@ -862,7 +1062,7 @@
ACS_STATE = 4;
ACS_ATS_ENABLE = 1;
ACS_DATA_ACQ_ENABLE = 1;
- EPS_BATTERY_HEAT_ENABLE = 1;
+ EPS_BTRY_HTR_AUTO = 1;
actual_data.power_mode=3;
//............intializing pins................//
@@ -873,6 +1073,8 @@
DRV_Z_EN = 1;
TRZ_SW = 1;
TRXY_SW = 1;
+
+ //time_wdog = 1;
//...........order mentioned in flow chart.................//
FCTN_ACS_INIT();
@@ -883,22 +1085,23 @@
uint32_t data_modify=data_flash & 0x000000FF;
data_modify +=1;
data_modify |=data_flash;
- FCTN_BAE_WR_FLASH(0,data_modify)
- printf("\n\rthe number of reset %d",data_modify);
-
+ FCTN_BAE_WR_FLASH(0,data_modify);
+ #if print
+ printf("\n\rthe number of reset %d",data_modify);
+ #endif
BAE_INIT_STATUS=0;
FLAG();
}
+
int main()
{
+ //time_wdog = 1;
pc.printf("\n\r BAE Activated. Testing Version 1.2 \n");
- CDMS_RESET = 1;
-
- /*BCN_FEN == 0 //dummy implementation removed */
- //FLAG();
+ //FLASH_INI();
FCTN_BAE_INIT();
-
+ //time_wdog = 0;
+
slave.address(addr);
irpt_2_mstr = 0;
@@ -907,23 +1110,35 @@
irpt_4m_mstr.enable_irq();
irpt_4m_mstr.rise(&FCTN_I2C_ISR);
-
+
RtosTimer t_sc_timer(T_SC,osTimerPeriodic); // Initiating the scheduler thread
t_sc_timer.start(10000);
t_start.start();
- pc.printf("\n\rStarted scheduler %f\n\r",t_start.read());
-
+ #if print
+ pc.printf("\n\rStarted scheduler %f\n\r",t_start.read());
+ #endif
/*if one defines it dynamically then one has to take care that the destuct function is calle everytime BAE resets otheriwse it will lead to memory leakage*/
- //BAE_STANDBY_STATUS_TIMER = new RtosTimer(BAE_STANDBY_STATUS_RESET,osTimerOnce);
-
+ //BAE_STANDBY_STATUS_TIMER = new RtosTimer(BAE_STANDBY_STATUS_RESET,osTimerOnce);
/*static allocation*/
RtosTimer STANDBY_TIMER(BAE_STANDBY_STATUS_RESET,osTimerOnce);
BAE_STANDBY_STATUS_TIMER=&STANDBY_TIMER;
- RtosTimer bcn_start_timer(FCTN_BCN_FEN,osTimerOnce);
- /*later change it to 30 min 1800 seconds*/
- bcn_start_timer.start(20000);
+ RtosTimer bcn_start_timer(FCTN_BCN_FEN,osTimerOnce);
+ /*later change it to 30 min 1800 seconds*/
+ bcn_start_timer.start(20000);
+
+ //BCN HTR TIMERS
+ RtosTimer EPS_HTR_OFF_TIMER(FCTN_EPS_HTR_OFF, osTimerOnce);
+ HTR_OFF=&EPS_HTR_OFF_TIMER;
+
+ RtosTimer EPS_HTR_CYCLE_TIMER(FCTN_EPS_HTR_CYCLE);
+ HTR_CYCLE=&EPS_HTR_CYCLE_TIMER;
+
+ RtosTimer EPS_HTR_DLY_TIMER(FCTN_EPS_HTR_DLY,osTimerOnce);
+ HTR_DLY=&EPS_HTR_DLY_TIMER;
+
+ FLASH_INI();
+
+while(1); //required to prevent main from terminating
- while(1); //required to prevent main from terminating
-}
-
+}
\ No newline at end of file
