Yujing Qian / Mbed 2 deprecated 202hm2_master_monitor

Dependencies:   mbed

Committer:
allonq
Date:
Sun Mar 16 08:11:31 2014 +0000
Revision:
2:31495b76a1de
Parent:
1:55f3661a2050
//EE 202 hm2; //This is a program built for the mbed3 in generation mode; //This code has been tested and should be function, if you has any problem,; //please mail me.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
allonq 2:31495b76a1de 1 //EE 202 hm2
allonq 2:31495b76a1de 2 //This is a program built for the mbed1 in monitor mode
allonq 2:31495b76a1de 3 //This code has been tested and should be function, if you has any problem,
allonq 2:31495b76a1de 4 //please mail me.
allonq 2:31495b76a1de 5 //Author: Yujing Qian
allonq 2:31495b76a1de 6 //y.qian42@gmail.com
allonq 0:fac0542384d7 7 #include "mbed.h"
allonq 0:fac0542384d7 8 //#include "MKL46Z4.h"
allonq 0:fac0542384d7 9
allonq 0:fac0542384d7 10 #define mod 0x0000bb80
allonq 0:fac0542384d7 11 #define duty_cycle 0.5
allonq 0:fac0542384d7 12 #define high_cycle mod*duty_cycle
allonq 0:fac0542384d7 13 #define low_cycle mod-high_cycle
allonq 0:fac0542384d7 14 #define buffer_size 9
allonq 0:fac0542384d7 15 #define BBBbuff_size 30
allonq 0:fac0542384d7 16
allonq 0:fac0542384d7 17 DigitalOut LED(LED_RED);
allonq 2:31495b76a1de 18 InterruptIn dig_in(PTD4);
allonq 0:fac0542384d7 19 Serial pc(USBTX,USBRX);
allonq 0:fac0542384d7 20 Serial uart(PTE0, PTE1);
allonq 2:31495b76a1de 21 Serial uart_bbb(PTE16,PTE17);
allonq 0:fac0542384d7 22
allonq 2:31495b76a1de 23 uint32_t loop_num=0;
allonq 2:31495b76a1de 24 uint32_t per_num=0;
allonq 2:31495b76a1de 25 uint32_t Period=5000;
allonq 0:fac0542384d7 26 uint32_t T1=0;
allonq 0:fac0542384d7 27 uint32_t T2=0;
allonq 0:fac0542384d7 28 uint32_t T3=0;
allonq 0:fac0542384d7 29 uint32_t T4=0;
allonq 2:31495b76a1de 30 bool flag=false;
allonq 2:31495b76a1de 31
allonq 0:fac0542384d7 32 uint32_t Mod=mod;
allonq 0:fac0542384d7 33 char BBBbuffer[BBBbuff_size];
allonq 0:fac0542384d7 34 bool cmd_received=false;
allonq 0:fac0542384d7 35 int BBBbuff=0;
allonq 0:fac0542384d7 36 char buffer[4];
allonq 1:55f3661a2050 37 int buff=0;
allonq 2:31495b76a1de 38 int drift_cnt=0;
allonq 2:31495b76a1de 39 uint32_t TIME(){return per_num*Period*48000+loop_num*48000+(TPM0->CNT);}
allonq 0:fac0542384d7 40
allonq 2:31495b76a1de 41 void report(){
allonq 2:31495b76a1de 42 int us=(TPM0->CNT);
allonq 2:31495b76a1de 43 uint32_t ms=per_num*Period+loop_num;
allonq 2:31495b76a1de 44 uint32_t s=ms/1000;//second
allonq 2:31495b76a1de 45 ms=ms%1000;
allonq 2:31495b76a1de 46
allonq 2:31495b76a1de 47 uart_bbb.printf("m%u:%d\n",s*1000+ms,us);
allonq 2:31495b76a1de 48 pc.printf("m%u:%u:%d\n",s,ms,us);
allonq 2:31495b76a1de 49 drift_cnt++;
allonq 2:31495b76a1de 50 }
allonq 0:fac0542384d7 51 void receive_handler(){
allonq 2:31495b76a1de 52 while(pc.readable() && BBBbuff<BBBbuff_size){
allonq 0:fac0542384d7 53 BBBbuffer[BBBbuff] =pc.getc();
allonq 0:fac0542384d7 54 pc.putc(BBBbuffer[BBBbuff]);
allonq 0:fac0542384d7 55 //pc.printf(& rx_buffer[buff]);
allonq 2:31495b76a1de 56 if (BBBbuffer[BBBbuff] == 's'){
allonq 0:fac0542384d7 57 BBBbuffer[BBBbuff] = '\0';
allonq 0:fac0542384d7 58 cmd_received=true;
allonq 0:fac0542384d7 59 BBBbuff++;
allonq 0:fac0542384d7 60 pc.printf("cmd received\n");
allonq 0:fac0542384d7 61 break;
allonq 0:fac0542384d7 62 }
allonq 0:fac0542384d7 63 BBBbuff++;
allonq 0:fac0542384d7 64 }
allonq 0:fac0542384d7 65 return;
allonq 0:fac0542384d7 66 }
allonq 0:fac0542384d7 67 void TPM1_IRQHandler(void);
allonq 2:31495b76a1de 68 uint32_t calculate_delay(){// calculate delay using hand shake
allonq 2:31495b76a1de 69
allonq 1:55f3661a2050 70
allonq 2:31495b76a1de 71 T1=TIME();
allonq 2:31495b76a1de 72 uart.putc('a');
allonq 2:31495b76a1de 73 uart.getc();
allonq 0:fac0542384d7 74 T4=TIME();
allonq 2:31495b76a1de 75
allonq 2:31495b76a1de 76 return (T4-T1)/2;
allonq 2:31495b76a1de 77 }
allonq 2:31495b76a1de 78 void Syc(uint32_t delay){
allonq 2:31495b76a1de 79
allonq 0:fac0542384d7 80 TPM1->MOD=delay;
allonq 0:fac0542384d7 81 TPM1->CNT=0x0;
allonq 2:31495b76a1de 82 //loop_num=0;
allonq 2:31495b76a1de 83 TPM1->SC=0x00000048;
allonq 2:31495b76a1de 84 NVIC_EnableIRQ(TPM1_IRQn);
allonq 2:31495b76a1de 85 // open tpm1
allonq 2:31495b76a1de 86 uart.putc(0);//send signal to slave
allonq 2:31495b76a1de 87 }
allonq 2:31495b76a1de 88 void synchronize(uint32_t Cmd_per){
allonq 2:31495b76a1de 89
allonq 2:31495b76a1de 90 char* tmp=(char*)&Cmd_per;
allonq 2:31495b76a1de 91
allonq 2:31495b76a1de 92 uart.getc();
allonq 2:31495b76a1de 93 //pc.printf("TFS love xuemei");
allonq 2:31495b76a1de 94 uart.putc((*tmp));//pc.printf("0=%d\n",*tmp);
allonq 2:31495b76a1de 95 uart.getc();
allonq 2:31495b76a1de 96 uart.putc((*(tmp+1)));//pc.printf("1=%d\n",(*(tmp+1)));
allonq 2:31495b76a1de 97 uart.getc();
allonq 2:31495b76a1de 98 uart.putc((*(tmp+2)));//pc.printf("2=%d\n",(*(tmp+2)));
allonq 2:31495b76a1de 99 uart.getc();
allonq 2:31495b76a1de 100 uart.putc((*(tmp+3)));//pc.printf("3=%d\n",(*(tmp+3)));
allonq 2:31495b76a1de 101 uart.getc();//clear the buffer
allonq 0:fac0542384d7 102
allonq 2:31495b76a1de 103 Period=Cmd_per;
allonq 2:31495b76a1de 104
allonq 2:31495b76a1de 105 Syc(calculate_delay());
allonq 2:31495b76a1de 106
allonq 2:31495b76a1de 107 loop_num=0;//clear clock
allonq 2:31495b76a1de 108 per_num=0;
allonq 2:31495b76a1de 109 flag=true;
allonq 2:31495b76a1de 110 }
allonq 2:31495b76a1de 111
allonq 2:31495b76a1de 112 void TPM0_IRQHandler(void){
allonq 2:31495b76a1de 113
allonq 2:31495b76a1de 114 loop_num++;
allonq 2:31495b76a1de 115
allonq 2:31495b76a1de 116 if(loop_num==Period){
allonq 2:31495b76a1de 117
allonq 2:31495b76a1de 118 LED=!LED;
allonq 2:31495b76a1de 119 per_num++;
allonq 2:31495b76a1de 120 loop_num=0;
allonq 2:31495b76a1de 121 }
allonq 2:31495b76a1de 122 TPM0->SC|= 0x000000c8;
allonq 0:fac0542384d7 123
allonq 2:31495b76a1de 124
allonq 0:fac0542384d7 125 return;
allonq 0:fac0542384d7 126 }
allonq 0:fac0542384d7 127
allonq 2:31495b76a1de 128 void TPM1_IRQHandler(void){// time to restart the system
allonq 2:31495b76a1de 129 LED=1;
allonq 2:31495b76a1de 130
allonq 2:31495b76a1de 131 TPM0->CNT=0x0;
allonq 0:fac0542384d7 132 TPM1->CNT=0x0;
allonq 0:fac0542384d7 133 TPM1->SC= 0x00000080;
allonq 0:fac0542384d7 134 NVIC_DisableIRQ(TPM1_IRQn);
allonq 2:31495b76a1de 135 flag=true;
allonq 0:fac0542384d7 136 return;
allonq 0:fac0542384d7 137 }
allonq 0:fac0542384d7 138
allonq 2:31495b76a1de 139
allonq 0:fac0542384d7 140
allonq 0:fac0542384d7 141 void Initial(){
allonq 2:31495b76a1de 142 Period=5000;
allonq 0:fac0542384d7 143 LED=1;
allonq 2:31495b76a1de 144 //out=0;
allonq 2:31495b76a1de 145 SIM->SOPT2=0x05000000;
allonq 0:fac0542384d7 146 SIM->SCGC6=0x03000000;//enable TPM 0,1
allonq 0:fac0542384d7 147 TPM0->SC=0x0;
allonq 1:55f3661a2050 148
allonq 0:fac0542384d7 149 TPM0->CNT=0x0;
allonq 0:fac0542384d7 150 TPM0->SC=0x00000040;
allonq 0:fac0542384d7 151 TPM0->MOD=0x0000bb80;
allonq 0:fac0542384d7 152 TPM0->SC=0x00000048;//0008
allonq 0:fac0542384d7 153
allonq 0:fac0542384d7 154 TPM1->CNT=0x0;
allonq 0:fac0542384d7 155 TPM1->SC=0x00000040;
allonq 0:fac0542384d7 156 TPM1->MOD=0x0000ffff;
allonq 0:fac0542384d7 157 TPM1->SC=0x00000008;//0008
allonq 0:fac0542384d7 158 }
allonq 0:fac0542384d7 159 int main() {
allonq 1:55f3661a2050 160 loop_num=0;
allonq 0:fac0542384d7 161 cmd_received=false;
allonq 0:fac0542384d7 162 pc.attach(&receive_handler);
allonq 2:31495b76a1de 163 int CMD_Per=0;
allonq 0:fac0542384d7 164 Initial();
allonq 0:fac0542384d7 165
allonq 0:fac0542384d7 166 pc.baud(9600);
allonq 0:fac0542384d7 167 pc.attach(&receive_handler);
allonq 2:31495b76a1de 168
allonq 0:fac0542384d7 169 uart.baud(9600);
allonq 0:fac0542384d7 170
allonq 0:fac0542384d7 171 NVIC_SetVector(TPM0_IRQn, (uint32_t)&TPM0_IRQHandler);
allonq 0:fac0542384d7 172 NVIC_SetPriority(TPM0_IRQn, 1);
allonq 0:fac0542384d7 173 NVIC_EnableIRQ(TPM0_IRQn);
allonq 0:fac0542384d7 174
allonq 0:fac0542384d7 175 NVIC_SetVector(TPM1_IRQn, (uint32_t)&TPM1_IRQHandler);
allonq 0:fac0542384d7 176 NVIC_SetPriority(TPM1_IRQn, 0);
allonq 0:fac0542384d7 177 NVIC_EnableIRQ(TPM1_IRQn);
allonq 0:fac0542384d7 178
allonq 2:31495b76a1de 179 dig_in.rise(report);
allonq 2:31495b76a1de 180
allonq 0:fac0542384d7 181 while(1){
allonq 0:fac0542384d7 182 if(cmd_received){
allonq 0:fac0542384d7 183 cmd_received=false;
allonq 0:fac0542384d7 184 BBBbuff=0;
allonq 2:31495b76a1de 185
allonq 2:31495b76a1de 186 uart.putc('#');
allonq 2:31495b76a1de 187 synchronize(2000);
allonq 2:31495b76a1de 188
allonq 2:31495b76a1de 189 }
allonq 0:fac0542384d7 190 }
allonq 0:fac0542384d7 191
allonq 0:fac0542384d7 192 }