skeleton
Dependencies: MAG3110 MMA8451Q SLCD TSI mbed
main.cpp@0:ba78bf4f69dc, 2014-03-12 (annotated)
- Committer:
- TimeString
- Date:
- Wed Mar 12 20:48:17 2014 +0000
- Revision:
- 0:ba78bf4f69dc
to jaeyoung
Who changed what in which revision?
User | Revision | Line number | New 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 | } |