/* * Code generated from Atmel Start. * * This file will be overwritten when reconfiguring your Atmel Start project. * Please copy examples or other code you want to keep to a separate file * to avoid losing it when reconfiguring. */ #include "driver_examples.h" #include "driver_init.h" #include "utils.h" /** * Example of using EXTERNAL_IRQ_0 */ void EXTERNAL_IRQ_0_example(void) { } /** * Example of using QUAD_SPI_0 to get N25Q256A status value, * and check bit 0 which indicate embedded operation is busy or not. */ void QUAD_SPI_0_example(void) { uint8_t status = 0xFF; struct _qspi_command cmd = { .inst_frame.bits.inst_en = 1, .inst_frame.bits.data_en = 1, .inst_frame.bits.tfr_type = QSPI_READ_ACCESS, .instruction = 0x05, .buf_len = 1, .rx_buf = &status, }; qspi_sync_enable(&QUAD_SPI_0); while (status & (1 << 0)) { qspi_sync_serial_run_command(&QUAD_SPI_0, &cmd); } qspi_sync_deinit(&QUAD_SPI_0); } static struct timer_task TIMER_0_task1, TIMER_0_task2; /** * Example of using TIMER_0. */ static void TIMER_0_task1_cb(const struct timer_task *const timer_task) { } static void TIMER_0_task2_cb(const struct timer_task *const timer_task) { } void TIMER_0_example(void) { TIMER_0_task1.interval = 100; TIMER_0_task1.cb = TIMER_0_task1_cb; TIMER_0_task1.mode = TIMER_TASK_REPEAT; TIMER_0_task2.interval = 200; TIMER_0_task2.cb = TIMER_0_task2_cb; TIMER_0_task2.mode = TIMER_TASK_REPEAT; timer_add_task(&TIMER_0, &TIMER_0_task1); timer_add_task(&TIMER_0, &TIMER_0_task2); timer_start(&TIMER_0); } /** * Example of using USART_0 to write "Hello World" using the IO abstraction. */ void USART_0_example(void) { struct io_descriptor *io; usart_sync_get_io_descriptor(&USART_0, &io); usart_sync_enable(&USART_0); io_write(io, (uint8_t *)"Hello World!", 12); } void I2C_0_example(void) { struct io_descriptor *I2C_0_io; i2c_m_sync_get_io_descriptor(&I2C_0, &I2C_0_io); i2c_m_sync_enable(&I2C_0); i2c_m_sync_set_slaveaddr(&I2C_0, 0x12, I2C_M_SEVEN); io_write(I2C_0_io, (uint8_t *)"Hello World!", 12); } void delay_example(void) { delay_ms(5000); } static struct timer_task TIMER_1_task1, TIMER_1_task2; /** * Example of using TIMER_1. */ static void TIMER_1_task1_cb(const struct timer_task *const timer_task) { } static void TIMER_1_task2_cb(const struct timer_task *const timer_task) { } void TIMER_1_example(void) { TIMER_1_task1.interval = 100; TIMER_1_task1.cb = TIMER_1_task1_cb; TIMER_1_task1.mode = TIMER_TASK_REPEAT; TIMER_1_task2.interval = 200; TIMER_1_task2.cb = TIMER_1_task2_cb; TIMER_1_task2.mode = TIMER_TASK_REPEAT; timer_add_task(&TIMER_1, &TIMER_1_task1); timer_add_task(&TIMER_1, &TIMER_1_task2); timer_start(&TIMER_1); }