//EE 202 hm2 //This is a program built for the mbed2 monitor mode //This code has been tested and should be function, if you has any problem, //please mail me.
Dependencies: 202hm2_slave mbed
Fork of 202hm2_slave by
main.cpp
- Committer:
- allonq
- Date:
- 2014-03-13
- Revision:
- 1:76a206e19490
- Parent:
- 0:7c4f7de16626
- Child:
- 2:4457eb1e9b83
File content as of revision 1:76a206e19490:
//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 synchronize(){ switch(state){ case 0:{pc.printf("state0"); if(uart.readable()&&buff<4){buffer[buff]=uart.getc();buff++;} else if(buff==4){ 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 else break; } 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){synchronize();} } 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();} } }