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:
- 39:670133e7ffd8
- Parent:
- 33:76f2b8735501
- Child:
- 40:c2538d97e78b
- Child:
- 42:413cd8c60cfc
- Child:
- 45:b5bd48ffbb67
- Child:
- 47:d59ba66229ce
--- a/main.cpp Mon Jul 04 04:29:59 2016 +0000
+++ b/main.cpp Tue Jul 05 13:44:15 2016 +0000
@@ -6,9 +6,12 @@
#include "BCN.h"
#include "TCTM.h"
#define tm_len 135
-#define tc_len 11
+#define tc_len 134
#define batt_heat_low 20
#define print 1
+#define PRINT2 1
+#define baby 1
+#define baby2 1
#define DISABLE_WDOG 0;
@@ -25,7 +28,7 @@
kick_WDOG();
}
-DigitalOut time_wdog(PIN68);// for determining the time between code
+DigitalInOut time_wdog(PIN68);// for determining the time between code
//**********************************************GLOBAL RTOS TIMER*********************************************************//
RtosTimer *BAE_STANDBY_STATUS_TIMER;
@@ -49,7 +52,7 @@
*min = time/60;
}
-extern DigitalOut BTRY_HTR_ENABLE;
+extern DigitalInOut BTRY_HTR_ENABLE;
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
@@ -172,7 +175,7 @@
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 BTRY_HTR_ENABLE;
+extern DigitalInOut BTRY_HTR_ENABLE;
Timeout timeout_bcn;
@@ -194,7 +197,7 @@
extern uint8_t EPS_BAT_TEMP_HIGH;
extern uint8_t EPS_BAT_TEMP_DEFAULT;
float EPS_BTRY_TMP_AVG;
-extern DigitalOut BTRY_HTR_ENABLE;
+extern DigitalInOut BTRY_HTR_ENABLE;
//extern void FCTN_BATTERYGAUGE_MAIN(float*Battery_parameters);
@@ -204,7 +207,7 @@
//CDMS
//eps cdms fault
uint8_t CDMS_SW_STATUS;
-DigitalOut CDMS_OC_FAULT(PIN79);
+DigitalInOut CDMS_OC_FAULT(PIN79);
bool CDMS_SW_ENABLE;
int CDMS_FAULT_COUNTER = 0;
@@ -221,7 +224,7 @@
//uint16_t BCN_TX_MAIN_COUNTER = 0;
uint8_t BCN_LONG_MSG_TYPE = 1;
-DigitalOut BCN_TX_OC_FAULT(PIN80);
+DigitalInOut BCN_TX_OC_FAULT(PIN80);
int BCN_TX_FAULT_COUNTER;
//ACS
@@ -229,23 +232,23 @@
//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
+DigitalInOut ACS_TR_Z_ENABLE(PIN40);
+DigitalInOut ACS_TR_Z_OC_FAULT(PIN91);
+DigitalInOut ACS_TR_Z_FAULT(PIN89); //Driver IC fault
int ACS_TR_Z_FAULT_COUNTER = 0;
//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
+DigitalInOut ACS_TR_XY_ENABLE(PIN71);
+DigitalInOut ACS_TR_XY_OC_FAULT(PIN72);
+DigitalInOut 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);
+DigitalInOut ACS_ATS1_OC_FAULT(PIN97);
int ACS_ATS1_FAULT_COUNTER = 0;
//bool ACS_ATS2_ENABLE;
-DigitalOut ACS_ATS2_OC_FAULT(PIN5);
+DigitalInOut ACS_ATS2_OC_FAULT(PIN5);
int ACS_ATS2_FAULT_COUNTER;
//EPS
@@ -300,8 +303,8 @@
extern uint8_t ACS_DEMAG_TIME_DELAY;
extern uint16_t ACS_Z_FIXED_MOMENT;
-int write_ack = 1;
-int read_ack = 1;
+int write_ack;
+int read_ack;
char telecommand[tc_len];
@@ -311,8 +314,8 @@
bool if2check = 0;
//ASSIGNING PINS//
-DigitalOut ATS1_SW_ENABLE(PTC0); // enable of att sens2 switch
-DigitalOut ATS2_SW_ENABLE(PTC16); // enable of att sens switch
+DigitalInOut ATS1_SW_ENABLE(PTC0); // enable of att sens2 switch
+DigitalInOut 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
@@ -325,16 +328,16 @@
//........faults
//Polled Faults
-DigitalIn pf1(PIN5);//Attitude Sensor 1 OC bar fault signal
-DigitalIn pf2(PIN97);//Attitude Sensor 2 OC bar fault signal
-DigitalIn pf3(PIN83);//Fault Bar for TRXY driver
+DigitalInOut pf1(PIN5);//Attitude Sensor 1 OC bar fault signal
+DigitalInOut pf2(PIN97);//Attitude Sensor 2 OC bar fault signal
+DigitalInOut pf3(PIN83);//Fault Bar for TRXY driver
-DigitalOut TRXY_SW(PIN71); //TR XY Switch
-DigitalOut DRV_Z_EN(PIN88); //Sleep pin of driver z
-DigitalOut TRZ_SW(PIN40); //TR Z Switch
+DigitalInOut TRXY_SW(PIN71); //TR XY Switch
+DigitalInOut DRV_Z_EN(PIN88); //Sleep pin of driver z
+DigitalInOut TRZ_SW(PIN40); //TR Z Switch
DigitalOut CDMS_RESET(PIN7,1); // CDMS RESET
-DigitalOut BCN_SW(PIN14); //Beacon switch
-DigitalOut DRV_XY_EN(PIN82);
+DigitalInOut BCN_SW(PIN14); //Beacon switch
+DigitalInOut DRV_XY_EN(PIN82);
@@ -355,7 +358,42 @@
for(int j=0;j<8;j++)
{
FCTN_BAE_WR_FLASH(j,ARR_INITIAL_VAL[j]);
- }
+ ACS_ATS_STATUS = ARR_INITIAL_VAL[0]>>24;
+ ACS_TR_XY_SW_STATUS = ((uint8_t)(ARR_INITIAL_VAL[0]>>22))&0x03;
+ ACS_TR_Z_SW_STATUS = (ARR_INITIAL_VAL[0]>>20)&0x03;
+ ACS_STATE = (ARR_INITIAL_VAL[0]>>16)&0x0F;
+ //pc.printf("\n\r acs state in starting is %x",ACS_STATE);
+ ACS_DETUMBLING_ALGO_TYPE = (ARR_INITIAL_VAL[0]>>15)&0x01;
+ BCN_TX_SW_STATUS = ((uint8_t)(ARR_INITIAL_VAL[0]>>13))&0x03;
+ BCN_SPND_TX = ((uint8_t)(ARR_INITIAL_VAL[0]>>12))&0x01;
+ BCN_FEN = ((uint8_t)(ARR_INITIAL_VAL[0]>>11))&0x01;
+ BCN_LONG_MSG_TYPE = ((uint8_t)(ARR_INITIAL_VAL[0]>>10))&0x01;
+ EPS_BTRY_HTR_AUTO = ((uint8_t)(ARR_INITIAL_VAL[0]>>9))&0x03;//EPS_BATTERY_HEATER_ENABLE
+ //now one spares in telemetry[5]
+
+ //updating the reset counter
+ BAE_RESET_COUNTER = ((uint8_t)(ARR_INITIAL_VAL[0]));
+ EPS_SOC_LEVEL_12 = (uint8_t)(ARR_INITIAL_VAL[1]>>24);
+ EPS_SOC_LEVEL_23 = (uint8_t)(ARR_INITIAL_VAL[1]>>16);
+ ACS_MAG_TIME_DELAY = (uint8_t)(ARR_INITIAL_VAL[1]>>8);
+ ACS_DEMAG_TIME_DELAY = (uint8_t)ARR_INITIAL_VAL[1];
+
+ EPS_BAT_TEMP_LOW = (uint8_t)(ARR_INITIAL_VAL[2]>>24);
+ EPS_BAT_TEMP_HIGH = (uint8_t)(ARR_INITIAL_VAL[2]>>16);
+ EPS_BAT_TEMP_DEFAULT = (uint8_t)(ARR_INITIAL_VAL[2]>>8);
+
+ ACS_MM_X_COMSN = (uint16_t)(ARR_INITIAL_VAL[3]>>16);
+ ACS_MM_Y_COMSN = (uint16_t)ARR_INITIAL_VAL[3];
+
+ ACS_MG_X_COMSN = (uint16_t)(ARR_INITIAL_VAL[4]>>16);
+ ACS_MG_Y_COMSN = (uint16_t)ARR_INITIAL_VAL[4];
+
+ ACS_MM_Z_COMSN = (uint16_t)(ARR_INITIAL_VAL[5]>>16);
+ ACS_MG_Z_COMSN = (uint16_t)ARR_INITIAL_VAL[5];
+
+ ACS_Z_FIXED_MOMENT = (uint16_t)(ARR_INITIAL_VAL[6]>>16);//assignvalues
+
+ }
else
{
for(int j=0;j<8;j++)
@@ -366,6 +404,7 @@
ACS_TR_XY_SW_STATUS = ((uint8_t)(read[0]>>22))&0x03;
ACS_TR_Z_SW_STATUS = (read[0]>>20)&0x03;
ACS_STATE = (read[0]>>16)&0x0F;
+ //pc.printf("\n\r acs state in starting is %x",ACS_STATE);
ACS_DETUMBLING_ALGO_TYPE = (read[0]>>15)&0x01;
BCN_TX_SW_STATUS = ((uint8_t)(read[0]>>13))&0x03;
BCN_SPND_TX = ((uint8_t)(read[0]>>12))&0x01;
@@ -378,6 +417,7 @@
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]);
+ pc.printf("\n\r reset counter %d",BAE_RESET_COUNTER);
EPS_SOC_LEVEL_12 = (uint8_t)(read[1]>>24);
@@ -431,7 +471,7 @@
I2C1->C1 |= 0x80;
PORTE->PCR[1] |= 0x00000004;
PORTE->PCR[0] |= 0x00000004;
- Thread::wait(1);
+ wait_ms(1);
}
//*******************************************ACS THREAD**************************************************//
@@ -720,179 +760,203 @@
//**************************************************TCTM THREAD*******************************************************************//
+//===================================================================
void T_TC(void const * args)
{
while(1)
- {
- 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 ;
- I2C_last.reset();
- I2C_last.start();
- FLAG();
- //earlier BAE_I2CRX_STATUS=1;
- #if print
- printf("\n\rreached\n");
- #endif // can be between 38 to 15700
- if( slave.receive() == 0)
+ {
+ Thread::signal_wait(0x4);
+ wait_us(300);
+ BAE_MNG_I2C_STATUS =1 ;
+ I2C_last.reset();
+ I2C_last.start();
+ pc.printf("\n\r intrpet");
+ if( slave.receive() == 0)
+ {
+ pdir_ss1=PTE->PDIR; /////////edited
+ irpt_2_mstr = 0;
+ data_send_flag = 'h';
+ slave.stop();
+ if(((pdir_ss1 & 0x00000003)!=3)) //check if bus has freezed
+ {
+ I2C_busreset(); /////////edited
+ }
+ pdir_ss2=PTE->PDIR;
+ pc.printf("\n\rSlave not addressed");
+ pc.printf("\n\rPTE->DIR = 0x%08X",pdir_ss1);
+ #if PRINT2
+ pc.printf("\n\rPTE->DIR = 0x%08X",pdir_ss2);
+ #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);
+ wait_ms(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
{
- 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
+ while(((pdir_tm1 & 0x00000003)!=3)&& i2c_count<10)
+ {
+ wait_ms(1);
+ pdir_tm1=PTE->PDIR;
+ i2c_count++;
+ }
+ if(((pdir_tm1 & 0x00000003)==3))
{
- I2C_busreset(); /////////edited
+ pc.printf("\n\rWrite HK success");
+ data_send_flag = 'h';
+ irpt_2_mstr = 0; //////////edited
}
- /*pdir_ss2=PTE->PDIR;
- #if PRINT2
- pc.printf("\n\rPTE->DIR = 0x%08X",pdir_ss2);
- #endif*/
- #if print
- printf("\n\rnot send\n");
+ else
+ {
+ #if baby
+ pc.printf("\n\rWrite HK failed");
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm1);
+ #endif
+ wait_ms(20); //should be atleast 7ms for correct operation but fix this value as 20ms
+ I2C_busreset();
+ #if baby2
+ pdir_tm2 = PTE->PDIR;
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm2);
+ #endif
+ }
+ }
+ else
+ {
+ #if baby1
+ pc.printf("\n\rWrite Ack failed(HK)");
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm1);
+ #endif
+ I2C_busreset();
+ #if baby2
+ pdir_tm2 = PTE->PDIR;
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm2);
#endif
}
- else if( slave.receive() == 1) // slave writes to master
+ 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)
+ wait_ms(1); //for correct values of register to be updated
+ pdir_tm1=PTE->PDIR;
+ irpt_2_mstr = 0;
+ data_send_flag = 'h';
+ if(write_ack==0)
+ {
+ while(((pdir_tm1 & 0x00000003)!=3)&& i2c_count<10)
+ {
+ wait_ms(1);
+ pdir_tm1=PTE->PDIR;
+ i2c_count++;
+ }
+ if(((pdir_tm1 & 0x00000003)==3))
+ {
+ pc.printf("\n\rWrite TM success");
+ }
+ else
+ {
+ #if baby
+ pc.printf("\n\rWrite TM failed");
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm1);
+ #endif
+ wait_ms(20); //should be atleast 7ms for correct operation but fix this value as 20ms
+ I2C_busreset();
+ #if baby2
+ pdir_tm2 = PTE->PDIR;
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm2);
+ #endif
+ }
+ }
+ else
{
- 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;
- 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;
- }
-
+ #if baby
+ pc.printf("\n\rWrite Ack failed");
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm1);
+ #endif
+ I2C_busreset();
+ #if baby2
+ pdir_tm2 = PTE->PDIR;
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm2);
+ #endif
}
- else if( slave.receive()==3 || slave.receive()==2) // slave read
+ 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,135); //read() function returns acknowledgement
+ wait_ms(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)
+ {
+ wait_ms(1);
+ pdir_tc1=PTE->PDIR;
+ i2c_count++;
+ }
+ if(((pdir_tc1 & 0x00000003)==3))
+ {
+ pc.printf("\n\n\rRead TC success");
+ if(telecommand[0] == 0x00) /////////////edited
+ FCTN_CDMS_HK_TC((uint8_t*) telecommand); /////////////edited
+ else
+ {
+ FCTN_BAE_TM_TC((uint8_t*) telecommand);
+ data_send_flag = 't';
+ irpt_2_mstr = 1;
+ }
+ }
+ else //either or both of SDA and SCL lines low
{
- 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]);
+ #if baby
+ pc.printf("\n\rRead TC failed");
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm1);
+ #endif
+ I2C_busreset();
+ #if baby2
+ pdir_tm2 = PTE->PDIR;
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm2);
#endif
- }
- //was commented here now in txt file main_i2ccomment on desktp
- BAE_MNG_I2C_STATUS=0;
- FLAG();
- }
+ gen_I_TM();
+ data_send_flag = 't';
+ irpt_2_mstr = 1; /////////////added
+ }
+ }
+ else //read() says it was not successful
+ {
+ #if baby
+ pc.printf("\n\rRead Ack failed");
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm1);
+ #endif
+ I2C_busreset();
+ #if baby2
+ pdir_tm2 = PTE->PDIR;
+ pc.printf("\n\rPTE->PDIR = 0x%08X",pdir_tm2);
+ #endif
+ //pc.printf("\n\r no data case");
+ gen_I_TM();
+ data_send_flag = 't';
+ irpt_2_mstr = 1; /////////////added
+ }
+ i2c_count = 0;
+ }
+ BAE_MNG_I2C_STATUS=0;
+ }
}
+
void FCTN_TM()
{
data_send_flag = 't';
