diff options
Diffstat (limited to 'Core/Src/cs4272.c')
| -rwxr-xr-x | Core/Src/cs4272.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/Core/Src/cs4272.c b/Core/Src/cs4272.c index 81179c7..9a7f0d1 100755 --- a/Core/Src/cs4272.c +++ b/Core/Src/cs4272.c @@ -9,6 +9,14 @@ #include "cs4272.h"
#include "ringmod.h"
+const struct RingModParams params = {
+ 0.40f,
+ 156.0f,
+ 6.90f,
+ 0.18f,
+ true,
+};
+
volatile int32_t rx_buffer[BUFFER_SIZE] __attribute__((section(".audio_buffers")));
volatile int32_t tx_buffer[BUFFER_SIZE] __attribute__((section(".audio_buffers")));
volatile float samples[BUFFER_SIZE] __attribute__((section(".sdram")));
@@ -50,13 +58,13 @@ const uint8_t CS4272_CONFIG[7] = { 0b00000010,
};
-void int32_t_to_float(int32_t *in, float *out, size_t range_min, size_t range_max) {
+inline void int32_t_to_float(int32_t *in, float *out, const size_t range_min, const size_t range_max) {
for (size_t i = range_min; i < range_max; ++i) {
out[i] = ((float)(in[i] << 8)) / ((float)INT32_MAX);
}
}
-void float_to_int32_t(float *in, int32_t *out, size_t range_min, size_t range_max) {
+inline void float_to_int32_t(float *in, int32_t *out, const size_t range_min, const size_t range_max) {
for (size_t i = range_min; i < range_max; ++i) {
out[i] = ((int32_t)(in[i] * ((float)INT32_MAX))) >> 8;
}
@@ -65,7 +73,7 @@ void float_to_int32_t(float *in, int32_t *out, size_t range_min, size_t range_ma void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) {
int32_t_to_float((int32_t *)rx_buffer, (float *)samples, 0, BUFFER_SIZE / 2);
- ringmod((float *)samples, 0, BUFFER_SIZE / 2);
+ ringmod((float *)samples, 0, BUFFER_SIZE / 2, ¶ms);
float_to_int32_t((float *)samples, (int32_t *)tx_buffer, 0, BUFFER_SIZE / 2);
}
@@ -73,20 +81,18 @@ void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai) { void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai) {
int32_t_to_float((int32_t *)rx_buffer, (float *)samples, BUFFER_SIZE / 2, BUFFER_SIZE);
- ringmod((float *)samples, BUFFER_SIZE / 2, BUFFER_SIZE);
+ ringmod((float *)samples, BUFFER_SIZE / 2, BUFFER_SIZE, ¶ms);
float_to_int32_t((float *)samples, (int32_t *)tx_buffer, BUFFER_SIZE / 2, BUFFER_SIZE);
}
-HAL_StatusTypeDef CS4272_ReadRegister(uint8_t addr, uint8_t *data) {
- return HAL_I2C_Mem_Read(&hi2c4, CS4272_I2C_ADDR, addr, I2C_MEMADD_SIZE_8BIT,
- data, 1, HAL_MAX_DELAY);
+HAL_StatusTypeDef CS4272_ReadRegister(const uint8_t addr, uint8_t *data) {
+ return HAL_I2C_Mem_Read(&hi2c4, CS4272_I2C_ADDR, addr, I2C_MEMADD_SIZE_8BIT, data, 1, HAL_MAX_DELAY);
}
-HAL_StatusTypeDef CS4272_WriteRegister(uint8_t addr, uint8_t data) {
- return HAL_I2C_Mem_Write(&hi2c4, CS4272_I2C_ADDR, addr,
- I2C_MEMADD_SIZE_8BIT, &data, 1, HAL_MAX_DELAY);
+HAL_StatusTypeDef CS4272_WriteRegister(const uint8_t addr, uint8_t data) {
+ return HAL_I2C_Mem_Write(&hi2c4, CS4272_I2C_ADDR, addr, I2C_MEMADD_SIZE_8BIT, &data, 1, HAL_MAX_DELAY);
}
void CS4272_Reset(void) {
|
