Add pwm module.

This commit is contained in:
Marco 2022-05-31 00:11:00 +02:00
parent 231304bc5f
commit a7f54de603
2 changed files with 50 additions and 0 deletions

5
src/include/pwm.h Normal file
View File

@ -0,0 +1,5 @@
#define OMEGA 314.1592654
void pwm_init(void);
void pwm_worker(void);
void test_pwm(void);

45
src/pwm.c Normal file
View File

@ -0,0 +1,45 @@
#include <stdio.h>
#include <stdint.h>
#include <math.h>
#include "pwm.h"
#include "timer.h"
int interrupt_received = 0;
uint32_t interrupt_counter = 0;
void pwm_init(void)
{
timer_subToT1Overflow(test_pwm);
}
void pwm_worker()
{
if (!interrupt_received)
return;
double amp = 0.0;
/* t_n is the time of nth pulse */
/* factor 0.00005 because of 1/20 kHz */
double t_n = interrupt_counter * 0.00005;
amp = sin(2*M_PI*50*t_n);
if (amp > 0.0)
timer_setT1CompareMatch((uint16_t)(amp * timer_getT1Top()));
else
timer_setT1CompareMatch(0);
/* Let's wait for next interrupt */
interrupt_received = 0;
}
void test_pwm(void)
{
interrupt_received = 1;
interrupt_counter++;
if (interrupt_counter == 400)
interrupt_counter = 0;
}