jnlj

Dependencies:   mbed-rtos mbed

Fork of TFOX_CDMS_VR_1_0_WORKING by Team Fox

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "func_head.h"
00004 #include "i2c.h"
00005 #include "SDCard.h"
00006 #include "HK_CDMS.h"
00007 #define HK_DATA 25
00008 #define HK_ITER 5
00009 Serial pc(USBTX,USBRX);
00010 
00011 extern SPISlave pl_spi ; // mosi, miso, sclk, ssel --> using SPI1
00012 
00013 InterruptIn pl_sc_data(PTC3);
00014 InterruptIn cdms_rcv_tc(PTC12);
00015 InterruptIn bae_tm_rcv(PTC11);
00016 InterruptIn pl_tm_rcv(PTC10);
00017 extern I2C master;
00018 extern DigitalOut irpt_2_slv;
00019 
00020 char i2c_data[25];
00021 int hk_count=0;
00022 uint8_t hk_data[512];
00023 uint8_t rtc_data[8];
00024 uint64_t hk_block_number = 1;
00025 
00026 /*****************************************************************Threads USed*************************************************************************/
00027 Thread *ptr_t_hk_acq;              //pointer:::::::::to read state of one thread from another
00028 Thread *ptr_t_sc_data;
00029 Thread *ptr_t_tc;
00030 Thread *ptr_t_tm;
00031 Thread *ptr_t_fault;
00032 Thread *ptr_t_wdt;
00033 
00034 void T_CDMS_RLY_TC(void const *args)
00035 {
00036     while(1)
00037     {
00038         Thread::signal_wait(0x2);
00039         pc.printf("in T_CDMS_RLY_TC\r\n");
00040         FUNC_CDMS_RLY_TC();
00041     }
00042 }
00043 
00044 void T_CDMS_RLY_TM(void const *args)
00045 {
00046     while(1)
00047     {
00048         Thread::signal_wait(0x3);
00049         pc.printf("in T_CDMS_RLY_TM\r\n");
00050         FUNC_CDMS_RLY_TM();
00051     }
00052 }
00053 
00054 void T_PL_RCV_SC_DATA(void const *args)
00055 {
00056     while(1)
00057     {
00058         Thread::signal_wait(0x1);
00059         pc.printf("in T_PL_RCV_SC_DATA\r\n");
00060         FUNC_PL_RCV_SC_DATA();
00061     }
00062 }
00063          
00064 void TSC_CDMS_HK_MAIN(void const *args)
00065 {
00066     pc.printf("in FUNC_CDMS_HK_MAIN()\r\n");
00067     FCTN_MASTER_I2C('h' , i2c_data );
00068     FUNC_CDMS_RD_RTC(rtc_data);
00069     for(int i=(hk_count%(HK_ITER+1))*(HK_DATA+8);i<(hk_count%(HK_ITER+1))*(HK_DATA+8)+8;i++)
00070     {
00071         hk_data[i] = rtc_data[i-(hk_count%(HK_ITER+1))*(HK_DATA+8)];
00072     }
00073     for(int i=(hk_count%(HK_ITER+1))*(HK_DATA+8)+8;i<(hk_count%(HK_ITER+1))*(HK_DATA+8)+8+HK_DATA;i++)
00074     {
00075         hk_data[i] = i2c_data[i-(hk_count%(HK_ITER+1))*(HK_DATA+8)+8];
00076     }
00077     hk_count++;
00078     if(hk_count%HK_ITER==0)
00079     {
00080         for(int i=(hk_count%(HK_ITER+1))*(HK_DATA+8)+8+HK_DATA;i<512;i++)
00081         {
00082             hk_data[i] = '/0';
00083         }
00084         hk_count = 0;
00085         FUNC_WR_SD(hk_data,hk_block_number);
00086         for(int i=0;i<512;i++)
00087         {
00088             hk_data[i] = '/0';
00089         }
00090         FUNC_RD_SD(hk_data,hk_block_number);
00091         hk_block_number++;
00092         printf("\n\r sd card hk data\n");
00093         for(int i=0;i<512;i++)
00094         {
00095             pc.printf("%d|",hk_data[i]);
00096         }
00097        // FCTN_CDMS_HK_MAIN();
00098     }
00099     pc.printf("\n\r hk exited\n");
00100 }
00101 
00102 void ISR_PL_RCV_SC_DATA()
00103 {
00104     ptr_t_sc_data->signal_set(0x1);
00105 }
00106 
00107 void ISR_CDMS_RLY_TC()
00108 {
00109     ptr_t_tc->signal_set(0x2);
00110 }
00111 
00112 void ISR_CDMS_RLY_TM()
00113 {
00114     ptr_t_tm->signal_set(0x3);
00115 }
00116 
00117 int main() {
00118     printf("\n\r CDMS Activated \n");
00119     ptr_t_tc = new Thread (T_CDMS_RLY_TC);
00120     ptr_t_tm = new Thread (T_CDMS_RLY_TM);
00121     ptr_t_sc_data = new Thread (T_PL_RCV_SC_DATA);
00122     master.frequency(100000);
00123     RtosTimer TIMER_HK_ACQ(TSC_CDMS_HK_MAIN,osTimerPeriodic);
00124     TIMER_HK_ACQ.start(10000);
00125     irpt_2_slv = 1;
00126     pl_sc_data.rise(&ISR_PL_RCV_SC_DATA);
00127     cdms_rcv_tc.rise(&ISR_CDMS_RLY_TC);
00128     bae_tm_rcv.rise(&ISR_CDMS_RLY_TM);
00129     pl_tm_rcv.rise(&ISR_CDMS_RLY_TM);
00130     
00131     pl_spi.format(8,3);  // SPI format --> 16 bits, mode = 0
00132     pl_spi.frequency(1000000);
00133     
00134     FCTN_CDMS_HK_INIT();
00135     FUNC_INIT_RTC();
00136     int *status_sd = FUNC_INIT_SD();
00137     
00138     while(1);
00139 }