#include #include #include #include #include #include #include "hardware/gpio.h" #include "hardware/pwm.h" #include "hardware/adc.h" #include "pico/multicore.h" #include "pico/stdlib.h" #include "buttons.h" #include "synth.h" #include "const.h" #include "macro.h" #include "state.h" #include "pwm.h" #include "mux.h" state_t state; void init_all() { stdio_init_all(); puts("Starting PIN initialization"); const uint8_t out_gpio[] = {MUX_S0,MUX_S1,MUX_S2, STATUS_LED}; const uint8_t in_gpio[] = {VCO_BUTTON,QUANT_BUTTON,AMEN_BUTTON}; const uint8_t adc_gpio[] = {MUX0,MUX1}; for (uint8_t i=0; i < ARRAY_LENGTH(out_gpio); i++) { gpio_init(out_gpio[i]); gpio_set_dir(out_gpio[i], true); } for (uint8_t i=0; i < ARRAY_LENGTH(in_gpio); i++) { gpio_init(in_gpio[i]); gpio_set_dir(in_gpio[i], false); } adc_init(); for (uint8_t i=0; i < ARRAY_LENGTH(adc_gpio); i++) { adc_gpio_init(adc_gpio[i]); adc_select_input(i); } // PWM bullshit gpio_set_function(AUDIO_OUT, GPIO_FUNC_PWM); uint slice = pwm_gpio_to_slice_num(AUDIO_OUT); pwm_config cfg = pwm_get_default_config(); pwm_config_set_wrap(&cfg, 3400); pwm_init(slice, &cfg, true); pwm_clear_irq(slice); pwm_set_irq_enabled(slice, true); irq_set_exclusive_handler(PWM_IRQ_WRAP, pwm_isr); irq_set_enabled(PWM_IRQ_WRAP, true); } __attribute__((noreturn)) void core1_main(void) { while (1) { update_buttons(); update_inputs(); printf("vco_mode: %d, quant_enabled: %d amen_enabled: %d\n", state.vco_mode,state.quant_enabled,state.amen_enabled); printf("clock_bpm: %f\n",state.clock_bpm); sleep_ms(1); } } __attribute__((noreturn)) int main() { init_all(); multicore_launch_core1(core1_main); while (1) {} }