Init
This commit is contained in:
commit
d9a563ac9f
|
|
@ -0,0 +1,155 @@
|
||||||
|
//
|
||||||
|
// Created by xemon on 19.10.22.
|
||||||
|
//
|
||||||
|
#include "AudioCodec.h"
|
||||||
|
#include <max9860_regs.h>
|
||||||
|
#include <AsciiStringAssmeblingUtils.h>
|
||||||
|
#include <AsciiStringParsingUtils.h>
|
||||||
|
|
||||||
|
bool AudioCodecInitInterface(tAudioCodec *env);
|
||||||
|
|
||||||
|
bool AudioCodecTurnOff(tAudioCodec *env);
|
||||||
|
|
||||||
|
bool AudioCodecTurnOn(tAudioCodec *env);
|
||||||
|
|
||||||
|
bool AudioCodecInvalidateSettings(tAudioCodec *env);
|
||||||
|
|
||||||
|
#define IF_NOT_OK_I2C_RETURN(VALUE) if(!VALUE) return false;
|
||||||
|
|
||||||
|
void AudioCodecInit(
|
||||||
|
tAudioCodec *env,
|
||||||
|
tI2cIO *codecIO,
|
||||||
|
MAX9860_ComplexAudioConfig *config
|
||||||
|
) {
|
||||||
|
env->codecIO = codecIO;
|
||||||
|
env->config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AudioCodecEnable(tAudioCodec *env) {
|
||||||
|
// return true;
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN(AudioCodecTurnOff(env))
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN (AudioCodecInitInterface(env))
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN(AudioCodecInvalidateSettings(env))
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN(AudioCodecTurnOn(env))
|
||||||
|
|
||||||
|
// char asciiSettings[] = "00000000109E3F0400000633004A0000008A";
|
||||||
|
// char asciiSettings[] = "00109000040000048c20340000008a";
|
||||||
|
// uint8_t byteSettings[sizeof(asciiSettings) - 1 / 2];
|
||||||
|
// size_t dataLen = iAsciiStringParseHexBytes(byteSettings, asciiSettings, sizeof(asciiSettings) - 1);
|
||||||
|
// uint16_t res = I2cWrite(env->codecIO, MAX9860_ADDRESS_WRITE, byteSettings, dataLen, MAX9860_IO_TIMEOUT) == dataLen;
|
||||||
|
// return res;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool AudioCodecTurnOff(tAudioCodec *env) {
|
||||||
|
MAX9860_PowerManagementState MAX9860_POWER = {
|
||||||
|
.FullPowerOn=false,
|
||||||
|
.DAC_Enabled=false,
|
||||||
|
.ADC_EnabledLeft=false,
|
||||||
|
.ADC_EnabledRight=false,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
return xAudioCodecSetPowerManagement(env->codecIO, MAX9860_POWER);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AudioCodecTurnOn(tAudioCodec *env) {
|
||||||
|
MAX9860_PowerManagementState MAX9860_POWER = (MAX9860_PowerManagementState) {
|
||||||
|
.FullPowerOn=true,
|
||||||
|
.DAC_Enabled=true,
|
||||||
|
.ADC_EnabledLeft=true,
|
||||||
|
.ADC_EnabledRight=false,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
return xAudioCodecSetPowerManagement(env->codecIO, MAX9860_POWER);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AudioCodecInitInterface(tAudioCodec *env) {
|
||||||
|
|
||||||
|
// IF_NOT_OK_I2C_RETURN(AudioCodecTurnOff(env))
|
||||||
|
|
||||||
|
|
||||||
|
// uint8_t AUD_SET[15];
|
||||||
|
// vConvertAsciiToBytes((unsigned char *) "031120000C0044063320200000D58A", 30, (char *) AUD_SET);
|
||||||
|
//// "03 - 11 2000 - 0C 00 - 44063320200000D58A"
|
||||||
|
//// I2cIOResult codecSetRes =
|
||||||
|
// env->audioCodecIO->write(0x20, AUD_SET, 15, 1000);
|
||||||
|
// vMainModesArbiterInitMax9860(env);
|
||||||
|
|
||||||
|
MAX9860_ClocksState MAX9860_CLOCK = {
|
||||||
|
.MCLK_TO_PCLK_Prescaler=MAX9860_PRESCALER_MCLK_10_TO_20_MHZ,
|
||||||
|
.IntegerClockMode=MAX9860_ICM_NORMAL,
|
||||||
|
.EXACTLY_16KHZ=false,
|
||||||
|
|
||||||
|
//LRCLK for mclk 12.288mhz
|
||||||
|
.PLL_Enable=true,
|
||||||
|
.LRCLK_Driver=0x1000,// 8khz
|
||||||
|
// .LRCLK_Driver=0x2000,//16khz
|
||||||
|
};
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN(xAudioCodecSetClock(env->codecIO, MAX9860_CLOCK))
|
||||||
|
|
||||||
|
MAX9860_AudioInterfaceState MAX9860_AUDIO_INTERFACE = {
|
||||||
|
.MasterMode = false,
|
||||||
|
.LRCLK_Invert = false,
|
||||||
|
.DAC_BCLK_Invert = true,
|
||||||
|
.DAC_DelayMode = false,
|
||||||
|
.SDOUT_HighImpedanceMode = false,
|
||||||
|
.TDM_ModeSelect = true,
|
||||||
|
|
||||||
|
.ADC_BCLK_Invert = false,
|
||||||
|
.ADC_Delay_Mode= false,
|
||||||
|
.StereoEnable= false,
|
||||||
|
.BCLK_Select= 0b000,
|
||||||
|
};
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN(xAudioCodecSetInterface(env->codecIO, MAX9860_AUDIO_INTERFACE))
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AudioCodecInvalidateSettings(tAudioCodec *env) {
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN(
|
||||||
|
xAudioCodecSetDigitalFilters(
|
||||||
|
env->codecIO,
|
||||||
|
env->config->filters
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN(
|
||||||
|
xAudioCodecSetDigitalLevelControls(
|
||||||
|
env->codecIO,
|
||||||
|
env->config->levelControl
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN(
|
||||||
|
xAudioCodecSetMicrophoneInput(
|
||||||
|
env->codecIO,
|
||||||
|
env->config->microphoneGains
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
IF_NOT_OK_I2C_RETURN(
|
||||||
|
xAudioCodecSetAutomaticGainControlAndNoiseGate(
|
||||||
|
env->codecIO,
|
||||||
|
env->config->autoGainAndNoiseGate
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AudioCodecTestStatus(tAudioCodec *env) {
|
||||||
|
uint8_t status[3];
|
||||||
|
uint8_t read = xAudioCodecReadStatus(env->codecIO, status);
|
||||||
|
return read;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
//
|
||||||
|
// Created by xemon on 19.10.22.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef UVEOS_ON_NATION_AUDIOCODEC_H
|
||||||
|
#define UVEOS_ON_NATION_AUDIOCODEC_H
|
||||||
|
|
||||||
|
#include "I2cIO.h"
|
||||||
|
#include "max9860.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
tI2cIO *codecIO;
|
||||||
|
MAX9860_ComplexAudioConfig *config;
|
||||||
|
} tAudioCodec;
|
||||||
|
|
||||||
|
void AudioCodecInit(
|
||||||
|
tAudioCodec *env,
|
||||||
|
tI2cIO *codecIO,
|
||||||
|
MAX9860_ComplexAudioConfig *config
|
||||||
|
);
|
||||||
|
|
||||||
|
bool AudioCodecEnable(tAudioCodec *env);
|
||||||
|
|
||||||
|
bool AudioCodecInvalidateSettings(tAudioCodec *env);
|
||||||
|
|
||||||
|
bool AudioCodecTestStatus(tAudioCodec *env);
|
||||||
|
|
||||||
|
#endif //UVEOS_ON_NATION_AUDIOCODEC_H
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"dep": [
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
|
||||||
|
"repo": "AudioCodec_MAX9860"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "git",
|
||||||
|
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
|
||||||
|
"repo": "UveosOnNation_VEGA_I2cPorts"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cmake": {
|
||||||
|
"inc_dirs": [
|
||||||
|
"./"
|
||||||
|
],
|
||||||
|
"srcs": [
|
||||||
|
"./**.c"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue