Compare commits

..

No commits in common. "c71a162d867ecdce0ca21f259f1d7f8fd3efa767" and "d5933cd06049f18adc33af3fa84e554091bf3a1d" have entirely different histories.

5 changed files with 13 additions and 69 deletions

View File

@ -4,11 +4,8 @@
#include <pico/types.h> #include <pico/types.h>
#include "hardware/gpio.h" #include "hardware/gpio.h"
void handle_vco_change(void) { void handle_vco_change(uint gpio, uint32_t events) {
static bool btn_prev = false; if (gpio == VCO_BUTTON && (events & GPIO_IRQ_EDGE_RISE)) {
bool btn_now = gpio_get(VCO_BUTTON);
if (btn_now && !btn_prev) {
if (state.vco_mode == VCO_SAW) state.vco_mode = VCO_SINE; if (state.vco_mode == VCO_SAW) state.vco_mode = VCO_SINE;
otherwise state.vco_mode++; otherwise state.vco_mode++;
} }
@ -21,5 +18,4 @@ void update_button(uint pin, bool *button_state) {
void update_buttons() { void update_buttons() {
update_button(QUANT_BUTTON, &state.quant_enabled); update_button(QUANT_BUTTON, &state.quant_enabled);
update_button(AMEN_BUTTON, &state.amen_enabled); update_button(AMEN_BUTTON, &state.amen_enabled);
handle_vco_change();
} }

View File

@ -1,7 +1,3 @@
#pragma once #pragma once
#include <pico/types.h> #include <pico/types.h>
void handle_vco_change(uint gpio, uint32_t events);
void handle_vco_change(uint gpio, uint32_t events);
void update_button(uint pin, bool *button_state);
void update_buttons();

43
main.cc
View File

@ -1,21 +1,15 @@
#include <hardware/irq.h> #include "buttons.h"
#include <sys/types.h> #include "macro.h"
#include "pico/stdlib.h"
#include <hardware/gpio.h>
#include <math.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <math.h> #include "const.h"
#include "hardware/gpio.h"
#include "hardware/pwm.h" #include "hardware/pwm.h"
#include "hardware/adc.h" #include "hardware/adc.h"
#include "pico/multicore.h"
#include "pico/stdlib.h"
#include "buttons.h"
#include "const.h"
#include "macro.h"
#include "state.h" #include "state.h"
#include "pwm.h"
state_t state; state_t state;
@ -26,6 +20,8 @@ void init_all() {
const uint8_t in_gpio[] = {VCO_BUTTON,QUANT_BUTTON,AMEN_BUTTON}; const uint8_t in_gpio[] = {VCO_BUTTON,QUANT_BUTTON,AMEN_BUTTON};
const uint8_t adc_gpio[] = {MUX0,MUX1}; const uint8_t adc_gpio[] = {MUX0,MUX1};
gpio_set_function(AUDIO_OUT, GPIO_FUNC_PWM);
for (uint8_t i=0; i < ARRAY_LENGTH(out_gpio); i++) { for (uint8_t i=0; i < ARRAY_LENGTH(out_gpio); i++) {
gpio_init(out_gpio[i]); gpio_init(out_gpio[i]);
gpio_set_dir(out_gpio[i], true); gpio_set_dir(out_gpio[i], true);
@ -41,33 +37,14 @@ void init_all() {
adc_select_input(i); adc_select_input(i);
} }
// PWM bullshit gpio_pull_down(VCO_BUTTON);
gpio_set_function(AUDIO_OUT, GPIO_FUNC_PWM); gpio_set_irq_enabled_with_callback(VCO_BUTTON, GPIO_IRQ_EDGE_RISE, true, &handle_vco_change);
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();
}
} }
__attribute__((noreturn)) __attribute__((noreturn))
int main() { int main() {
init_all(); init_all();
multicore_launch_core1(core1_main);
while (1) {} while (1) {}
} }

21
pwm.c
View File

@ -1,21 +0,0 @@
#include <hardware/pwm.h>
#include <pico/types.h>
#include "const.h"
#include "pwm.h"
void pwm_isr(void) {
static uint slice = -1, chan = -1;
if (slice == -1) slice = pwm_gpio_to_slice_num(AUDIO_OUT);
if (chan == -1) chan = pwm_gpio_to_channel(AUDIO_OUT);
pwm_clear_irq(slice);
// TODO:
float sample = 0.0f;
uint16_t level = (uint16_t)((sample + 1.0f) * 0.5f * 3400.0f);
pwm_set_chan_level(slice, chan, level);
}

4
pwm.h
View File

@ -1,4 +0,0 @@
#pragma once
void pwm_isr(void);