299 lines
7.9 KiB
C
299 lines
7.9 KiB
C
//
|
|
// Created by ilya on 10.01.24.
|
|
//
|
|
|
|
#ifndef NAU88U10YG_H
|
|
#define NAU88U10YG_H
|
|
|
|
#include "nau88u10yg_enums.h"
|
|
#include "nau88u10yg_regs.h"
|
|
#include "stdbool.h"
|
|
#include "stdint.h"
|
|
#include "I2cIO.h"
|
|
|
|
// Desired Output 11.28960
|
|
#define PLL_K_1_MCLK_26MHz_mode1 0x3C
|
|
#define PLL_K_2_MCLK_26MHz_mode1 0x145
|
|
#define PLL_K_3_MCLK_26MHz_mode1 0x1D4
|
|
|
|
// Desired Output 12.28800
|
|
#define PLL_K_1_MCLK_26MHz_mode2 0x23
|
|
#define PLL_K_2_MCLK_26MHz_mode2 0x1EA
|
|
#define PLL_K_3_MCLK_26MHz_mode2 0x126
|
|
|
|
//todo инвертировать данные во всех структурах, аналогично power manager, проверить, нужно ли это на самом деле
|
|
|
|
typedef union {
|
|
uint16_t raw;
|
|
struct {
|
|
// uint8_t addr: 7;
|
|
uint16_t data: 9;
|
|
uint8_t addr: 7;
|
|
};
|
|
} NAU88U10YG_RegAddrPacket;
|
|
|
|
typedef union {
|
|
uint8_t raw: 8;
|
|
struct {
|
|
uint8_t data: 1;
|
|
uint8_t regAddr: 7;
|
|
};
|
|
} NAU88U10YG_StartReadingConditionPacket;
|
|
|
|
///-------------------------------------------- POWER MANAGEMENT -------------------------------------------------------
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
eNAU88U10YG_PowerManagement1_REFIMP ReferenceImpedance_Select: 2;
|
|
bool IOBuffer_Enable: 1;
|
|
bool AnalogueAmplifierBiasControl_Enable: 1;
|
|
bool MicrophoneBias_Enable: 1;
|
|
bool PLL_Enable: 1;
|
|
uint8_t : 2;
|
|
bool DCBUF_Enable: 1;
|
|
//
|
|
// bool DCBUF_Enable: 1;
|
|
// uint8_t : 2;
|
|
// bool PLL_Enable: 1;
|
|
// bool MicrophoneBias_Enable: 1;
|
|
// bool AnalogueAmplifierBiasControl_Enable: 1;
|
|
// bool IOBuffer_Enable: 1;
|
|
// eNAU88U10YG_PowerManagement1_REFIMP ReferenceImpedance_Select: 2;
|
|
};
|
|
} NAU88U10YG_PowerManagement1;
|
|
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
bool ADC_Enable: 1;
|
|
uint8_t : 1;
|
|
bool PGA_Enable: 1;
|
|
uint8_t : 1;
|
|
bool InputBoost_Enable: 1;
|
|
uint8_t : 4;
|
|
//
|
|
// uint8_t : 4;
|
|
// bool InputBoost_Enable: 1;
|
|
// uint8_t : 1;
|
|
// bool PGA_Enable: 1;
|
|
// uint8_t : 1;
|
|
// bool ADC_Enable: 1;
|
|
};
|
|
} NAU88U10YG_PowerManagement2;
|
|
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
bool DAC_Enable:1;
|
|
uint8_t : 1;
|
|
bool SpeakerMixer_Enable:1;
|
|
bool MONOMixer_Enable:1;
|
|
uint8_t : 1;
|
|
bool SPKOUT_P_Enable: 1;
|
|
bool SPKOUT_N_Enable: 1;
|
|
bool MOUT_Enable: 1;
|
|
uint8_t : 1;
|
|
//
|
|
// uint8_t : 1;
|
|
// bool MOUT_Enable: 1;
|
|
// bool SPKOUT_N_Enable: 1;
|
|
// bool SPKOUT_P_Enable: 1;
|
|
// uint8_t : 1;
|
|
// bool MONOMixer_Enable:1;
|
|
// bool SpeakerMixer_Enable:1;
|
|
// uint8_t : 1;
|
|
// bool DAC_Enable:1;
|
|
};
|
|
} NAU88U10YG_PowerManagement3;
|
|
|
|
typedef struct {
|
|
NAU88U10YG_PowerManagement1 powerManagement1;
|
|
NAU88U10YG_PowerManagement2 powerManagement2;
|
|
NAU88U10YG_PowerManagement3 powerManagement3;
|
|
}NAU88U10YG_PowerManagement_State;
|
|
|
|
|
|
///----------------------------------------------- AUDIO CONTROL -------------------------------------------------------
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
bool BCLK_Polarity:1;
|
|
bool FrameClock_Polarity:1;
|
|
eNAU88U10YG_AudioInterface_WLEN WordLength_Selection:2;
|
|
eNAU88U10YG_AudioInterface_AIFMT AudioDataFormat_Select:2;
|
|
bool DACDatePhasesOfFrameClock:1; //0-left 1-right
|
|
bool ADCDatePhasesOfFrameClock:1; //0-left 1-right
|
|
uint8_t : 1;
|
|
};
|
|
} NAU88U10YG_AudioInterface;
|
|
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint8_t : 3;
|
|
bool CompandingMode_8bit_Enable:1;
|
|
eNAU88U10YG_CompandingDACCM DACCompanding_Select:2;
|
|
eNAU88U10YG_CompandingADCCM ADCCompanding_Select:2;
|
|
bool ADDAP:1; // Setting ADDAP[0] bit to HIGH enables the loopback so that the ADC data can be fed directly into the DAC input.
|
|
};
|
|
} NAU88U10YG_AudioInterfaceCompanding;
|
|
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
eNAU88U10YG_ClockControl1_CLKM InternalClock_Sourse:1;
|
|
eNAU88U10YG_ClockControl1_MCLKSEL MasterClock_Selection:3;
|
|
eNAU88U10YG_ClockControl1_BCLKSEL BitClockSelect:3;
|
|
uint8_t : 1;
|
|
eNAU88U10YG_ClockControl1_CLKIOEN FRAMEandBCLk_Mode:1;
|
|
};
|
|
} NAU88U10YG_ClockControl;
|
|
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint8_t : 5;
|
|
eNAU88U10YG_ClockControl2_SMPLR SampleRate_Selection:3;
|
|
bool SlowClock_Enable:1;
|
|
};
|
|
} NAU88U10YG_AudioSampleRateControl;
|
|
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint8_t : 2;
|
|
bool SoftMute_Enable:1;
|
|
eNAU88U10YG_DAC_CTRL_DEEMP De_emphasis_Select:2;
|
|
eNAU88U10YG_DAC_CTRL_DACOS OverSampleRate:1;
|
|
bool AutoMute_Enable:1;
|
|
uint8_t : 1;
|
|
eNAU88U10YG_DAC_CTRL_DACPL PolarityInvert:1;
|
|
};
|
|
} NAU88U10YG_DACControl;
|
|
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint8_t : 1;
|
|
uint8_t DACGain :8;
|
|
};
|
|
} NAU88U10YG_DACGainControl;
|
|
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
bool HighPassFilter_Enable:1;
|
|
eNAU88U10YG_ADC_CTRL_HPFAM AudioOrAplication_Mode:1;
|
|
uint8_t HigtPassFilter:3;
|
|
eNAU88U10YG_ADC_CTRL_ADCOS OverSampleRate:1;
|
|
bool ADCPolarity:1;
|
|
};
|
|
} NAU88U10YG_ADCControl;
|
|
|
|
typedef union {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint8_t : 1;
|
|
uint8_t ADCGain :8;
|
|
};
|
|
} NAU88U10YG_ADCGainControl;
|
|
|
|
typedef struct {
|
|
NAU88U10YG_AudioInterface AudioInterface;
|
|
NAU88U10YG_AudioInterfaceCompanding AudioInterfaceCopanding;
|
|
NAU88U10YG_ClockControl ClockControl;
|
|
NAU88U10YG_AudioSampleRateControl AudioSampleRateControl;
|
|
NAU88U10YG_DACControl DACControl;
|
|
NAU88U10YG_DACGainControl DACGainControl;
|
|
NAU88U10YG_ADCControl ADCControl;
|
|
NAU88U10YG_ADCGainControl ADCGainControl;
|
|
}NAU88U10YG_AudioControl;
|
|
|
|
|
|
///------------------------------------------------- PLL CONTROL -----------------------------------------------------//
|
|
typedef struct {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint8_t : 4;
|
|
uint8_t PLLClock :1;
|
|
uint8_t PLLInteger :4;
|
|
};
|
|
}NAU88U10YG_PLLControl;
|
|
|
|
typedef struct {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint8_t : 3;
|
|
uint8_t PLLK :6;
|
|
};
|
|
}NAU88U10YG_PLLK1;
|
|
|
|
typedef struct {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint16_t PLLK :9;
|
|
};
|
|
}NAU88U10YG_PLLK2;
|
|
|
|
typedef struct {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint16_t PLLK :9;
|
|
};
|
|
}NAU88U10YG_PLLK3;
|
|
|
|
typedef struct {
|
|
NAU88U10YG_PLLControl PLL_Control;
|
|
NAU88U10YG_PLLK1 PLLK1;
|
|
NAU88U10YG_PLLK2 PLLK2;
|
|
NAU88U10YG_PLLK3 PLLK3;
|
|
}NAU88U10YG_PLL;
|
|
|
|
////-------------------------------------INPUT, OUTPUT & MIXER CONTROL--------------------------------------------------
|
|
|
|
typedef struct {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint8_t : 1;
|
|
bool MOUTAttenuation :1;
|
|
bool SPKAttenuation :1;
|
|
uint8_t : 6;
|
|
};
|
|
}NAU88U10YG_AttenuationControl;
|
|
|
|
typedef struct {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
eNAU88U10YG_OUTPUT_CTRL_AOUTIMP AnalogOutputResistance :1;
|
|
bool ThermalShutdown_Enable :1;
|
|
eNAU88U10YG_OUTPUT_CTRL_SPKBST SpeakerOutputBoostStage :1;
|
|
eNAU88U10YG_OUTPUT_CTRL_MOUTBST MONOOutputBoostStage :1;
|
|
uint8_t : 5;
|
|
//
|
|
// uint8_t : 3;
|
|
// uint8_t MONOOutputBoostStage :1;
|
|
// uint8_t SpeakerOutputBoostStage :1;
|
|
// bool ThermalShutdown_Enable :1;
|
|
// uint8_t AnalogOutputResistance :1;
|
|
};
|
|
}NAU88U10YG_OutputCtrl;
|
|
|
|
typedef struct {
|
|
uint16_t raw: 9;
|
|
struct {
|
|
uint8_t SPKGain : 6;
|
|
bool SPKMuteEnable :1;
|
|
bool SPKZC :1;
|
|
uint8_t : 1;
|
|
};
|
|
}NAU88U10YG_SpeakerGainControll;
|
|
|
|
////--------------------------------------------------------------------------------------------------------------------
|
|
|
|
bool xAudioCodecReadRegister(tI2cIO *i2c, uint16_t AdrRegQwery, uint16_t *DataRegResult);
|
|
|
|
bool xAudioCodecWrite_Register8b_Data8b(tI2cIO *i2c, uint8_t reg, uint8_t data);
|
|
|
|
|
|
#endif //NAU88U10YG_H
|