Siva ram
/
PLYD_CDMS24
PYLD_CDMS
Fork of PLYD_CDMSee by
Diff: main.cpp
- Revision:
- 5:f22f960f804b
- Parent:
- 4:ec3f71ef8732
diff -r ec3f71ef8732 -r f22f960f804b main.cpp --- a/main.cpp Sat Nov 07 09:52:57 2015 +0000 +++ b/main.cpp Sun Dec 13 12:59:49 2015 +0000 @@ -12,20 +12,24 @@ const int addr1 = (0x20<<1|0); const int addr2 = (0x20<<1|1); //Timer Siv ; +int FLAG = 1 ; I2C master (D14,D15); InterruptIn PYLD_I2C_Int(PTA13); //gitalIn test(PTA13); SPISlave device(PTD6, PTD7, PTD5,PTD4 ); // mosi, miso, sclk, ssel --> using SPI1 InterruptIn PYLD_SPI_Interrupt(PTD2); DigitalOut flash(LED4); -int payloadBins = 3096; +int payloadBins = 1024; float Stability_delay = 0.005228 ;// 0.005228 +#define CRC16 0x8010 + +uint16_t CRC_16_Calc(const char *data, uint16_t size); Serial pc(USBTX, USBRX); // tx, rx --> serial feedback for debug void payloadProcess() { - + flash = !flash; //wait(Stability_delay); // wait after interrupt for stability unsigned short scienceRawPacket[payloadBins]; @@ -49,6 +53,10 @@ int dt3,pia = 0; bool f = 1; char rdata[140],ta2; +int loop=1; +char *writedata = new char; +char data = 1,data1 = 2, data2 = 3, test[136] ; +char pia1[13] , siv[13] ; void readds() { @@ -59,7 +67,7 @@ //while(!f) //{ - f= master.read(addr1,rdata,135); + f= master.read(addr1,siv,13); //} // master.start(); //for(int i = 0;i<26;i++) @@ -85,9 +93,95 @@ } -int loop=1; -char *writedata = new char; -char data = 1,data1 = 2, data2 = 3, test[136] ; + + +void INIT_TC_TEMP (void) +{ + + uint16_t CRC_VALUE = 0 ; + + pia1[0] = 123 ; + pia1[1] = 0x3F ; + pia1[2] = 0x81 ; + pia1[3] = 0xD0 ; + pia1[4] = 0x00 ; + pia1[5] = 0x00 ; + pia1[6] = 0x00 ; + pia1[7] = 0x00 ; + pia1[8] = 0x00 ; + CRC_VALUE = CRC_16_Calc(pia1,9) ; + pia1[9] = (char)((CRC_VALUE >> 8) & 0xff); + pia1[10] = (char)((CRC_VALUE >> 0) & 0xff); + + +} + +int CHECK_TM (void) +{ + uint16_t CRC_Value = 0 , check = 0; + CRC_Value = CRC_Value | ((uint16_t) siv[11]) ; + CRC_Value = CRC_Value << 8; + CRC_Value = CRC_Value | ((uint16_t) siv[12]) ; + if (CRC_Value == CRC_16_Calc (siv,11)) + { + check++; + } + else + { + return(10); + } + if ( siv[1] == 123 ) + { + check++; + } + else + { + return (9); + } + if ( siv[3] == 192 ) + { + check ++ ; + } + else + { + return (8); + } + + FLAG = 0 ; + return (check) ; +} + +uint16_t CRC_16_Calc(const char *data, uint16_t size) +{ + uint16_t CRC_OUT = 0; + int bits_read = 0, bit_flag; + + + + while(size > 0) + { + bit_flag = CRC_OUT >> 15; + + /* Get next bit: */ + CRC_OUT <<= 1; + CRC_OUT |= (*data >> (7 - bits_read)) & 1; + + /* Increment bit counter: */ + bits_read++; + if(bits_read > 7) + { + bits_read = 0; + data++; + size--; + } + + /* Cycle check: */ + if(bit_flag) + CRC_OUT ^= CRC16; + + } + return CRC_OUT; +} void FUNC_MASTER_WRITE(void) @@ -106,7 +200,7 @@ while(loop) { - bool check = (bool)master.write(addr,test,135); + bool check = (bool)master.write(addr,pia1,11); // bool check = (bool)master.write(addr,&test[3],1,false); // check = (bool)master.write(addr,&test[4],1); @@ -185,6 +279,7 @@ pc.printf("Example code demonstarting Payload - CDMS SPI & I2C communication!\r\n"); PYLD_SPI_Interrupt.rise(&payloadProcess); PYLD_I2C_Int.rise(&readds); + INIT_TC_TEMP(); while(1) { @@ -192,11 +287,54 @@ wait(1); //dt1 = rdata[0] ; //dt2 = rdata[1] ; - for(P = 0 ; P < 135 ; P++ ) + for(P = 0 ; P < 13 ; P++ ) { - pc.printf("Temperature %d \n\r",rdata[P]); - } - pc.printf(" I2C data register %d \n", I2C1 -> S); + pc.printf("Temperature %d \n\r",siv[P]); + } + // while ( FLAG == 1) + // {} + pc.printf(" Packect Recieved \n \r"); + + if( CHECK_TM() == 3 ) + { + pc.printf(" ACK Recieved \n \r"); + } + else if ( CHECK_TM() == 10 ) + { + pc.printf("Error Code 10 : CRC_FAIL \n \r" ); + } + else if ( CHECK_TM() == 9 ) + { + pc.printf("Error Code 9 : PSC FAIL \n \r" ); + } + else if ( CHECK_TM() == 8 ) + { + pc.printf("Error Code 8 : NACK ACK FAIL \n \r" ); + } + wait (1) ; + + for(P = 0 ; P < 13 ; P++ ) + { + pc.printf("Temperature %d \n\r",siv[P]); + } + + pc.printf(" Packect Recieved \n \r"); + uint16_t CRC_Value = 0 ; + CRC_Value = CRC_Value | (siv[11]) ; + CRC_Value = CRC_Value << 8; + CRC_Value = CRC_Value | (siv[12]) ; + + if (CRC_Value == CRC_16_Calc (siv,11)) + { + pc.printf("CRC_PASS Temperature of PYLD uC is : %d \n \r",siv[3]); + } + else + { + pc.printf("Data CRC_Fail \n \r"); + } + + + pc.printf(" I2C data register %d \n \r", I2C1 -> S); // pc.printf("Temperature %d \n\r",dt1); // pc.printf("Temperature2 %d \n\r",dt2); //pc.printf("Temperature3 %d \n\r",dt3);