X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fmetro-m0%2Fmetro-m0.c;h=5fe7723be83c72848f68388193213c6f5f019e12;hb=HEAD;hp=32b241ec5d2ebc792d5dbb90f7f0a3719fd39ba4;hpb=4be4ffe72c5f678a66658e9e61d3cfac7f20a9b3;p=fw%2Faltos diff --git a/src/metro-m0/metro-m0.c b/src/metro-m0/metro-m0.c index 32b241ec..5fe7723b 100644 --- a/src/metro-m0/metro-m0.c +++ b/src/metro-m0/metro-m0.c @@ -15,29 +15,45 @@ #include #include #include +#include -#define SNEK_CS_PORT (&samd21_port_a) -#define SNEK_CS_PIN (11) -#define SNEK_SPI_INDEX AO_SPI_0_PA08_PA09_PA10 -#define SNEK_SPI_SPEED ao_spi_speed(1000000) +static int pressed; -static const uint8_t spi_test[] = { - 0xaa, - 0xcc, - 0xff, - 0x00 -}; +static void +ao_button_callback(void) +{ + pressed = 1; + ao_wakeup(&pressed); +} static void -ao_spi_test(void) +ao_beep_test(void) { - ao_spi_get_bit(SNEK_CS_PORT, SNEK_CS_PIN, SNEK_SPI_INDEX, SNEK_SPI_SPEED); - ao_spi_send(spi_test, sizeof(spi_test), SNEK_SPI_INDEX); - ao_spi_put_bit(SNEK_CS_PORT, SNEK_CS_PIN, SNEK_SPI_INDEX); + AO_BEEP_TCC->ctrlbset = (SAMD21_TCC_CTRLB_CMD_READSYNC << SAMD21_TCC_CTRLB_CMD); + printf("pressed timer %ld\n", AO_BEEP_TCC->count); + fflush(stdout); + ao_beep_for(AO_BEEP_MID_DEFAULT, AO_MS_TO_TICKS(200)); } -const struct ao_cmds ao_spi_cmds[] = { - { ao_spi_test, "s \0Send some bytes over spi" }, +static void +ao_button(void) +{ + ao_exti_setup(&samd21_port_a, 10, AO_EXTI_MODE_FALLING | AO_EXTI_MODE_PULL_UP, ao_button_callback); + ao_exti_enable(&samd21_port_a, 10); + for (;;) { + ao_arch_block_interrupts(); + pressed = 0; + while (!pressed) + ao_sleep(&pressed); + ao_arch_release_interrupts(); + ao_beep_test(); + } +} + +static struct ao_task ao_button_task; + +const struct ao_cmds ao_test_cmds[] = { + { ao_beep_test, "b \0beep" }, { 0, NULL }, }; @@ -48,11 +64,19 @@ int main(void) ao_task_init(); ao_timer_init(); ao_dma_init(); + ao_exti_init(); ao_spi_init(); + ao_adc_init(); + ao_serial_init(); + ao_gps_init(); + ao_beep_init(); ao_usb_init(); - ao_cmd_register(ao_spi_cmds); - ao_spi_init_cs(&samd21_port_a, 1 << 11); /* analog 8 for CS */ + ao_storage_init(); ao_cmd_init(); + + ao_cmd_register(ao_test_cmds); + ao_add_task(&ao_button_task, ao_button, "button"); ao_start_scheduler(); + return 0; }