![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
//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.
Diff: main.cpp
- 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;