void spi_begin(void) { spi_pin_init(); SPI0_CONTROL = 0; SPI0_CONTROL |= BIT(SPI_C_CLEAR_RX) | BIT(SPI_C_CLEAR_TX); // Clear TX and RX fifos SPI0_CONTROL &= ~(BIT(SPI_C_CPOL) | BIT(SPI_C_CPHA)); // Set data mode = 0 SPI0_CONTROL &= ~(BIT(SPI_C_CS0) | BIT(SPI_C_CS1)); // Set to CS0 and Chip Select Polarity=LOW SPI0_CONTROL &= ~BIT(SPI_C_CSPOL0); SPI0_CLK = 16; // Set clock to ??? }
/*! \fn __attribute__((no_instrument_function)) void not_main(void) * \brief The main, or not so main function. * * not_main is a thing i picked up from some example code online and haven't done anything with it since :S This is the entry point of the c program. */ __attribute__((no_instrument_function)) void not_main(void) { /* board initialisation */ uart_init(); spi_pin_init(); flag = 0; struct mpu60x0_stateType mpu60x0_state[NUM_FACES]; for (int i=0; i<NUM_FACES; i++) { mpu60x0_state[i].gyro_rate = INV_MPU60x0_FSR_250DPS; mpu60x0_state[i].accel_rate = INV_MPU60x0_FS_02G; mpu60x0_state[i].filter_cutoff = INV_MPU60x0_FILTER_256HZ_NOLPF2; } int init_failed = 0; /* initialise all mpu 6000 boards */ for (int i=0; i<NUM_FACES; i++) { if (!mpu60x0_init(shape_cs_mappings[i], &(mpu60x0_state[i]))) { init_failed = 1; printf("MPUDev: %d failed\n", i); } } if (init_failed) return; //Configure SD Status LED for output gpio_function_select(16, GPIO_FUNC_OUTPUT); int mode = select_mode(); printf("mode is: %d\n", mode); /* interrupt pin config */ gpio_set_interrupts(); c_enable_irq(); //assign function to handle gpio_irqs register_irq_handler ( GPIO_INT0, gpio_irq ); register_irq_handler ( GPIO_INT1, gpio_irq ); register_irq_handler ( GPIO_INT2, gpio_irq ); register_irq_handler ( GPIO_INT3, gpio_irq ); //enable irq handling on gpio interrupts enable_interrupt_for_irq(GPIO_INT0); enable_interrupt_for_irq(GPIO_INT1); enable_interrupt_for_irq(GPIO_INT2); enable_interrupt_for_irq(GPIO_INT3); flag = 0; unsigned int prevTs = 0; GPIO_OUTPUT_LEVEL prevLevel = GPIO_OUTPUT_HIGH; switch (mode) { case 0: main_readings(mpu60x0_state); return; case 1: static_calibration(mpu60x0_state); return; case 2: main_debug(mpu60x0_state); return; default: printf("invalid mode\n"); return; } }