skeleton
Dependencies: MAG3110 MMA8451Q SLCD TSI mbed
main.cpp
00001 #include "mbed.h" 00002 #include "MMA8451Q.h" 00003 #include "MAG3110.h" 00004 #include "SLCD.h" 00005 #include "TSISensor.h" 00006 #include <math.h> 00007 #include "InterruptManager.h" 00008 #include "TPM_init.h" 00009 00010 00011 //#define IS_TRANSMITTER 00012 00013 #ifndef IS_TRANSMITTER 00014 #define IS_RECEIVER 00015 #endif 00016 00017 00018 #define BAUD_RATE 921600 00019 00020 #define MMA8451_I2C_ADDRESS (0x1d << 1) 00021 #define MAG3110_I2C_ADDRESS (0x0e << 1) 00022 #define NVIC_ISER 0xE000E100 00023 #define NVIC_ISPR 0xE000E200 00024 00025 #define SIM_SOPT2_ADDRESS 0x40048004 00026 #define SIM_SCGC6_ADDRESS 0x4004803C 00027 00028 00029 00030 Serial pc(USBTX, USBRX); 00031 RawSerial mbed_rec(PTE0, PTE1); 00032 00033 Timer timer; 00034 SLCD slcd; 00035 00036 DigitalOut go(D1); 00037 00038 int offset_start_usec; 00039 int offset_end_usec; 00040 unsigned int flag; 00041 00042 gpio_t gpio_1; 00043 gpio_t gpio_2; 00044 00045 RawSerial uart_mbed(PTE0, PTE1); 00046 RawSerial uart_beagle(PTE22, PTE23); 00047 00048 00049 // signal 00050 const int sigSYN = 44; 00051 00052 // now mode 00053 int now_mode; 00054 const int modeGEN = 1; 00055 const int modeMON = 2; 00056 00057 int now_interval; 00058 int now_output; 00059 00060 00061 00062 void TPM0_handler() { 00063 //pc.printf("handler called\n"); 00064 unsigned int overflow = TPM0_SC_read() & 0x000000C0; 00065 if(overflow == 0xC0) { 00066 //pc.printf("SC_REG = 0x%x\n", TPM0_SC_read()); 00067 TPM0_clear_overflow(); 00068 //__ISB(); 00069 //__DSB(); 00070 //pc.printf("SC_REG = 0x%x\n", TPM0_SC_read()); 00071 00072 //set gpio pin 00073 //int prev_val = gpio_read(&gpio_1); 00074 //gpio_write(&gpio_1, ~prev_val); 00075 //pc.printf("handler called\n"); 00076 flag++; 00077 //pc.printf("flag = %d\n", flag); 00078 00079 //TPM0_clear_overflow(); 00080 NVIC_ClearPendingIRQ(TPM0_IRQn); 00081 //__ISB(); 00082 //__DSB(); 00083 00084 } 00085 //NVIC_ClearPendingIRQ(TPM0_IRQn); 00086 00087 } 00088 00089 00090 #ifdef IS_TRANSMITTER 00091 void transmitter_rec_byte_from_mbed() { 00092 } 00093 #endif 00094 00095 #ifdef IS_RECEIVER 00096 void receiver_rec_byte_from_mbed(){ 00097 int c = uart_mbed.getc(); 00098 //pc.printf("%d\n", c); 00099 if(c == sigSYN) { 00100 go = 1; 00101 // TODO: enable timer, register timer_fire_signal(), prescale = 0, modulo = 48000 00102 } 00103 } 00104 #endif 00105 00106 #ifdef IS_TRANSMITTER 00107 void transmitter_timer_handler_reset_countdown() { 00108 // TODO: disable timer 00109 // TODO: reset timer 00110 // TODO: enable timer, register timer_fire_signal(), prescale = 0, modulo = 48000 00111 go = 1; 00112 } 00113 #endif 00114 00115 void timer_fire_signal() { 00116 #ifdef IS_RECEIVER 00117 // TODO: do time drift calibration, if have time. 2912ms drift 740 clk 00118 #endif 00119 go = !go; 00120 } 00121 00122 void rec_byte_from_beagle() { 00123 //01: Generation mode start 00124 //00: Generation mode stop 00125 //1X: Monitoring mode 00126 00127 int c1 = uart_mbed.getc(); 00128 int c2 = uart_mbed.getc(); 00129 int n = (c1 << 8) | c2; 00130 if (n & 0x8000) { // Monitoring mode 00131 if (now_mode != modeMON) { 00132 // TODO: disable timer 00133 // TODO: sync again? 00134 // TODO: initial monitor mode 00135 } 00136 } 00137 else { // Generation mode 00138 if (now_mode != modeGEN) { 00139 // TODO: disable previous timer 00140 // TODO: sync again? 00141 // TODO: init monitor mode 00142 } 00143 00144 if (n & 0x4000) { // start signal 00145 now_interval = n & 0x3f; 00146 now_output = 1; 00147 } 00148 else { // stop signal 00149 now_output = 0; 00150 } 00151 } 00152 } 00153 00154 int main() { 00155 pc.baud(921600); 00156 00157 00158 //TPM1->SC = 0; 00159 #ifdef IS_TRANSMITTER 00160 slcd.printf("sen0"); 00161 pc.printf("I'm sender\n"); 00162 #else // IS_RECEIVER 00163 slcd.printf("1rec"); 00164 pc.printf("I'm receiver\n"); 00165 #endif 00166 00167 flag = 0; 00168 unsigned int modulo_val = 48000; //period = 1000usec 00169 unsigned int prescale_val = 0; 00170 pc.baud(BAUD_RATE); 00171 00172 volatile unsigned int *ptrMyReg; 00173 00174 00175 /* 00176 // ------lagacy code ---------------------------------- 00177 NVIC_SetVector(TPM0_IRQn, (uint32_t) TPM0_handler); 00178 NVIC_SetPriority(TPM0_IRQn, 0); 00179 //NVIC_EnableIRQ(TPM0_IRQn); 00180 00181 //ptrMyReg = (volatile unsigned int *) NVIC_ISER; 00182 //*ptrMyReg = 0x14020000; 00183 // pc.printf("NVIC_ISER = 0x%x ", *ptrMyReg); 00184 00185 // ptrMyReg = (volatile unsigned int *) NVIC_ISPR; 00186 // pc.printf("NVIC_ISPR = 0x%x ", *ptrMyReg); 00187 00188 TPM0_init(modulo_val, prescale_val); 00189 //ptrMyReg = (volatile unsigned int *) TPM0_MOD_ADDR; 00190 //pc.printf("TPM0_MOD_ADDR = 0x%x ", *ptrMyReg); 00191 00192 NVIC_EnableIRQ(TPM0_IRQn); 00193 // ptrMyReg = (volatile unsigned int *) TPM0_CONF_ADDR; 00194 // pc.printf("TPM0_CONF = 0x%x\n", *ptrMyReg); 00195 00196 gpio_init(&gpio_1, PTA1, PIN_OUTPUT); 00197 gpio_write(&gpio_1, 0); 00198 00199 gpio_init(&gpio_2, PTA1, PIN_OUTPUT); 00200 gpio_write(&gpio_2, 0); 00201 00202 gpio_write(&gpio_1, 1); 00203 //gpio_write(&gpio_2, 1); 00204 // ------lagacy code ---------------------------------- 00205 */ 00206 00207 uart_mbed.baud(921600); 00208 00209 00210 // register uart handler from BBB 00211 uart_beagle.attach(rec_byte_from_beagle, Serial::RxIrq); 00212 00213 #ifdef IS_TRANSMITTER 00214 wait(1.0); // wait enough time for receiver to attach handler 00215 #else //IS_RECEIVER 00216 uart_mbed.attach(receiver_rec_byte_from_mbed, Serial::RxIrq); 00217 #endif 00218 00219 #ifdef IS_TRANSMITTER 00220 // TODO: enable timer, attach handler "transmitter_timer_handler_reset_countdown", prescale = 0, modulo = ? 00221 #endif 00222 00223 00224 00225 // a place should never reach 00226 while (true) { 00227 wait(999); 00228 } 00229 00230 00231 }
Generated on Fri Jul 15 2022 03:12:33 by 1.7.2