.

Dependencies:   SDHCFileSystem mbed

Files at this revision

API Documentation at this revision

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)
 }