
.
Dependencies: SDHCFileSystem mbed
Revision 10:663bff0a6144, committed 2012-12-05
- Comitter:
- TickTock
- Date:
- Wed Dec 05 01:38:40 2012 +0000
- Parent:
- 9:8396b76e42fc
- Child:
- 11:d97071bf877b
- Commit message:
- works
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Dec 04 19:49:26 2012 +0000 +++ b/main.cpp Wed Dec 05 01:38:40 2012 +0000 @@ -94,8 +94,6 @@ 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 ticker1; -//Ticker ticker2; Timer timer; DigitalOut led1(LED1); DigitalOut led2(LED2); @@ -111,18 +109,17 @@ char writeBuffer[maxBufLen][13]; int writePointer = 0; int secsIdle = canTimeout; -bool canActive = false; -Serial pc(USBTX, USBRX); // tx, rx default settings (9600 8N1) +bool canIdle = true; +Serial pc(USBTX, USBRX); extern "C" void RTC_IRQHandler() { timer.reset(); // zero ms at the-seconds-tic - canActive=(++secsIdle<canTimeout); + canIdle=(++secsIdle>canTimeout); LPC_RTC->ILR |= (1<<0); // clear interrupt to prepare for next } extern "C" void RTC_Init (void) { LPC_RTC->ILR=0x00; // set up the RTC interrupts - //LPC_RTC->CIIR=0x02; // interrupts each minute LPC_RTC->CIIR=0x01; // interrupts each second LPC_RTC->CCR = 0x01; // Clock enable //NVIC_SetPriority( RTC_IRQn, 10 ); @@ -164,7 +161,7 @@ i=0; } } - pc.printf("\n\n\n\n"); + pc.printf("\n\n"); fclose(file); } @@ -195,9 +192,8 @@ pc.printf("%sCan1 Message %d missed! \n", upLine, lastMsg1+1); } lastMsg1=msg1.data[0]; - if(logOpen) { + if(logOpen) logCan(1, msg1); - } led1 = !led1; } } @@ -213,23 +209,20 @@ pc.printf("%sCan2 Message %d missed! \n", upLine, lastMsg2+1); } lastMsg2=msg2.data[0]; - if(logOpen) { + if(logOpen) logCan(2, msg2); - } led2 = !led2; } } int main() { int readPointer=0; - pc.baud(460800); // change serial interface to pc to 115200, 8N1 + pc.baud(460800); // change serial interface to pc to 450800, 8N1 CANMessage tsMsg; can1.frequency(500000); can2.frequency(500000); - //can1_SleepMode = 0; // Enable TX - //can2_SleepMode = 0; // Enable TX - can1_SleepMode = 1; // Turn on Monitor_only Mode - can2_SleepMode = 1; // Turn on Monitor_only Mode + can1_SleepMode = 1; // Monitor_only Mode + can2_SleepMode = 1; // Monitor_only Mode CD.mode(PullUp) ; //SDRAM Chip Detect PB1.mode(PullUp) ; //Pushbutton 1 can1.attach(&recieve1); @@ -274,7 +267,8 @@ } do { - if (((writePointer+maxBufLen-readPointer)%maxBufLen)>(maxBufLen/2)||!canActive||(PB1==0)) { + if (((writePointer+maxBufLen-readPointer)%maxBufLen)>(maxBufLen/2)||canIdle||(PB1==0)) { + // Dump buffer if > 1/2 full, canbus has stopped, or PB1 pressed if (logOpen) { file = fopen(fileName, "ab"); if (file == NULL) { @@ -291,23 +285,26 @@ led3 = !led3; fclose(file); } - } + } // if (logOpen) } - if (!canActive) { // canbus idle --> sleep to save power + if (canIdle) { // canbus idle --> sleep to save power LPC_RTC->CIIR=0x00; // block RTC interrupts - __wfi(); // freeze until can activity - LPC_RTC->CIIR=0x01; // interrupts each second + led1=0; + led2=0; + led3=0; + led4=0; + while (secsIdle>canTimeout) + __wfi(); // freeze CPU and wait for interrupt (from canbus) + LPC_RTC->CIIR=0x01; // re-enable RTC interrupts } - wait(0.25); // Keep logging until button pushed or SDRAM removed - } while ((PB1==1)&&(CD==1)&&canActive); // keep going until button or SDram removed + wait(0.25); // We get >2K messages per second + } while ((PB1==1)&&(CD==1)&&!canIdle); // keep going until button or SDram removed logOpen=false; pc.printf("Stopping log\n\n"); - if (CD==1) - readLog(); } else { pc.printf("\nNo SDRAM Inserted.\n\n\n\n"); - } + } //if (CD==1) wait(1); } //while (true) }