//EE 202 hm2 //This is a program built for the mbed1(master mbed) in generation mode //This code has been tested and should be function, if you has any problem, //please mail me.

Dependencies:   mbed

Revision:
1:55f3661a2050
Parent:
0:fac0542384d7
Child:
2:1c7e1110ac61
--- a/main.cpp	Thu Mar 13 21:28:39 2014 +0000
+++ b/main.cpp	Fri Mar 14 02:04:39 2014 +0000
@@ -13,7 +13,7 @@
 Serial pc(USBTX,USBRX);
 Serial uart(PTE0, PTE1);
 
-static int loop_num=0;
+int loop_num=0;
 int state=0;
 uint32_t T1=0;
 uint32_t T2=0;
@@ -25,8 +25,8 @@
 bool cmd_received=false;
 int BBBbuff=0;
 char buffer[4];
-
-uint32_t TIME(){return loop_num*Mod+TPM0->CNT;}
+int buff=0;
+uint32_t TIME(){return loop_num*(TPM0->MOD)+(TPM0->CNT);}
 
 void receive_handler(){
     while( pc.readable() && BBBbuff<BBBbuff_size){
@@ -46,40 +46,57 @@
     }
 void TPM1_IRQHandler(void);
 
-void sycronize(uint32_t Cmd_mod){
+void synchronize(uint32_t Cmd_mod){
     switch(state){
     case 0: {
 
         
         char* tmp=(char*)&Cmd_mod;
-        uint32_t T1=TIME();
+        T1=TIME();
         pc.printf("T1=%d\n",T1);
         uart.putc((*tmp));pc.printf("0=%d\n",*tmp);
-        uart.putc((*(tmp+1)));pc.printf("1=%d\n",(*(tmp+1)));   
-        uart.putc((*(tmp+2)));pc.printf("2=%d\n",(*(tmp+2)));  
-        uart.putc((*(tmp+3)));pc.printf("3=%d\n",(*(tmp+3)));  
-        pc.printf("T1 done%d\n");
+        uart.getc();
+        uart.putc((*(tmp+1)));pc.printf("1=%d\n",(*(tmp+1)));
+        uart.getc();   
+        uart.putc((*(tmp+2)));pc.printf("2=%d\n",(*(tmp+2)));
+        uart.getc();  
+        uart.putc((*(tmp+3)));pc.printf("3=%d\n",(*(tmp+3)));
+         pc.printf("T1.5=%d",TIME()); 
+        //pc.printf("T1 done%d\n");
         state++;
         break;}//sending a 5 char command
     case 1:{
+            
             buffer[0]=uart.getc();
+            uart.putc(0);
             buffer[1]=uart.getc();
+            uart.putc(0);
             buffer[2]=uart.getc();
+            uart.putc(0);
             buffer[3]=uart.getc();
             T4=TIME();
-            T2=((int)buffer[0])<<24+((int)buffer[1])<<16+((int)buffer[2])<<8+((int)buffer[3]);         
+            T2=((int)buffer[3]<<24)+((int)buffer[2]<<16)+((int)buffer[1]<<8)+((int)buffer[0]);         
+            //pc.printf("T2=%d",T2);
             state++;break;
         }//receiving t2 from slave
                    
     case 2:{
             buffer[0]=uart.getc();
+            uart.putc(0);
             buffer[1]=uart.getc();
+            uart.putc(0);
             buffer[2]=uart.getc();
+            uart.putc(0);
             buffer[3]=uart.getc();
             //receiveing t3            
-            T3=((int)buffer[0])<<24+((int)buffer[1])<<16+((int)buffer[2])<<8+((int)buffer[3]);
+            T3=((int)buffer[3]<<24)+((int)buffer[2]<<16)+((int)buffer[1]<<8)+((int)buffer[0]);
             
             delay= (T4-T3+T2-T1)/2;
+            pc.printf("delay=%d\n",delay);
+            pc.printf("T1=%d\n",T1);
+            pc.printf("T2=%d\n",T2);
+            pc.printf("T3=%d\n",T3);
+            pc.printf("T4=%d\n",T4);
             //delay=0x0000ffff;
             TPM1->MOD=delay;
             
@@ -88,12 +105,15 @@
             
             //NVIC_SetVector(TPM1_IRQn, (uint32_t)&TPM1_IRQHandler);
             //NVIC_SetPriority(TPM0_IRQn, 0);
-            //NVIC_EnableIRQ(TPM1_IRQn);
+            NVIC_EnableIRQ(TPM1_IRQn);
             // open tpm1
             
-            uart.putc(0xff);
+            uart.putc(0);
+            uart.getc();
             uart.putc(0xff);
-            uart.putc(0xff);
+            uart.getc();
+            uart.putc(0);
+            uart.getc();
             uart.putc(0xff);     
             state++;
             break;//}
@@ -125,7 +145,7 @@
             //TPM0->SC= 0x000000c8;        
             TPM0->CNT=0x0;
             TPM0->SC=0x00000048;
-            NVIC_EnableIRQ(TPM0_IRQn);
+            //NVIC_EnableIRQ(TPM0_IRQn);
             pc.printf("AfterMOD=%d\n",TPM0->MOD);
             //LED=1;
             
@@ -142,12 +162,12 @@
     }
     
 void Syc(uint32_t Cmd_mod){
-    NVIC_DisableIRQ(TPM0_IRQn);
-    NVIC_ClearPendingIRQ(TPM0_IRQn);    
+    //NVIC_DisableIRQ(TPM0_IRQn);
+    //NVIC_ClearPendingIRQ(TPM0_IRQn);    
     state=0; 
     pc.printf("set=%d\n",state);
     uart.putc('#');     
-    while(state<3){sycronize(Cmd_mod);}
+    while(state<3){synchronize(Cmd_mod);}
       
     }
     
@@ -156,18 +176,7 @@
     SIM->SOPT2=0x07000000;
     SIM->SCGC6=0x03000000;//enable TPM 0,1
     TPM0->SC=0x0;
-    //-------------------CnSC-----------------------
-    volatile uint32_t * ptrMyReg;
-    volatile uint32_t prev;
-    ptrMyReg = (volatile uint32_t *) 0x4003800C;//C0SC 
-    prev = *ptrMyReg;
-    prev = prev | 0x00000040;
-    *ptrMyReg = prev;
-    ptrMyReg = (volatile uint32_t *) 0x4003900C;//C1SC
-        prev = *ptrMyReg;
-    prev = prev | 0x00000040;
-    *ptrMyReg = prev;
-    //----------------------------------------------
+
     TPM0->CNT=0x0;
     TPM0->SC=0x00000040;
     TPM0->MOD=0x0000bb80;
@@ -179,7 +188,7 @@
     TPM1->SC=0x00000008;//0008
     }
 int main() {
-
+    loop_num=0;
     cmd_received=false;
     pc.attach(&receive_handler);    
     int CMD_MOD=0;