diff --git a/hardware.h b/hardware.h index 04e11a6..14d56b1 100644 --- a/hardware.h +++ b/hardware.h @@ -14,8 +14,8 @@ #define TFT_RST 26 // PS/2 keyboard -#define KBD_DATA 14 -#define KBD_IRQ 0 +#define KBD_DATA 34 +#define KBD_IRQ 35 // SPI-RAM #undef SPIRAM_CS @@ -26,6 +26,8 @@ // sound #define DAC_SOUND 25 +#define PWM_SOUND 25 +#define PWM_DUTY 20 // 20/1024 -> volume bool hardware_reset(); void hardware_init(class CPU &); diff --git a/sound_pwm.cpp b/sound_pwm.cpp new file mode 100644 index 0000000..7ac2b5f --- /dev/null +++ b/sound_pwm.cpp @@ -0,0 +1,54 @@ +#include "sound_pwm.h" +#include "hardware.h" + +#if defined(ESP32) +#include + +#define CHANNEL LEDC_CHANNEL_0 +#define TIMER LEDC_TIMER_0 +#define SPEED_MODE LEDC_HIGH_SPEED_MODE + +void PWM::begin(unsigned gpio) { + ledc_timer_config_t timer_conf; + timer_conf.duty_resolution = LEDC_TIMER_10_BIT; + timer_conf.freq_hz = 440; + timer_conf.speed_mode = SPEED_MODE; + timer_conf.timer_num = TIMER; + ESP_ERROR_CHECK(::ledc_timer_config(&timer_conf)); + + ledc_channel_config_t ledc_conf; + ledc_conf.channel = CHANNEL; + ledc_conf.duty = 0; + ledc_conf.gpio_num = gpio; + ledc_conf.intr_type = LEDC_INTR_DISABLE; + ledc_conf.speed_mode = SPEED_MODE; + ledc_conf.timer_sel = TIMER; + ESP_ERROR_CHECK(::ledc_channel_config(&ledc_conf)); +} + +void PWM::set_duty(unsigned duty) { + ESP_ERROR_CHECK(::ledc_set_duty(SPEED_MODE, CHANNEL, duty)); + ESP_ERROR_CHECK(::ledc_update_duty(SPEED_MODE, CHANNEL)); +} + +void PWM::stop() { + set_duty(0); +} + +void PWM::set_freq(unsigned freq) { + ESP_ERROR_CHECK(::ledc_set_freq(SPEED_MODE, TIMER, freq)); +} + +#else +void PWM::begin(unsigned gpio) { +} + +void PWM::start(unsigned duty) { +} + +void PWM::stop() { +} + +void PWM::set_freq(unsigned freq) { +} +#endif diff --git a/sound_pwm.h b/sound_pwm.h new file mode 100644 index 0000000..e4d87e4 --- /dev/null +++ b/sound_pwm.h @@ -0,0 +1,12 @@ +#ifndef __SOUND_PWM_H__ +#define __SOUND_PWM_H__ + +class PWM { +public: + void begin(unsigned gpio); + void set_duty(unsigned duty); + void stop(); + void set_freq(unsigned freq); +}; + +#endif