Beispiel #1
0
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;
	}
}