generation_mbed2

Dependencies:   202hm2_slave mbed

Fork of 202hm2_slave by Yujing Qian

Revision:
0:7c4f7de16626
Child:
1:76a206e19490
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Mar 13 21:27:49 2014 +0000
@@ -0,0 +1,135 @@
+//this is a program built for the slave mbed(bed1)
+#include "mbed.h"
+#include "MKL46Z4.h"
+
+#define buffer_size 9
+DigitalOut LED(LED_RED);
+Serial pc(USBTX,USBRX);
+
+Serial uart(PTE0, PTE1);
+static int loop_num=0;
+int state=0;
+int buffered=0;
+uint32_t T2=0;
+uint32_t T3=0;
+int delay=0;
+uint32_t mod=0;
+char buffer[buffer_size];
+int buff=0;
+uint32_t TIME(){return loop_num*mod+TPM0->CNT;}
+
+
+void sycronize(){
+    switch(state){
+    case 0:{buff=0;
+            pc.printf("state0\n");
+            while(uart.readable()&& buff<4){
+                buffer[buff]=uart.getc();buff++;}
+ 
+            pc.printf("0=%d\n",buffer[0]);
+            pc.printf("1=%d\n",buffer[1]);
+            pc.printf("2=%d\n",buffer[2]);
+            pc.printf("3=%d\n",buffer[3]);
+            T2=TIME();
+            mod=((int)buffer[3])<<24+((int)buffer[2])<<16+((int)buffer[1])<<8+((int)buffer[0]);
+                pc.printf("mod=%d",mod);
+                pc.printf("\n");
+            TPM0->MOD=mod;           
+            state++;break;}//sending a 9 char command
+    case 1: {
+        T3=TIME();
+        char* tmp=(char*)&T2;
+        pc.printf("state1\n");
+        uart.putc((*tmp));
+        uart.putc((*(tmp+1)));
+        uart.putc((*(tmp+2)));
+        uart.putc((*(tmp+3)));
+        state++;break;
+        }// send T2 value
+    case 2:{
+        
+        char* tmp=(char*)&T3;
+        uart.putc((*tmp));
+        uart.putc((*(tmp+1)));
+        uart.putc((*(tmp+2)));
+        uart.putc((*(tmp+3)));
+        state++;break;
+        }//send T3           
+    case 3:{
+        pc.printf("wait for lanch state=%d\n",state);
+            buffer[0]=uart.getc();
+            buffer[1]=uart.getc();
+            buffer[2]=uart.getc();
+            buffer[3]=uart.getc();
+            
+            loop_num=0;
+            TPM0->CNT=0x0;
+            TPM0->SC=0x00000048;
+            NVIC_DisableIRQ(TPM0_IRQn);    
+            state++;
+            break;//luanch   
+        }
+    }
+    }
+    
+void TPM0_IRQHandler(void){ 
+        //if((TPM0->SC & 0x0080)==0x0080){
+            if(LED){LED=0;}
+            else {LED=1;loop_num++;}
+            //pc.printf("MOD=%d",TPM0->MOD);
+            //pc.printf("Global_time=%d",loop_num);
+            //pc.printf(": %d\n",TPM0->CNT);
+            TPM0->SC|= 0x000000c8;
+            NVIC_ClearPendingIRQ(TPM0_IRQn);
+            //pc.printf("SC_after=%d\n",TPM0->SC);
+            //}//pc.printf("count=%d",TPM0->CNT);
+            return;               
+    }
+
+
+    
+void Syc(){    
+    state=0;
+    NVIC_DisableIRQ(TPM0_IRQn);
+    NVIC_ClearPendingIRQ(TPM0_IRQn);  
+    pc.printf("set=%d\n",state);     
+    while(state<4){sycronize();}
+      
+    }
+void Initial(){
+    LED=1;
+    SIM->SOPT2=0x07000000;
+    SIM->SCGC6=0x01000000;//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;
+    //----------------------------------------------
+    TPM0->CNT=0x0;
+    TPM0->SC=0x00000040;
+    TPM0->MOD=0x000000ff;
+    TPM0->SC=0x00000048;//0008
+    
+
+    }
+int main() {
+    Initial();    
+    pc.baud(9600);
+        
+    NVIC_SetVector(TPM0_IRQn, (uint32_t)&TPM0_IRQHandler);
+    NVIC_SetPriority(TPM0_IRQn, 1);
+    NVIC_EnableIRQ(TPM0_IRQn); 
+    char tmp;
+    pc.printf("done");
+    
+    
+    while(1){
+        if(uart.readable()){pc.printf("???\n");
+        tmp=uart.getc();pc.printf(&tmp);
+        if(tmp=='#')Syc();}
+    }
+}
\ No newline at end of file