[Audio] Enable Complementary output for PWM Hardware driver (#22726)

Co-authored-by: Joel Challis <git@zvecr.com>
This commit is contained in:
Drashna Jaelre 2023-12-21 19:38:59 -08:00 committed by GitHub
parent 9069c4540f
commit 29f8fa35cf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 1 deletions

View file

@ -199,6 +199,11 @@ with all this information, the configuration would contain these lines:
ChibiOS uses GPIOv1 for the F103, which only knows of one alternate function. ChibiOS uses GPIOv1 for the F103, which only knows of one alternate function.
On 'larger' STM32s, GPIOv2 or GPIOv3 are used; with them it is also necessary to configure `AUDIO_PWM_PAL_MODE` to the correct alternate function for the selected pin, timer and timer-channel. On 'larger' STM32s, GPIOv2 or GPIOv3 are used; with them it is also necessary to configure `AUDIO_PWM_PAL_MODE` to the correct alternate function for the selected pin, timer and timer-channel.
You can also use the Complementary output (`TIMx_CHyN`) for PWM on supported controllers. To enable this functionality, you will need to make the following changes:
```c
// config.h:
#define AUDIO_PWM_COMPLEMENTARY_OUTPUT
```
### PWM software :id=pwm-software ### PWM software :id=pwm-software

View file

@ -22,6 +22,12 @@
# define AUDIO_PWM_COUNTER_FREQUENCY 100000 # define AUDIO_PWM_COUNTER_FREQUENCY 100000
#endif #endif
#ifndef AUDIO_PWM_COMPLEMENTARY_OUTPUT
# define AUDIO_PWM_OUTPUT_MODE PWM_OUTPUT_ACTIVE_HIGH
#else
# define AUDIO_PWM_OUTPUT_MODE PWM_COMPLEMENTARY_OUTPUT_ACTIVE_HIGH
#endif
extern bool playing_note; extern bool playing_note;
extern bool playing_melody; extern bool playing_melody;
extern uint8_t note_timbre; extern uint8_t note_timbre;
@ -29,7 +35,7 @@ extern uint8_t note_timbre;
static PWMConfig pwmCFG = {.frequency = AUDIO_PWM_COUNTER_FREQUENCY, /* PWM clock frequency */ static PWMConfig pwmCFG = {.frequency = AUDIO_PWM_COUNTER_FREQUENCY, /* PWM clock frequency */
.period = 2, .period = 2,
.callback = NULL, .callback = NULL,
.channels = {[(AUDIO_PWM_CHANNEL - 1)] = {.mode = PWM_OUTPUT_ACTIVE_HIGH, .callback = NULL}}}; .channels = {[(AUDIO_PWM_CHANNEL - 1)] = {.mode = AUDIO_PWM_OUTPUT_MODE, .callback = NULL}}};
static float channel_1_frequency = 0.0f; static float channel_1_frequency = 0.0f;