skeleton
Dependencies: MAG3110 MMA8451Q SLCD TSI mbed
main.cpp
- Committer:
- TimeString
- Date:
- 2014-03-12
- Revision:
- 0:ba78bf4f69dc
File content as of revision 0:ba78bf4f69dc:
#include "mbed.h" #include "MMA8451Q.h" #include "MAG3110.h" #include "SLCD.h" #include "TSISensor.h" #include <math.h> #include "InterruptManager.h" #include "TPM_init.h" //#define IS_TRANSMITTER #ifndef IS_TRANSMITTER #define IS_RECEIVER #endif #define BAUD_RATE 921600 #define MMA8451_I2C_ADDRESS (0x1d << 1) #define MAG3110_I2C_ADDRESS (0x0e << 1) #define NVIC_ISER 0xE000E100 #define NVIC_ISPR 0xE000E200 #define SIM_SOPT2_ADDRESS 0x40048004 #define SIM_SCGC6_ADDRESS 0x4004803C Serial pc(USBTX, USBRX); RawSerial mbed_rec(PTE0, PTE1); Timer timer; SLCD slcd; DigitalOut go(D1); int offset_start_usec; int offset_end_usec; unsigned int flag; gpio_t gpio_1; gpio_t gpio_2; RawSerial uart_mbed(PTE0, PTE1); RawSerial uart_beagle(PTE22, PTE23); // signal const int sigSYN = 44; // now mode int now_mode; const int modeGEN = 1; const int modeMON = 2; int now_interval; int now_output; void TPM0_handler() { //pc.printf("handler called\n"); unsigned int overflow = TPM0_SC_read() & 0x000000C0; if(overflow == 0xC0) { //pc.printf("SC_REG = 0x%x\n", TPM0_SC_read()); TPM0_clear_overflow(); //__ISB(); //__DSB(); //pc.printf("SC_REG = 0x%x\n", TPM0_SC_read()); //set gpio pin //int prev_val = gpio_read(&gpio_1); //gpio_write(&gpio_1, ~prev_val); //pc.printf("handler called\n"); flag++; //pc.printf("flag = %d\n", flag); //TPM0_clear_overflow(); NVIC_ClearPendingIRQ(TPM0_IRQn); //__ISB(); //__DSB(); } //NVIC_ClearPendingIRQ(TPM0_IRQn); } #ifdef IS_TRANSMITTER void transmitter_rec_byte_from_mbed() { } #endif #ifdef IS_RECEIVER void receiver_rec_byte_from_mbed(){ int c = uart_mbed.getc(); //pc.printf("%d\n", c); if(c == sigSYN) { go = 1; // TODO: enable timer, register timer_fire_signal(), prescale = 0, modulo = 48000 } } #endif #ifdef IS_TRANSMITTER void transmitter_timer_handler_reset_countdown() { // TODO: disable timer // TODO: reset timer // TODO: enable timer, register timer_fire_signal(), prescale = 0, modulo = 48000 go = 1; } #endif void timer_fire_signal() { #ifdef IS_RECEIVER // TODO: do time drift calibration, if have time. 2912ms drift 740 clk #endif go = !go; } void rec_byte_from_beagle() { //01: Generation mode start //00: Generation mode stop //1X: Monitoring mode int c1 = uart_mbed.getc(); int c2 = uart_mbed.getc(); int n = (c1 << 8) | c2; if (n & 0x8000) { // Monitoring mode if (now_mode != modeMON) { // TODO: disable timer // TODO: sync again? // TODO: initial monitor mode } } else { // Generation mode if (now_mode != modeGEN) { // TODO: disable previous timer // TODO: sync again? // TODO: init monitor mode } if (n & 0x4000) { // start signal now_interval = n & 0x3f; now_output = 1; } else { // stop signal now_output = 0; } } } int main() { pc.baud(921600); //TPM1->SC = 0; #ifdef IS_TRANSMITTER slcd.printf("sen0"); pc.printf("I'm sender\n"); #else // IS_RECEIVER slcd.printf("1rec"); pc.printf("I'm receiver\n"); #endif flag = 0; unsigned int modulo_val = 48000; //period = 1000usec unsigned int prescale_val = 0; pc.baud(BAUD_RATE); volatile unsigned int *ptrMyReg; /* // ------lagacy code ---------------------------------- NVIC_SetVector(TPM0_IRQn, (uint32_t) TPM0_handler); NVIC_SetPriority(TPM0_IRQn, 0); //NVIC_EnableIRQ(TPM0_IRQn); //ptrMyReg = (volatile unsigned int *) NVIC_ISER; //*ptrMyReg = 0x14020000; // pc.printf("NVIC_ISER = 0x%x ", *ptrMyReg); // ptrMyReg = (volatile unsigned int *) NVIC_ISPR; // pc.printf("NVIC_ISPR = 0x%x ", *ptrMyReg); TPM0_init(modulo_val, prescale_val); //ptrMyReg = (volatile unsigned int *) TPM0_MOD_ADDR; //pc.printf("TPM0_MOD_ADDR = 0x%x ", *ptrMyReg); NVIC_EnableIRQ(TPM0_IRQn); // ptrMyReg = (volatile unsigned int *) TPM0_CONF_ADDR; // pc.printf("TPM0_CONF = 0x%x\n", *ptrMyReg); gpio_init(&gpio_1, PTA1, PIN_OUTPUT); gpio_write(&gpio_1, 0); gpio_init(&gpio_2, PTA1, PIN_OUTPUT); gpio_write(&gpio_2, 0); gpio_write(&gpio_1, 1); //gpio_write(&gpio_2, 1); // ------lagacy code ---------------------------------- */ uart_mbed.baud(921600); // register uart handler from BBB uart_beagle.attach(rec_byte_from_beagle, Serial::RxIrq); #ifdef IS_TRANSMITTER wait(1.0); // wait enough time for receiver to attach handler #else //IS_RECEIVER uart_mbed.attach(receiver_rec_byte_from_mbed, Serial::RxIrq); #endif #ifdef IS_TRANSMITTER // TODO: enable timer, attach handler "transmitter_timer_handler_reset_countdown", prescale = 0, modulo = ? #endif // a place should never reach while (true) { wait(999); } }