-
Notifications
You must be signed in to change notification settings - Fork 0
/
audiocalc.c
33 lines (28 loc) · 1.02 KB
/
audiocalc.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
* @{
*
* @brief Calculator for DAC and PWM vaules
* @author Copyright (C) René Herthel <rene-herthel@outlook.de>
* @author Copyright (C) Hauke Sondermann <hauke.sondermann@haw-hamburg.de>
*
* @}
*/
#include "include/audiocalc.h"
#include "driver/config/periph_conf.h"
#define BIT (1)
#define SHIFT_16 (16)
#define SHIFT_15 (15)
#define SHIFT_12 (12)
#define MIN_VALUE (BIT << SHIFT_15) /**< (32768) */
#define VALUE_SPAN ((BIT << SHIFT_16) - BIT) /**< ((65536) - 1) */
#define DAC_MAX_VAL ((BIT << SHIFT_12) - BIT) /**< ((4096) - 1) */
#define SCALE_PWM ((((float)SYS_FREQ / TIMER_FREQ) - 1) / VALUE_SPAN)
#define SCALE_DAC ((float)DAC_MAX_VAL / VALUE_SPAN)
uint16_t calc_pwm(int16_t value)
{
return (uint16_t)(((value + MIN_VALUE) * SCALE_PWM));
}
uint16_t calc_dac(int16_t value)
{
return (uint16_t)(((value + MIN_VALUE) * SCALE_DAC));
}