B.3 : THE 6 HOUR PROGRAM WITH 1 PPS SIGNAL THE MASTER TO BE CONNECTED TO 11 PIN.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
manujose
Date:
Tue Dec 14 23:26:02 2010 +0000
Parent:
0:e6964ff1bbcc
Commit message:
hello

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
problemb1.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sat Dec 04 05:09:15 2010 +0000
+++ b/main.cpp	Tue Dec 14 23:26:02 2010 +0000
@@ -18,6 +18,7 @@
 static struct pt pt1,pt2,pt3;
 int main() {
  sync.baud(460800);
+ pc.baud(115200);
 wait(2); 
 
     pc.printf("ENTERING MAIN JOBS\n");
@@ -29,13 +30,13 @@
 
 // 1 PPS 
     pps.tv_sec = 10; 
-    pps.tv_usec = 500000; 
-     ideal_trg_time[0].tv_sec = 10; 
-      ideal_trg_time[0].tv_usec  =500000; 
+    pps.tv_usec = 700000; 
+     //ideal_trg_time[0].tv_sec = 10; 
+      //ideal_trg_time[0].tv_usec  =700000; 
       
    runAtTime(&pinToggle,&pps); 
     
-    
+    myled = 1; 
     //On any sync request from slave, respond to it
     sync.attach(&resp_sync_request);
 
@@ -51,7 +52,7 @@
 
     timeval rt;
 
-    runAtTrigger(&reportToggle);
+   //runAtTrigger(&reportToggle);
 
 
     char c;
--- a/problemb1.h	Sat Dec 04 05:09:15 2010 +0000
+++ b/problemb1.h	Tue Dec 14 23:26:02 2010 +0000
@@ -5,7 +5,7 @@
 #include "pt-sem.h"
 #include "decl.h"
 #include "pqueue.h"
-
+void pinToggle(void);
 pQueue globalQ;
 unsigned int gTime =0;
 int B; 
@@ -33,8 +33,8 @@
     // Select PIN 
     
     LPC_PINCON->PINSEL0 |= (0xf << 8);
-    LPC_TIM2->CCR |= 0x07;// doing capture register for now, so use timer 2 
-   
+    //LPC_TIM2->CCR |= 0x07;// doing capture register for now, so use timer 2 
+   LPC_TIM2->CCR |= 0x05;
     LPC_TIM2->MR0 = RESET_42;
     LPC_TIM2->MCR = 3;           // Interrupt, Stop, and Reset on match
  
@@ -74,45 +74,48 @@
 void Timer0_IRQHandler(void) {
     // LPC_TIM0->IR=0xff;
     //LPC_TIM0->MR0 = 0x5370;
+   // pc.printf(" THE INTERERUPT\n");
     if (LPC_TIM2->IR&1) {
         gTime++;
   //  pc.printf("\ngtime = %X",LPC_TIM2->IR); 
     } if ( (LPC_TIM2->IR >> 1)&1 ){ //RUN THE RUNAT TIME HIT
-        qEle *ele = pop(&globalQ);
+     // M  qEle *ele = pop(&globalQ);
 
-        
-        ele->foo();
-
-        free(ele);
+     //   pc.printf("RUN AT TIME TRIGGERED\n");
+        //M ele->foo();
+        pinToggle();
+       //M globalQ.head->foo();
+        // M free(ele);
         
     }
      if(  (LPC_TIM2->IR >> 4 )& 1){ // run report toggle 
     timeval curT;
     unsigned int nMSec = (LPC_TIM2->CR0)/CLK_FRQ;
+ //   pc.printf(" THE SEC = %d \n",nMSec);
     unsigned int nSec = nMSec/1000000;
     curT.tv_sec = gTime*42 + nSec;
     curT.tv_usec = nMSec-(nSec*1000000);  
     gtrigFunc(&curT);
       
      } 
-     
+    
     //check if more ele for schedule this time ?
-    if ((globalQ.numEle >0) && (globalQ.head->sched ==0)&& (globalQ.head->t.tv_sec <((gTime+1)*42))) {
-        globalQ.head->sched = 1;
+    //M if ((globalQ.numEle >0) && (globalQ.head->sched ==0)&& (globalQ.head->t.tv_sec <((gTime+1)*42))) {
+      //M  globalQ.head->sched = 1;
         
        // LPC_TIM0->MR1 = (globalQ.head->t.tv_sec-gTime*42)*96000000 +globalQ.head->t.tv_usec*96;
-        LPC_TIM2->MR1 = (globalQ.head->t.tv_sec-gTime*42)*CLK_FREQUENCY +globalQ.head->t.tv_usec*CLK_FRQ;
-        LPC_TIM2->MCR |= 8;
-        pc.printf("\n MR1 = %X",LPC_TIM2->MR1); 
+       //M LPC_TIM2->MR1 = (globalQ.head->t.tv_sec-gTime*42)*CLK_FREQUENCY +globalQ.head->t.tv_usec*CLK_FRQ;
+       //M LPC_TIM2->MCR |= 8;
+       // pc.printf("\n MR1 = %X",LPC_TIM2->MR1); 
         
         
-    } else if (globalQ.head->sched == 0) //NO events in this gTime update yet .
-    { //turn off the match regiester 1 interrupts.
-        LPC_TIM2->MCR &= 3;
-    }
+   //M } else if (globalQ.head->sched == 0) //NO events in this gTime update yet .
+   //M { //turn off the match regiester 1 interrupts.
+   //M     LPC_TIM2->MCR &= 3;
+    //M}
 
-    timeval t;
-    getTime(&t);
+  //  timeval t;
+//    getTime(&t);
     LPC_TIM2->IR = 0xff;
   //  pc.printf("INCREMENTING COUNTER or event %d  \n",t.tv_sec);
 }
@@ -142,19 +145,28 @@
     }
     return 0;
 }
+int x =0;
 int runAtTime(void (*schedFunc)(void), timeval *tv) {
     int ret =0;
-    ret = enqueue(&globalQ, *tv, schedFunc);
+    if(!x)
+    {
+    x=1;
+     ret = enqueue(&globalQ, *tv, schedFunc);
+    }
+  //   pc.printf("The sec = %d and pps = %d\n",tv->tv_sec, tv->tv_usec);
+    globalQ.head->t.tv_sec = tv->tv_sec;
+    globalQ.head->t.tv_usec = tv->tv_usec;
     if (tv->tv_sec < (gTime+1)*42) {
 
-        if (globalQ.head->sched == 0) {
-        
+      //  if (globalQ.head->sched == 0) {
+       
             LPC_TIM2->MR1 = ((globalQ.head->t.tv_sec%42 )*CLK_FREQUENCY+(globalQ.head->t.tv_usec*CLK_FRQ));
             globalQ.head->sched = 1;
+      //  pc.printf("SCHEUDLIN MR1 =%X and TC = %X\n",LPC_TIM2->MR1,LPC_TIM2->TC);     
             LPC_TIM2->MCR |= 8;
-        }
+       // }
     }
-    return ret;
+    return 1;
 }
 void trigEX(timeval *tv) {
     pc.printf(" Triggered at %d\n",tv->tv_sec);
@@ -164,7 +176,8 @@
     unsigned int nMSec = (LPC_TIM2->CR0)/CLK_FRQ;
     unsigned int nSec = nMSec/1000000;
     curT.tv_sec = gTime*42 + nSec;
-    curT.tv_usec = nMSec-(nSec*1000000);  
+    curT.tv_usec = nMSec-(nSec*1000000);
+ //   pc.printf("nMsec and nSec = %d \n",nMSec);  
     gtrigFunc(&curT);
 }
 void runAtTrigger(void(*trigFunc)(timeval *tv)) {
@@ -210,9 +223,20 @@
 void pinToggle(void)
 {
     toggle = !toggle;
-    pc.putc('T'); 
-    pps.tv_sec++; 
-    runAtTime(&pinToggle,&pps);  
+    myled =!myled;
+ //   pc.putc('T'); 
+      pps.tv_usec+=500000;
+    if(pps.tv_usec == 1200000)
+    {
+       pps.tv_usec = 200000;
+       pps.tv_sec++; 
+    }
+    
+            LPC_TIM2->MR1 = (pps.tv_sec%42 )*CLK_FREQUENCY+(pps.tv_usec*CLK_FRQ);
+           
+      //  pc.printf("SCHEUDLIN MR1 =%X and TC = %X\n",LPC_TIM2->MR1,LPC_TIM2->TC);     
+            LPC_TIM2->MCR |= 8;
+    //M runAtTime(&pinToggle,&pps);  
 }
 
 
@@ -229,14 +253,16 @@
     // slv_diff = (rt->tv_sec - ideal_trg_time[ideal_trg_time_index].tv_sec)*1000000 + 
     // rt->tv_usec - ideal_trg_time[ideal_trg_time_index].tv_usec;   
      
-    // pc.printf("\n %d %d    %d %d ", rt->tv_sec, rt->tv_usec, ideal_trg_time[ideal_trg_time_index].tv_sec, \
+//    pc.printf("\n %d %d  \n", rt->tv_sec, rt->tv_usec);
     // ideal_trg_time[ideal_trg_time_index].tv_usec); 
      
-          ideal_trg_time_index++; 
+        //  ideal_trg_time_index++; 
 //1 pps part. 
-slv_diff = rt->tv_usec -ideal_trg_time[0].tv_usec; 
+
+slv_diff = rt->tv_usec - pps.tv_usec; 
+
 //ideal_trg_time[0].tv_sec++ ;
-ideal_trg_time_index--; 
+//ideal_trg_time_index--; 
  
  
      pc.printf("%\n  diff = %d",slv_diff);