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

Dependencies:   mbed

Revision:
1:9efda6a3f83c
Parent:
0:e6964ff1bbcc
--- 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);