#include #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 "const.h" #include "macro.h" #include "input.h" #include "state.h" #include "synth.h" #include "pwm.h" input_t input; state_t state; void core0_init(void) { // 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); puts("PWM Initialized."); // Synth synth_init(&state); puts("Synth Initialized."); } void core1_init(void) { // GPIO const uint8_t out_gpio[] = { MUX_S0, MUX_S1, MUX_S2, STATUS_LED }; 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 < BUTTON_COUNT; i++) { gpio_init(BUTTON_BASE + i); gpio_set_dir(BUTTON_BASE + 1, false); } adc_init(); adc_gpio_init(MUX0); adc_gpio_init(MUX1); puts("GPIO Initialized."); // Input set_toggle_button(0, true); set_toggle_button(1, false); set_toggle_button(2, true); } noreturn void core1_loop(void) { while (1) { update_inputs(&input); update_state(&state, &input); printf("%d %f\n", input.buttons[0], input.pots[0]); printf("%d\n", input.buttons[1]); printf("%d\n", input.buttons[2]); printf("%d\n", input.buttons[3]); sleep_ms(1); } } noreturn void core0_loop(void) { while (1) { } } int main() { stdio_init_all(); core0_init(); core1_init(); multicore_launch_core1(core1_loop); core0_loop(); }