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(); }
/** \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); }
/** \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); }
//! @{ 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); }
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(); }
/** \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); }
/** \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); }
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); }
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); }
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++; } }
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++; } }
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); } }
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! } }
/*! 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)); } }
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); }
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); }
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(¢ral_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(¢ral_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"); }
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); }
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"); }