generation_mbed2

Dependencies:   202hm2_slave mbed

Fork of 202hm2_slave by Yujing Qian

main.cpp

Committer:
allonq
Date:
2014-03-14
Revision:
2:4457eb1e9b83
Parent:
1:76a206e19490
Child:
3:7544d38698a3

File content as of revision 2:4457eb1e9b83:

//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);
int loop_num=0;
int state=0;
int buffered=0;
uint32_t T2=0;
uint32_t T3=0;
int delay=0;
int mod=0;
char buffer[buffer_size];
int buff=0;
uint32_t TIME(){return loop_num*(TPM0->MOD)+(TPM0->CNT);}


void synchronize(){
    //pc.printf("state=%d\n",state);
    switch(state){
    case 0:{
            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();

            /*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;//buff=0;
            //pc.printf("MOD=%d\n",mod);           
            state++;break;//sending a 9 char command
            //else {break;}
            }
    case 1: {
        T3=TIME();
        pc.printf("T3_test=%d\n",T3);
        char* tmp=(char*)&T2;
        uart.putc((*tmp));
        uart.getc();
        uart.putc((*(tmp+1)));
        uart.getc();
        uart.putc((*(tmp+2)));
        uart.getc();
        uart.putc((*(tmp+3)));
        
        state++;break;
        }// send T2 value
    case 2:{
        
        char* tmp=(char*)&T3;
        uart.putc((*tmp));
        uart.getc();
        uart.putc((*(tmp+1)));
        uart.getc();
        uart.putc((*(tmp+2)));
        uart.getc();
        uart.putc((*(tmp+3)));
        state++;break;
        }//send T3           
    case 3:{
        //pc.printf("wait for lanch state=%d\n",state);
            uart.getc();
            uart.putc(0);
            uart.getc();
            uart.putc(0);
            uart.getc();
            uart.putc(0);
            uart.getc();
            
            
            loop_num=0;
            TPM0->CNT=0x0;
            TPM0->SC=0x00000048;
            //NVIC_EnableIRQ(TPM0_IRQn);
            pc.printf("T2=%d\n",T2);    
            pc.printf("T3=%d\n",T3);   
            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\n",TIME());
            //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){synchronize();}
      
    }
void Initial(){
    for(int i=0;i<4;i++)buffer[i]=255;
    loop_num=0;
    LED=1;
    SIM->SOPT2=0x07000000;
    SIM->SCGC6=0x01000000;//enable TPM 0,1
    TPM0->SC=0x0;
    
    TPM0->CNT=0x0;
    TPM0->SC=0x00000040;
    TPM0->MOD=0x00000fff;
    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();}
    }
}