Exemplo n.º 1
0
void encoder_init_all ()
	{
	uint8_t isr_counter = 0;
	
	Disable_global_interrupt();
	/* Initialization loop, this loop inits all required IO and interrupts
	 * for EIC module and pins used to read encoders.  */	
	while(isr_counter < ENCODER_COUNT)
		{
		/* Init io for interrupt line and state poll line. */
		gpio_enable_gpio_pin(encoder_handle[isr_counter].a_pin);
		gpio_enable_gpio_pin(encoder_handle[isr_counter].b_pin);
		
		/* Set pullup for both gpio channels. */
		gpio_enable_pin_pull_up(encoder_handle[isr_counter].a_pin);
		gpio_enable_pin_pull_up(encoder_handle[isr_counter].b_pin);
			
		/* Init interrupt from encoder A line */
		gpio_enable_pin_interrupt(encoder_handle[isr_counter].a_pin, GPIO_FALLING_EDGE);
		gpio_disable_pin_interrupt(encoder_handle[isr_counter].b_pin);
		
		INTC_register_interrupt(&encoders_and_buttons_isr, 
			AVR32_GPIO_IRQ_0 + (encoder_handle[isr_counter].a_pin/8),
			AVR32_INTC_INT0);			
		isr_counter++;
		}
	Enable_global_interrupt();
	}
Exemplo n.º 2
0
/** \brief Drive Y lines to ground. */
static void inline rtouch_ground_y_surface(void)
{
	gpio_enable_gpio_pin(rtouch_gpio_ymap[1].pin);
	gpio_enable_gpio_pin(rtouch_gpio_ymap[0].pin);

	gpio_clr_gpio_pin(rtouch_gpio_ymap[0].pin);
	gpio_clr_gpio_pin(rtouch_gpio_ymap[1].pin);
}
Exemplo n.º 3
0
/** \brief Enable pull-ups for Y lines.
 *
 * Used to be able to trigger an interrupt upon a touch.
 */
static void inline rtouch_pullup_y_surface(void)
{
	gpio_enable_gpio_pin(rtouch_gpio_ymap[1].pin);
	gpio_enable_gpio_pin(rtouch_gpio_ymap[0].pin);

	gpio_enable_pin_pull_up(rtouch_gpio_ymap[0].pin);
	gpio_enable_pin_pull_up(rtouch_gpio_ymap[1].pin);
}
Exemplo n.º 4
0
//! @{
void twis_init (void)
{
	twis_slave_fct_t twis_slave_fct;
#if BOARD == UC3L_EK
	/**
	* \internal For UC3L devices, TWI default pins are,
	* TWIMS0 -> PB05,PA21
	* TWIMS1 -> PB04
	* To enable TWI clock/data in another pin, these have
	* to be assigned to other peripherals or as GPIO.
	* \endinternal
	 */
	gpio_enable_gpio_pin(AVR32_PIN_PB05);
	gpio_enable_gpio_pin(AVR32_PIN_PA21);
#endif
	const gpio_map_t TWIS_GPIO_MAP = {
		{TEST_TWIS_TWCK_PIN, TEST_TWIS_TWCK_FUNCTION},
		{TEST_TWIS_TWD_PIN, TEST_TWIS_TWD_FUNCTION}
	};
	const twis_options_t TWIS_OPTIONS = {
		.pba_hz = FPBA_HZ,
		.speed = TWI_SPEED,
		.chip = SLAVE_ADDRESS,
		.smbus = false,
	};
	// Assign I/Os to SPI.
	gpio_enable_module (TWIS_GPIO_MAP,
			sizeof (TWIS_GPIO_MAP) / sizeof (TWIS_GPIO_MAP[0]));
	// Set pointer to user specific application routines
	twis_slave_fct.rx = &twis_slave_rx;
	twis_slave_fct.tx = &twis_slave_tx;
	twis_slave_fct.stop = &twis_slave_stop;
	// Initialize as master.
	twis_slave_init (TWIS, &TWIS_OPTIONS, &twis_slave_fct);
}
//! @}

/*! \brief Main function.
 */
/*! \remarks Main Function
 */
//! @{
int main (void)
{
	// Configure the system clock
	init_sys_clocks ();
	// Init debug serial line
	init_dbg_rs232 (FPBA_HZ);
	// Display a header to user
	print_dbg ("Slave Example\r\n");
	print_dbg ("Slave Started\r\n");
	// Initialize and enable interrupt
	irq_initialize_vectors();
	cpu_irq_enable();
	// Initialize the TWIS Module
	twis_init ();
	while (true);
}
Exemplo n.º 5
0
void
led_init(void)
{
	gpio_enable_gpio_pin(LED0_GPIO);
	gpio_enable_gpio_pin(LED1_GPIO);
	gpio_enable_gpio_pin(LED2_GPIO);
	LINK_LED_OFF();
	ERROR_LED_OFF();
	DATA_LED_OFF();
}
Exemplo n.º 6
0
/** \brief Drive voltage gradient on Y surface (YL=GND, YH=VDD). */
static void inline rtouch_gradient_y_surface(void)
{
	gpio_enable_gpio_pin(rtouch_gpio_ymap[1].pin);
	gpio_enable_gpio_pin(rtouch_gpio_ymap[0].pin);

	gpio_disable_pin_pull_up(rtouch_gpio_ymap[0].pin);
	gpio_disable_pin_pull_up(rtouch_gpio_ymap[1].pin);

	gpio_clr_gpio_pin(rtouch_gpio_ymap[0].pin);
	gpio_set_gpio_pin(rtouch_gpio_ymap[1].pin);
}
Exemplo n.º 7
0
/** \brief Drive X lines to ground. */
static void inline rtouch_ground_x_surface(void)
{
	/* To avoid a spike due to a Y-surface that is tristated and
	 * X-surface that was gradiented we need to set XH as input first.
	 * Otherwise the voltage on the signal line will rise to VDD. This is
	 * not an issue to the measurement but it helps to let the signal look
	 * nice and thus we perhaps improve the EMI a bit. */
	gpio_enable_gpio_pin(rtouch_gpio_xmap[1].pin);
	gpio_enable_gpio_pin(rtouch_gpio_xmap[0].pin);

	/* set output low */
	gpio_clr_gpio_pin(rtouch_gpio_xmap[1].pin);
	gpio_clr_gpio_pin(rtouch_gpio_xmap[0].pin);
}
Exemplo n.º 8
0
static void inline rtouch_tristate_x_surface(void)
{
	gpio_enable_gpio_pin(rtouch_gpio_xmap[1].pin);
	gpio_enable_gpio_pin(rtouch_gpio_xmap[0].pin);

	gpio_disable_pin_pull_up(rtouch_gpio_xmap[0].pin);
	gpio_disable_pin_pull_up(rtouch_gpio_xmap[1].pin);

	/* Enable ADC to control the pins */
	gpio_enable_module_pin(rtouch_gpio_xmap[0].pin,
			rtouch_gpio_xmap[0].function);
	gpio_enable_module_pin(rtouch_gpio_xmap[1].pin,
			rtouch_gpio_xmap[1].function);
}
Exemplo n.º 9
0
void board_init(void)
{
	/* This function is meant to contain board-specific initialization code
	 * for, e.g., the I/O pins. The initialization can rely on application-
	 * specific board configuration, found in conf_board.h.
	 */
	gpio_enable_gpio_pin(LOCK_LED);
	gpio_configure_pin(LOCK_LED, GPIO_DIR_OUTPUT);
}
Exemplo n.º 10
0
void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size)
{
  unsigned int i;

  for (i = 0; i < size; i++)
  {
    gpio_enable_gpio_pin(gpiomap->pin);
    gpiomap++;
  }
}
Exemplo n.º 11
0
void gpio_enable_gpio(const gpio_map_t gpiomap, uint32_t size)
{
  uint32_t i;

  for (i = 0; i < size; i++)
  {
    gpio_enable_gpio_pin(gpiomap->pin);
    gpiomap++;
  }
}
Exemplo n.º 12
0
Arquivo: main.c Projeto: Dewb/mod
int main(void)
{
	// Switch main clock from internal RC to external Oscillator 0
	pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);

	init_dbg_rs232(FOSC0);

	gpio_enable_gpio_pin(AVR32_PIN_PB00);

	print_dbg("\r\n\nstart");

	while (true) {
		delay_ms(250);
		print_dbg(".");
		gpio_tgl_gpio_pin(AVR32_PIN_PB00);
	}
}
Exemplo n.º 13
0
int main (void)
{
	// Initialize CPU clock to 48 MHz (configured in conf_clock.h)
	sysclk_init();
	
	// Initialize the EVK1100 and its pin configuration
	board_init();
	
	// Enable LED1 and LED2 as GPIO output
	gpio_enable_gpio_pin(LED0_GPIO);
	gpio_enable_gpio_pin(LED1_GPIO);
	gpio_configure_pin(LED0_GPIO, GPIO_DIR_OUTPUT);
	gpio_configure_pin(LED1_GPIO, GPIO_DIR_OUTPUT);
	
	// Define USART GPIO pin map
	static const gpio_map_t USART_GPIO_MAP =
	{
		{USART_RXD_PIN, USART_RXD_FUNCTION},
		{USART_TXD_PIN, USART_TXD_FUNCTION}
	};

	// Define USART options
	static usart_options_t usart_options =
	{
		.baudrate		= 9600,
		.charlength		= 8,
		.paritytype		= USART_NO_PARITY,
		.stopbits		= USART_1_STOPBIT,
		.channelmode	= USART_NORMAL_CHMODE
	};	
	
	// Assign GPIO
	gpio_enable_module(	USART_GPIO_MAP,
	sizeof(USART_GPIO_MAP) / sizeof(USART_GPIO_MAP[0]) );
	
	// Initialize USART
	usart_init_rs232(USART, &usart_options, sysclk_get_pba_hz());
	
	// Disable all interrupts
	Disable_global_interrupt();
	
	// Initialize interrupt module
	INTC_init_interrupts();
	
	// Define handler and configure interrupt with INT1 priority
	INTC_register_interrupt(&push_button_interrupt_handler,
							AVR32_GPIO_IRQ_0 + (GPIO_PUSH_BUTTON_1/8),
							AVR32_INTC_INT1);
	
	// Enable falling edge interrupt on Push Button 1
	gpio_enable_pin_interrupt(GPIO_PUSH_BUTTON_1, GPIO_FALLING_EDGE);
	
	// Enable global interrupts
	Enable_global_interrupt();
	
	// Set initial state
	// STATE_1 = LED0 On, LED1 Off
	// STATE_2 = LED0 Off, LED1 On
	gpio_set_pin_low(LED0_GPIO);
	gpio_set_pin_high(LED1_GPIO);
	
	while (1)
	{
		// If an interrupt has happened and run_once is true...
		if (run_once)
		{
			switch (state_indicator)
			{
				// ... and if current state is STATE_1...
				case STATE_1:
				// Activate LED0 and deactivate LED1
				gpio_set_pin_low(LED0_GPIO);
				gpio_set_pin_high(LED1_GPIO);
				// Send debug message over USART				
				usart_write_line(USART,"--------------\r\n");
				usart_write_line(USART,"Interrupt detected on PB1\r\n");
				usart_write_line(USART,"STATE_1 engaged!\r\n");
				usart_write_line(USART,"LED1 = ON\r\n");
				usart_write_line(USART,"LED2 = OFF\r\n");
				usart_write_line(USART,"--------------\r\n");
				break;
				
				// ... and if current state is STATE_2...
				case STATE_2:
				// Activate LED1 and deactivate LED0
				gpio_set_pin_low(LED1_GPIO);
				gpio_set_pin_high(LED0_GPIO);
				// Send debug message over USART
				usart_write_line(USART,"--------------\r\n");
				usart_write_line(USART,"Interrupt detected on PB1\r\n");
				usart_write_line(USART,"STATE_2 engaged!\r\n");
				usart_write_line(USART,"LED1 = OFF\r\n");
				usart_write_line(USART,"LED2 = ON\r\n");
				usart_write_line(USART,"--------------\r\n");
				break;
			}
			
			// Reset run_once to false
			run_once = FALSE;
		}
		
		// Otherwise, do nothing!
	}
}
Exemplo n.º 14
0
/*! main function */
int main(void)
{
  init_sys_clocks();

  // Initialize RS232 debug text output.
  init_dbg_rs232(FOSC0);

  print_dbg(MSG_WELCOME);

  // Enable LED0 and LED1
  gpio_enable_gpio_pin(LED0_GPIO);
  gpio_enable_gpio_pin(LED1_GPIO);

  // Configure TWI as master
  twi_init();

  // Initialize TPA6130
  tpa6130_init();

  // Initialize DAC that send audio to TPA6130
  tpa6130_dac_start(DEFAULT_DAC_SAMPLE_RATE_HZ,
                    DEFAULT_DAC_NUM_CHANNELS,
                    DEFAULT_DAC_BITS_PER_SAMPLE,
                    DEFAULT_DAC_SWAP_CHANNELS,
                    master_callback,
                      AUDIO_DAC_OUT_OF_SAMPLE_CB
                    | AUDIO_DAC_RELOAD_CB,
                    FOSC0);

  tpa6130_set_volume(0x2F);
  tpa6130_get_volume();

  int count = 0;
  int i=0;

  while(true)
  {
    count = 0;

    // Store sample from the sound_table array
    while(count < (SOUND_SAMPLES)){
      samples[count++] = ((uint8_t)sound_table[i]+0x80) << 8;
      samples[count++] = ((uint8_t)sound_table[i]+0x80) << 8;
      i++;
      if (i >= sizeof(sound_table)) i = 0;
    }

    gpio_set_gpio_pin(LED0_GPIO);
    gpio_clr_gpio_pin(LED1_GPIO);

    // Play buffer
    tpa6130_dac_output((void *) samples,SOUND_SAMPLES/2);

    gpio_clr_gpio_pin(LED0_GPIO);
    gpio_set_gpio_pin(LED1_GPIO);

    /* Wait until the reload register is empty.
     * This means that one transmission is still ongoing
     * but we are already able to set up the next transmission
     */
     while(!tpa6130_dac_output(NULL, 0));
  }
}
Exemplo n.º 15
0
extern void init_gpio(void) {
    gpio_enable_gpio_pin(B00);
    gpio_enable_gpio_pin(B01);
    gpio_enable_gpio_pin(B02);
    gpio_enable_gpio_pin(B03);
    gpio_enable_gpio_pin(B04);
    gpio_enable_gpio_pin(B05);
    gpio_enable_gpio_pin(B06);
    gpio_enable_gpio_pin(B07);
    gpio_enable_gpio_pin(B08);
    gpio_enable_gpio_pin(B09);
    gpio_enable_gpio_pin(B10);
    gpio_enable_gpio_pin(NMI);
}
Exemplo n.º 16
0
extern void init_gpio(void) {
	gpio_enable_gpio_pin(A00);
	gpio_enable_gpio_pin(A01);
	gpio_enable_gpio_pin(A02);
	gpio_enable_gpio_pin(A03);
	gpio_enable_gpio_pin(A04);
	gpio_enable_gpio_pin(A05);
	gpio_enable_gpio_pin(A06);
	gpio_enable_gpio_pin(A07);

	gpio_enable_gpio_pin(B08);
	gpio_enable_gpio_pin(B09);
	gpio_enable_gpio_pin(B10);
	gpio_enable_gpio_pin(B11);
	
	gpio_enable_gpio_pin(NMI);

	gpio_configure_pin(B08, GPIO_DIR_OUTPUT);
	gpio_configure_pin(B09, GPIO_DIR_OUTPUT);
	gpio_configure_pin(B10, GPIO_DIR_OUTPUT);
	gpio_configure_pin(B11, GPIO_DIR_OUTPUT);
}
Exemplo n.º 17
0
extern void init_gpio(void) {
    gpio_enable_gpio_pin(B00);
    gpio_enable_gpio_pin(B01);
    gpio_enable_gpio_pin(B02);
    gpio_enable_gpio_pin(B03);
    gpio_enable_gpio_pin(B04);
    gpio_enable_gpio_pin(B05);
    gpio_enable_gpio_pin(B06);
    gpio_enable_gpio_pin(B07);
    gpio_enable_gpio_pin(B08);
    gpio_enable_gpio_pin(B09);
    gpio_enable_gpio_pin(B10);
    gpio_enable_gpio_pin(NMI);

    gpio_enable_pin_pull_up(B06);
    gpio_enable_pin_pull_up(B07);

    gpio_enable_pin_glitch_filter(B06);
    gpio_enable_pin_glitch_filter(B07);
    gpio_enable_pin_glitch_filter(NMI);
}
void boardsupport_init(central_data_t *central_data) 
{
	irq_initialize_vectors();
	cpu_irq_enable();
	Disable_global_interrupt();
		
	// Initialize the sleep manager
	sleepmgr_init();
	sysclk_init();

	board_init();
	delay_init(sysclk_get_cpu_hz());
	time_keeper_init();
		
	INTC_init_interrupts();

	// Switch on the red LED
	LED_On(LED2);

	// servo_pwm_hardware_init();
	pwm_servos_init( CS_ON_SERVO_7_8 );
	
	// Init UART 0 for XBEE communication
	xbee_init(UART0);
				
	// Init UART 3 for GPS communication
	gps_ublox_init(&(central_data->gps), UART3);
	
	// Init UART 4 for wired communication
	//console_init(CONSOLE_UART4);
	// Init USB for wired communication
	console_init(CONSOLE_USB);
		
	// connect abstracted aliases to hardware ports
	central_data->telemetry_down_stream = xbee_get_out_stream();
	central_data->telemetry_up_stream = xbee_get_in_stream();
	central_data->debug_out_stream = console_get_out_stream();
	central_data->debug_in_stream = console_get_in_stream();
	
	// init debug output
	print_util_dbg_print_init(central_data->debug_out_stream);
	print_util_dbg_print("Debug stream initialised\r\n");

	// Bind RC receiver with remote
	// spektrum_satellite_bind();

	// RC receiver initialization
	spektrum_satellite_init();

	// Init analog rails
	analog_monitor_conf_t analog_monitor_config = analog_monitor_default_config;
	//analog_monitor_config.conv_factor[ANALOG_RAIL_6] = 0.00023485f * 6.6f;
	//analog_monitor_config.conv_factor[ANALOG_RAIL_7] = 0.00023485f * 6.6f;
	//analog_monitor_config.conv_factor[ANALOG_RAIL_10] = -0.0002409f * 11.0f;
	//analog_monitor_config.conv_factor[ANALOG_RAIL_11] = -0.0002409f * 11.0f;
	analog_monitor_init(&central_data->analog_monitor, &analog_monitor_config);
	
	// init imu & compass
	i2c_driver_init(I2C0);
	
	lsm330dlc_init();
	print_util_dbg_print("LSM330 initialised \r\n");
		
	hmc5883l_init_slow();
	print_util_dbg_print("HMC5883 initialised \r\n");
	
	bmp085_init(&central_data->pressure);
	
	// init radar or ultrasound (not implemented yet)
	//i2c_driver_init(I2C1);
	
	// init 6V enable
	gpio_enable_gpio_pin(AVR32_PIN_PA04);
	gpio_set_gpio_pin(AVR32_PIN_PA04);
	
	Enable_global_interrupt();

	// Init piezo speaker
	piezo_speaker_init_binary();
	
	print_util_dbg_print("Board initialised\r\n");
}
Exemplo n.º 19
0
extern void init_gpio(void) {
	gpio_enable_gpio_pin(A00);
	gpio_enable_gpio_pin(A01);
	gpio_enable_gpio_pin(A02);
	gpio_enable_gpio_pin(A03);
	gpio_enable_gpio_pin(A04);
	gpio_enable_gpio_pin(A05);
	gpio_enable_gpio_pin(A06);
	gpio_enable_gpio_pin(A07);

	gpio_enable_gpio_pin(B08);
	gpio_enable_gpio_pin(B09);
	gpio_enable_gpio_pin(B10);
	gpio_enable_gpio_pin(B11);

  // loopback for version detection (on new version B00 and B01 are bridged)
	gpio_enable_gpio_pin(B00);
	gpio_enable_gpio_pin(B01);
  gpio_enable_pin_pull_up(B01);
  gpio_configure_pin(B00, GPIO_DIR_OUTPUT);
  gpio_set_pin_low(B00);

  // turn on pull-ups for SDA/SCL
  // gpio_enable_pin_pull_up(A09);
  // gpio_enable_pin_pull_up(A10);

	gpio_enable_gpio_pin(NMI);

	gpio_configure_pin(B08, GPIO_DIR_OUTPUT);
	gpio_configure_pin(B09, GPIO_DIR_OUTPUT);
	gpio_configure_pin(B10, GPIO_DIR_OUTPUT);
	gpio_configure_pin(B11, GPIO_DIR_OUTPUT);
}
Exemplo n.º 20
0
void boardsupport_init(central_data_t *central_data) 
{
	irq_initialize_vectors();
	cpu_irq_enable();
	Disable_global_interrupt();
		
	// Initialize the sleep manager
	sleepmgr_init();
	sysclk_init();

	board_init();
	delay_init(sysclk_get_cpu_hz());
	time_keeper_init();
		
	INTC_init_interrupts();

	// Switch on the red LED
	LED_On(LED2);

	// servo_pwm_hardware_init();
	pwm_servos_init( CS_ON_SERVO_7_8 );
	
	// Init UART 0 for XBEE communication
	xbee_init(UART0);
				
	// Init UART 4 for wired communication
	//console_init(CONSOLE_UART4);
	// Init USB for wired communication
	console_init(CONSOLE_USB);
		
	// connect abstracted aliases to hardware ports
	central_data->telemetry_down_stream = xbee_get_out_stream();
	central_data->telemetry_up_stream = xbee_get_in_stream();
	central_data->debug_out_stream = console_get_out_stream();
	central_data->debug_in_stream = console_get_in_stream();
	
	// init debug output
	print_util_dbg_print_init(central_data->debug_out_stream);
	print_util_dbg_print("Debug stream initialised\r\n");

	// RC receiver initialization
	spektrum_satellite_init();

	// init imu & compass
	i2c_driver_init(I2C0);
	
	lsm330dlc_init();
	print_util_dbg_print("LSM330 initialised \r\n");
		
	hmc5883l_init_slow();
	print_util_dbg_print("HMC5883 initialised \r\n");
	
	// init radar or ultrasound (not implemented yet)
	//i2c_driver_init(I2C1);
	
	// init 6V enable
	gpio_enable_gpio_pin(AVR32_PIN_PA04);
	gpio_set_gpio_pin(AVR32_PIN_PA04);
	
	Enable_global_interrupt();

	// Init piezo speaker
	piezo_speaker_init_binary();
	
	print_util_dbg_print("Board initialised\r\n");
}