int16_t main(void) { init_clock(); init_timer(); init_ui(); init_pin(); init_spi(); init_oc(); init_md(); // Current measurement pin pin_analogIn(&A[0]); // SPI pin setup ENC_MISO = &D[1]; ENC_MOSI = &D[0]; ENC_SCK = &D[2]; ENC_NCS = &D[3]; pin_digitalOut(ENC_NCS); pin_set(ENC_NCS); // Open SPI in mode 1 spi_open(&spi1, ENC_MISO, ENC_MOSI, ENC_SCK, 2e6, 1); // Motor setup md_velocity(&md1, 0, 0); // Get initial angle offset uint8_t unset = 1; while (unset) { ANG_OFFSET = enc_readReg((WORD) REG_ANG_ADDR); unset = parity(ANG_OFFSET.w); } ANG_OFFSET.w &= ENC_MASK; // USB setup InitUSB(); while (USB_USWSTAT!=CONFIG_STATE) { ServiceUSB(); } // Timers timer_setFreq(&timer2, READ_FREQ); timer_setFreq(&timer3, CTRL_FREQ); timer_start(&timer2); timer_start(&timer3); // Main loop while (1) { ServiceUSB(); if (timer_flag(&timer2)) { timer_lower(&timer2); get_readings(); } if (timer_flag(&timer3)) { timer_lower(&timer3); set_velocity(); } } }
/** * @brief Main thread of computation running in superloop to update sensor data and transmit * and also subsequently run logic for PWM LED display and double tap detection * @param void */ int main(void){ /* INITIALIZE SYSTEM CLOCK AND PERIPHERALS */ HAL_Init(); SystemClock_Config(); SPI_Init1(); MEMS_Config(); MEMS_Config_IT(); ADC_Config(); LED_Config(); PWM_Config(); /* CONFIG FOR PWM */ #ifdef LED_SPEED_SLOWER speed = 1500; #endif #ifdef LED_SPEED_SLOW speed = 1000; #endif #ifdef LED_SPEED_MEDIUM speed = 800; #endif #ifdef LED_SPEED_FAST speed = 400; #endif #ifdef LED_SPEED_FASTER speed = 200; #endif #ifdef LED_ALL_ON speed = 100; #endif /* CONFIG FOR DOUBLE TAP */ counter2 = 0; thresh1 = 1300; assert1 = 0; assert2 = 0; assertFall = 0; assertRise2 = 0; assertDoubleTap = 0; /* BEGIN SUPERLOOP */ while(1){ /* SET SAMPLING DELAY FOR SENSORS */ if(interrupt != 0){ interrupt = 0; get_readings(); } /* TRANSMIT SENSOR DATA TO MASTER */ HAL_SPI_Transmit(&SpiHandle_2, txBuffer, 4, 10000); /* LOGIC FOR IMPLEMENTING PWM DISPLAY LED */ pwm_display(); /* LOGIG FOR IMPLEMENTING DOUBLE TAP DETECTION */ double_tap(); } }