
.
Dependencies: SDHCFileSystem mbed
Revision 3:51134a275609, committed 2012-12-03
- Comitter:
- TickTock
- Date:
- Mon Dec 03 03:25:56 2012 +0000
- Parent:
- 2:55b2357f0cf9
- Child:
- 4:fb373a391155
- Commit message:
- both channels simultaneously TX & RX
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sat Dec 01 16:03:14 2012 +0000 +++ b/main.cpp Mon Dec 03 03:25:56 2012 +0000 @@ -76,7 +76,7 @@ //39: NC:5Vout (only available when connected as USB device) //40: VCC3.3 -extern bool LogCreated; +extern bool logOpen; void Log (char *message); void LogErr (char *message); @@ -84,7 +84,8 @@ DigitalIn CD(p17); DigitalIn PB1( p20 ); SDFileSystem sd(p5, p6, p7, p8, "sd" ); // SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name) -Ticker ticker; +Ticker ticker1; +Ticker ticker2; Timer timer; DigitalOut led1(LED1); DigitalOut led2(LED2); @@ -94,30 +95,33 @@ DigitalOut can1_SleepMode(p27); // Use pin 27 to control the sleep mode of can1 CAN can2(p30, p29); // CAN2 uses pins 30 and 29 (rx, tx) and pin 28 (rs) DigitalOut can2_SleepMode(p28); // Use pin 28 to control the sleep mode of can2 -bool logCreated = false; -char counter = 0; +bool logOpen = false; FILE *file; char fileName[32] = "" ; -char writeBuffer[512][13]; +char writeBuffer[2048][13]; int bufPointer = 0; Serial pc(USBTX, USBRX); // tx, rx default settings (9600 8N1) extern "C" void RTC_IRQHandler() { timer.reset() ; // zero ms at the-seconds-tick - file = fopen(fileName, "a"); - if (file == NULL) { - if (logCreated) - logCreated = false; - } else { - for (int i = 0; i<bufPointer; i++) { - for (int j = 0; j<13; j++){ - fprintf(file,"%c",writeBuffer[i][j]); + if ((bufPointer>1536)||((bufPointer>0)&!logOpen)) { + file = fopen(fileName, "a"); + if (file == NULL) { + logOpen = false; + } else { + int i=0; + while (i<bufPointer) { + for (int j = 0; j<13; j++){ + fprintf(file,"%c",writeBuffer[i][j]); + } + i++; } + bufPointer = 0; + led3 = !led3; + fclose(file); } - fclose(file); } - bufPointer = 0; LPC_RTC->ILR |= (1<<0); // turn on Low Bit - works } @@ -128,7 +132,7 @@ //LPC_RTC->CCR = 0x11; // use for interrupts every minute ???? //LPC_RTC->CCR = 0x00; // Stop the RTC (apparently) LPC_RTC->CCR = 0x01; // Start RTC (apparently use for interrupt every second) - // NVIC_SetPriority( RTC_IRQn, LOW_PR ); + NVIC_SetPriority( RTC_IRQn, 10 ); NVIC_EnableIRQ( RTC_IRQn ); } @@ -142,8 +146,9 @@ void readLog (){ unsigned char c; int i=0; - char lastMsgNum=0; - char curMsgNum=0; + char lastMsgNum[]={0,0}; + char curMsgNum[]={0,0}; + char canNum=0; pc.printf("printing file\n"); file = fopen(fileName, "r"); if (file == NULL) { @@ -152,14 +157,16 @@ while (!feof(file)) { c=fgetc(file); pc.printf("%02x ",c); - if (i==5){ - curMsgNum=c; + if (i==0){ + canNum=c; + }else if (i==5){ + curMsgNum[canNum]=c; } if (++i>12) { - if (curMsgNum>(lastMsgNum+1)) { + if (curMsgNum[canNum]>(lastMsgNum[canNum]+1)) { pc.printf(" ***"); } - lastMsgNum=curMsgNum; + lastMsgNum[canNum]=curMsgNum[canNum]; pc.printf("\n"); i=0; } @@ -178,7 +185,8 @@ for (int i = 5; i<13; i++){ writeBuffer[bufPointer][i]=canRXmsg.data[i-5]; } - bufPointer++; + if (bufPointer++>2047) + bufPointer=2047; } void send1() { @@ -187,47 +195,66 @@ counter++; /*can1.write(CANMessage(0x351, &counter, 1)); counter++; - can1.write(CANMessage(0x352, &counter, 1)); + /*can1.write(CANMessage(0x352, &counter, 1)); + counter++;*/ +} + +void send2() { + static char counter = 0; // use for fake data + can2.write(CANMessage(0x351, &counter, 1)); + counter++; + /*can2.write(CANMessage(0x351, &counter, 1)); + counter++; + can2.write(CANMessage(0x352, &counter, 1)); counter++;*/ } void recieve1() { CANMessage msg1; unsigned short msgTime=getTimeStamp(); + static int lastMsg1 = 0; can1.read(msg1); - //pc.printf("%sCan1 Message received: %d \n", upLine, msg1.data[0]); - if(logCreated) { - if((PB1==0)||(CD==0)) { - logCreated=false; - pc.printf("Stopping log\n", counter); - readLog(); - } else { - logCan(1, msg1); + if (msg1.id!=0x000) { + if (msg1.data[0]>(lastMsg1+1)) { + pc.printf("%sCan1 Message %d missed! \n", upLine, lastMsg1+1); } + lastMsg1=msg1.data[0]; + if(logOpen) { + if((PB1==0)||(CD==0)) { + logOpen=false; + pc.printf("Stopping log\n\n"); + wait(1.1); + readLog(); + } else { + logCan(1, msg1); + } + } + led1 = !led1; } - led2 = !led2; } void recieve2() { CANMessage msg2; unsigned short msgTime=getTimeStamp(); - static int lastMsg = 0; + static int lastMsg2 = 0; can2.read(msg2); - if (msg2.data[0]>(lastMsg+1)) { - pc.printf("%sCan2 Message %d missed! \n\n\n", upLine, msg2.data[0]-1); + if (msg2.id!=0x000) { + if (msg2.data[0]>(lastMsg2+1)) { + pc.printf("%sCan2 Message %d missed! \n", upLine, lastMsg2+1); + } + lastMsg2=msg2.data[0]; + if(logOpen) { + if((PB1==0)||(CD==0)) { + logOpen=false; + pc.printf("Stopping log\n\n"); + wait(1.1); + readLog(); + } else { + logCan(2, msg2); + } + } + led2 = !led2; } - lastMsg=msg2.data[0]; - //pc.printf("%sCan2 Message received: %d \n", upLine, msg2.data[0]); - if(logCreated) { - if((PB1==0)||(CD==0)) { - logCreated=false; - pc.printf("Stopping log\n\n", counter); - readLog(); - } else { - logCan(2, msg2); - } - } - led3 = !led3; } int main() { @@ -262,7 +289,7 @@ if(file==NULL){ pc.printf("\nUnable to open canlog\n\n\n\n"); } else { - logCreated = true; + logOpen = true; pc.printf("\nStarting Can Log %s\n\n\n\n",fileName); unsigned long secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900 tsMsg.id=0xfff; @@ -277,7 +304,6 @@ tsMsg.data[7]=0xff; logCan(0,tsMsg); //write full timestamp fclose(file); - } } else { pc.printf("\nNo SDRAM Inserted.\n\n\n\n"); @@ -286,5 +312,6 @@ //.02 logs all; .01 misses some when logging; //.05 gets all when not logging;.02 misses some always - ticker.attach(&send1, .002); //start sending messages + ticker1.attach(&send1, .0052); //start sending messages + ticker2.attach(&send2, .0051); //start sending messages } \ No newline at end of file