skeleton

Dependencies:   MAG3110 MMA8451Q SLCD TSI mbed

Committer:
TimeString
Date:
Wed Mar 12 20:48:17 2014 +0000
Revision:
0:ba78bf4f69dc
to jaeyoung

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TimeString 0:ba78bf4f69dc 1 #include "mbed.h"
TimeString 0:ba78bf4f69dc 2 #include "MMA8451Q.h"
TimeString 0:ba78bf4f69dc 3 #include "MAG3110.h"
TimeString 0:ba78bf4f69dc 4 #include "SLCD.h"
TimeString 0:ba78bf4f69dc 5 #include "TSISensor.h"
TimeString 0:ba78bf4f69dc 6 #include <math.h>
TimeString 0:ba78bf4f69dc 7 #include "InterruptManager.h"
TimeString 0:ba78bf4f69dc 8 #include "TPM_init.h"
TimeString 0:ba78bf4f69dc 9
TimeString 0:ba78bf4f69dc 10
TimeString 0:ba78bf4f69dc 11 //#define IS_TRANSMITTER
TimeString 0:ba78bf4f69dc 12
TimeString 0:ba78bf4f69dc 13 #ifndef IS_TRANSMITTER
TimeString 0:ba78bf4f69dc 14 #define IS_RECEIVER
TimeString 0:ba78bf4f69dc 15 #endif
TimeString 0:ba78bf4f69dc 16
TimeString 0:ba78bf4f69dc 17
TimeString 0:ba78bf4f69dc 18 #define BAUD_RATE 921600
TimeString 0:ba78bf4f69dc 19
TimeString 0:ba78bf4f69dc 20 #define MMA8451_I2C_ADDRESS (0x1d << 1)
TimeString 0:ba78bf4f69dc 21 #define MAG3110_I2C_ADDRESS (0x0e << 1)
TimeString 0:ba78bf4f69dc 22 #define NVIC_ISER 0xE000E100
TimeString 0:ba78bf4f69dc 23 #define NVIC_ISPR 0xE000E200
TimeString 0:ba78bf4f69dc 24
TimeString 0:ba78bf4f69dc 25 #define SIM_SOPT2_ADDRESS 0x40048004
TimeString 0:ba78bf4f69dc 26 #define SIM_SCGC6_ADDRESS 0x4004803C
TimeString 0:ba78bf4f69dc 27
TimeString 0:ba78bf4f69dc 28
TimeString 0:ba78bf4f69dc 29
TimeString 0:ba78bf4f69dc 30 Serial pc(USBTX, USBRX);
TimeString 0:ba78bf4f69dc 31 RawSerial mbed_rec(PTE0, PTE1);
TimeString 0:ba78bf4f69dc 32
TimeString 0:ba78bf4f69dc 33 Timer timer;
TimeString 0:ba78bf4f69dc 34 SLCD slcd;
TimeString 0:ba78bf4f69dc 35
TimeString 0:ba78bf4f69dc 36 DigitalOut go(D1);
TimeString 0:ba78bf4f69dc 37
TimeString 0:ba78bf4f69dc 38 int offset_start_usec;
TimeString 0:ba78bf4f69dc 39 int offset_end_usec;
TimeString 0:ba78bf4f69dc 40 unsigned int flag;
TimeString 0:ba78bf4f69dc 41
TimeString 0:ba78bf4f69dc 42 gpio_t gpio_1;
TimeString 0:ba78bf4f69dc 43 gpio_t gpio_2;
TimeString 0:ba78bf4f69dc 44
TimeString 0:ba78bf4f69dc 45 RawSerial uart_mbed(PTE0, PTE1);
TimeString 0:ba78bf4f69dc 46 RawSerial uart_beagle(PTE22, PTE23);
TimeString 0:ba78bf4f69dc 47
TimeString 0:ba78bf4f69dc 48
TimeString 0:ba78bf4f69dc 49 // signal
TimeString 0:ba78bf4f69dc 50 const int sigSYN = 44;
TimeString 0:ba78bf4f69dc 51
TimeString 0:ba78bf4f69dc 52 // now mode
TimeString 0:ba78bf4f69dc 53 int now_mode;
TimeString 0:ba78bf4f69dc 54 const int modeGEN = 1;
TimeString 0:ba78bf4f69dc 55 const int modeMON = 2;
TimeString 0:ba78bf4f69dc 56
TimeString 0:ba78bf4f69dc 57 int now_interval;
TimeString 0:ba78bf4f69dc 58 int now_output;
TimeString 0:ba78bf4f69dc 59
TimeString 0:ba78bf4f69dc 60
TimeString 0:ba78bf4f69dc 61
TimeString 0:ba78bf4f69dc 62 void TPM0_handler() {
TimeString 0:ba78bf4f69dc 63 //pc.printf("handler called\n");
TimeString 0:ba78bf4f69dc 64 unsigned int overflow = TPM0_SC_read() & 0x000000C0;
TimeString 0:ba78bf4f69dc 65 if(overflow == 0xC0) {
TimeString 0:ba78bf4f69dc 66 //pc.printf("SC_REG = 0x%x\n", TPM0_SC_read());
TimeString 0:ba78bf4f69dc 67 TPM0_clear_overflow();
TimeString 0:ba78bf4f69dc 68 //__ISB();
TimeString 0:ba78bf4f69dc 69 //__DSB();
TimeString 0:ba78bf4f69dc 70 //pc.printf("SC_REG = 0x%x\n", TPM0_SC_read());
TimeString 0:ba78bf4f69dc 71
TimeString 0:ba78bf4f69dc 72 //set gpio pin
TimeString 0:ba78bf4f69dc 73 //int prev_val = gpio_read(&gpio_1);
TimeString 0:ba78bf4f69dc 74 //gpio_write(&gpio_1, ~prev_val);
TimeString 0:ba78bf4f69dc 75 //pc.printf("handler called\n");
TimeString 0:ba78bf4f69dc 76 flag++;
TimeString 0:ba78bf4f69dc 77 //pc.printf("flag = %d\n", flag);
TimeString 0:ba78bf4f69dc 78
TimeString 0:ba78bf4f69dc 79 //TPM0_clear_overflow();
TimeString 0:ba78bf4f69dc 80 NVIC_ClearPendingIRQ(TPM0_IRQn);
TimeString 0:ba78bf4f69dc 81 //__ISB();
TimeString 0:ba78bf4f69dc 82 //__DSB();
TimeString 0:ba78bf4f69dc 83
TimeString 0:ba78bf4f69dc 84 }
TimeString 0:ba78bf4f69dc 85 //NVIC_ClearPendingIRQ(TPM0_IRQn);
TimeString 0:ba78bf4f69dc 86
TimeString 0:ba78bf4f69dc 87 }
TimeString 0:ba78bf4f69dc 88
TimeString 0:ba78bf4f69dc 89
TimeString 0:ba78bf4f69dc 90 #ifdef IS_TRANSMITTER
TimeString 0:ba78bf4f69dc 91 void transmitter_rec_byte_from_mbed() {
TimeString 0:ba78bf4f69dc 92 }
TimeString 0:ba78bf4f69dc 93 #endif
TimeString 0:ba78bf4f69dc 94
TimeString 0:ba78bf4f69dc 95 #ifdef IS_RECEIVER
TimeString 0:ba78bf4f69dc 96 void receiver_rec_byte_from_mbed(){
TimeString 0:ba78bf4f69dc 97 int c = uart_mbed.getc();
TimeString 0:ba78bf4f69dc 98 //pc.printf("%d\n", c);
TimeString 0:ba78bf4f69dc 99 if(c == sigSYN) {
TimeString 0:ba78bf4f69dc 100 go = 1;
TimeString 0:ba78bf4f69dc 101 // TODO: enable timer, register timer_fire_signal(), prescale = 0, modulo = 48000
TimeString 0:ba78bf4f69dc 102 }
TimeString 0:ba78bf4f69dc 103 }
TimeString 0:ba78bf4f69dc 104 #endif
TimeString 0:ba78bf4f69dc 105
TimeString 0:ba78bf4f69dc 106 #ifdef IS_TRANSMITTER
TimeString 0:ba78bf4f69dc 107 void transmitter_timer_handler_reset_countdown() {
TimeString 0:ba78bf4f69dc 108 // TODO: disable timer
TimeString 0:ba78bf4f69dc 109 // TODO: reset timer
TimeString 0:ba78bf4f69dc 110 // TODO: enable timer, register timer_fire_signal(), prescale = 0, modulo = 48000
TimeString 0:ba78bf4f69dc 111 go = 1;
TimeString 0:ba78bf4f69dc 112 }
TimeString 0:ba78bf4f69dc 113 #endif
TimeString 0:ba78bf4f69dc 114
TimeString 0:ba78bf4f69dc 115 void timer_fire_signal() {
TimeString 0:ba78bf4f69dc 116 #ifdef IS_RECEIVER
TimeString 0:ba78bf4f69dc 117 // TODO: do time drift calibration, if have time. 2912ms drift 740 clk
TimeString 0:ba78bf4f69dc 118 #endif
TimeString 0:ba78bf4f69dc 119 go = !go;
TimeString 0:ba78bf4f69dc 120 }
TimeString 0:ba78bf4f69dc 121
TimeString 0:ba78bf4f69dc 122 void rec_byte_from_beagle() {
TimeString 0:ba78bf4f69dc 123 //01: Generation mode start
TimeString 0:ba78bf4f69dc 124 //00: Generation mode stop
TimeString 0:ba78bf4f69dc 125 //1X: Monitoring mode
TimeString 0:ba78bf4f69dc 126
TimeString 0:ba78bf4f69dc 127 int c1 = uart_mbed.getc();
TimeString 0:ba78bf4f69dc 128 int c2 = uart_mbed.getc();
TimeString 0:ba78bf4f69dc 129 int n = (c1 << 8) | c2;
TimeString 0:ba78bf4f69dc 130 if (n & 0x8000) { // Monitoring mode
TimeString 0:ba78bf4f69dc 131 if (now_mode != modeMON) {
TimeString 0:ba78bf4f69dc 132 // TODO: disable timer
TimeString 0:ba78bf4f69dc 133 // TODO: sync again?
TimeString 0:ba78bf4f69dc 134 // TODO: initial monitor mode
TimeString 0:ba78bf4f69dc 135 }
TimeString 0:ba78bf4f69dc 136 }
TimeString 0:ba78bf4f69dc 137 else { // Generation mode
TimeString 0:ba78bf4f69dc 138 if (now_mode != modeGEN) {
TimeString 0:ba78bf4f69dc 139 // TODO: disable previous timer
TimeString 0:ba78bf4f69dc 140 // TODO: sync again?
TimeString 0:ba78bf4f69dc 141 // TODO: init monitor mode
TimeString 0:ba78bf4f69dc 142 }
TimeString 0:ba78bf4f69dc 143
TimeString 0:ba78bf4f69dc 144 if (n & 0x4000) { // start signal
TimeString 0:ba78bf4f69dc 145 now_interval = n & 0x3f;
TimeString 0:ba78bf4f69dc 146 now_output = 1;
TimeString 0:ba78bf4f69dc 147 }
TimeString 0:ba78bf4f69dc 148 else { // stop signal
TimeString 0:ba78bf4f69dc 149 now_output = 0;
TimeString 0:ba78bf4f69dc 150 }
TimeString 0:ba78bf4f69dc 151 }
TimeString 0:ba78bf4f69dc 152 }
TimeString 0:ba78bf4f69dc 153
TimeString 0:ba78bf4f69dc 154 int main() {
TimeString 0:ba78bf4f69dc 155 pc.baud(921600);
TimeString 0:ba78bf4f69dc 156
TimeString 0:ba78bf4f69dc 157
TimeString 0:ba78bf4f69dc 158 //TPM1->SC = 0;
TimeString 0:ba78bf4f69dc 159 #ifdef IS_TRANSMITTER
TimeString 0:ba78bf4f69dc 160 slcd.printf("sen0");
TimeString 0:ba78bf4f69dc 161 pc.printf("I'm sender\n");
TimeString 0:ba78bf4f69dc 162 #else // IS_RECEIVER
TimeString 0:ba78bf4f69dc 163 slcd.printf("1rec");
TimeString 0:ba78bf4f69dc 164 pc.printf("I'm receiver\n");
TimeString 0:ba78bf4f69dc 165 #endif
TimeString 0:ba78bf4f69dc 166
TimeString 0:ba78bf4f69dc 167 flag = 0;
TimeString 0:ba78bf4f69dc 168 unsigned int modulo_val = 48000; //period = 1000usec
TimeString 0:ba78bf4f69dc 169 unsigned int prescale_val = 0;
TimeString 0:ba78bf4f69dc 170 pc.baud(BAUD_RATE);
TimeString 0:ba78bf4f69dc 171
TimeString 0:ba78bf4f69dc 172 volatile unsigned int *ptrMyReg;
TimeString 0:ba78bf4f69dc 173
TimeString 0:ba78bf4f69dc 174
TimeString 0:ba78bf4f69dc 175 /*
TimeString 0:ba78bf4f69dc 176 // ------lagacy code ----------------------------------
TimeString 0:ba78bf4f69dc 177 NVIC_SetVector(TPM0_IRQn, (uint32_t) TPM0_handler);
TimeString 0:ba78bf4f69dc 178 NVIC_SetPriority(TPM0_IRQn, 0);
TimeString 0:ba78bf4f69dc 179 //NVIC_EnableIRQ(TPM0_IRQn);
TimeString 0:ba78bf4f69dc 180
TimeString 0:ba78bf4f69dc 181 //ptrMyReg = (volatile unsigned int *) NVIC_ISER;
TimeString 0:ba78bf4f69dc 182 //*ptrMyReg = 0x14020000;
TimeString 0:ba78bf4f69dc 183 // pc.printf("NVIC_ISER = 0x%x ", *ptrMyReg);
TimeString 0:ba78bf4f69dc 184
TimeString 0:ba78bf4f69dc 185 // ptrMyReg = (volatile unsigned int *) NVIC_ISPR;
TimeString 0:ba78bf4f69dc 186 // pc.printf("NVIC_ISPR = 0x%x ", *ptrMyReg);
TimeString 0:ba78bf4f69dc 187
TimeString 0:ba78bf4f69dc 188 TPM0_init(modulo_val, prescale_val);
TimeString 0:ba78bf4f69dc 189 //ptrMyReg = (volatile unsigned int *) TPM0_MOD_ADDR;
TimeString 0:ba78bf4f69dc 190 //pc.printf("TPM0_MOD_ADDR = 0x%x ", *ptrMyReg);
TimeString 0:ba78bf4f69dc 191
TimeString 0:ba78bf4f69dc 192 NVIC_EnableIRQ(TPM0_IRQn);
TimeString 0:ba78bf4f69dc 193 // ptrMyReg = (volatile unsigned int *) TPM0_CONF_ADDR;
TimeString 0:ba78bf4f69dc 194 // pc.printf("TPM0_CONF = 0x%x\n", *ptrMyReg);
TimeString 0:ba78bf4f69dc 195
TimeString 0:ba78bf4f69dc 196 gpio_init(&gpio_1, PTA1, PIN_OUTPUT);
TimeString 0:ba78bf4f69dc 197 gpio_write(&gpio_1, 0);
TimeString 0:ba78bf4f69dc 198
TimeString 0:ba78bf4f69dc 199 gpio_init(&gpio_2, PTA1, PIN_OUTPUT);
TimeString 0:ba78bf4f69dc 200 gpio_write(&gpio_2, 0);
TimeString 0:ba78bf4f69dc 201
TimeString 0:ba78bf4f69dc 202 gpio_write(&gpio_1, 1);
TimeString 0:ba78bf4f69dc 203 //gpio_write(&gpio_2, 1);
TimeString 0:ba78bf4f69dc 204 // ------lagacy code ----------------------------------
TimeString 0:ba78bf4f69dc 205 */
TimeString 0:ba78bf4f69dc 206
TimeString 0:ba78bf4f69dc 207 uart_mbed.baud(921600);
TimeString 0:ba78bf4f69dc 208
TimeString 0:ba78bf4f69dc 209
TimeString 0:ba78bf4f69dc 210 // register uart handler from BBB
TimeString 0:ba78bf4f69dc 211 uart_beagle.attach(rec_byte_from_beagle, Serial::RxIrq);
TimeString 0:ba78bf4f69dc 212
TimeString 0:ba78bf4f69dc 213 #ifdef IS_TRANSMITTER
TimeString 0:ba78bf4f69dc 214 wait(1.0); // wait enough time for receiver to attach handler
TimeString 0:ba78bf4f69dc 215 #else //IS_RECEIVER
TimeString 0:ba78bf4f69dc 216 uart_mbed.attach(receiver_rec_byte_from_mbed, Serial::RxIrq);
TimeString 0:ba78bf4f69dc 217 #endif
TimeString 0:ba78bf4f69dc 218
TimeString 0:ba78bf4f69dc 219 #ifdef IS_TRANSMITTER
TimeString 0:ba78bf4f69dc 220 // TODO: enable timer, attach handler "transmitter_timer_handler_reset_countdown", prescale = 0, modulo = ?
TimeString 0:ba78bf4f69dc 221 #endif
TimeString 0:ba78bf4f69dc 222
TimeString 0:ba78bf4f69dc 223
TimeString 0:ba78bf4f69dc 224
TimeString 0:ba78bf4f69dc 225 // a place should never reach
TimeString 0:ba78bf4f69dc 226 while (true) {
TimeString 0:ba78bf4f69dc 227 wait(999);
TimeString 0:ba78bf4f69dc 228 }
TimeString 0:ba78bf4f69dc 229
TimeString 0:ba78bf4f69dc 230
TimeString 0:ba78bf4f69dc 231 }