예제 #1
0
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();
        }
    }
}
예제 #2
0
/**
	 * @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();
	}
}