91 lines
2.8 KiB
C

/*
* tlv320.h
*
* Created on: 2021. okt. 24.
* Author: epagris
*/
#ifndef TLV320_TLV320_H_
#define TLV320_TLV320_H_
#include "stm32h7xx_hal.h"
#define TLV320_I2C_ADDR0 (26 << 1)
#define TLV320_I2C_ADDR1 (27 << 1)
typedef struct {
/* LEFT LINE INPUT */
uint8_t LIV; // Left Line Input Channel volume (0-31, 23 = 0dB)
bool LRS; // Left/Right line simultaneous volume/mute update
bool LIM; // Left input line mute
/* RIGHT LINE INPUT */
uint8_t RIV; // Right Line Input Channel volume (0-31, 23 = 0dB)
bool RLS; // Right/Left line simultaneous volume/mute update
bool RIM; // Right input line mute
/* LEFT HEADPHONE OUTPUT */
uint8_t LHV; // Left Line Input Channel volume (48-127, 121 = 0dB)
bool LRS_HP; // Left/Right line simultaneous volume/mute update
bool LZC; // Left-channel zero-cross detect
/* RIGHT HEADPHONE OUTPUT */
uint8_t RHV; // Right Line Input Channel volume (48-127, 121 = 0dB)
bool RLS_HP; // Right/Left line simultaneous volume/mute update
bool RZC; // Right-channel zero-cross detect
/* ANALOG AUDIO PATH CONTROL */
uint8_t STA_STE; // Added sidetone (See manual.)
bool DAC_SEL; // DAC select
bool BYP; // Bypass on/off (line in -> headphone)
bool INSEL; // Input select for ADC (0: line, 1: microphone)
bool MICM; // Microphone mute (0: normal, 1: muted)
bool MICB; // Microphone boost (0: 0 dB, 1: 20 dB)
/* DIGITAL AUDIO PATH CONTROL */
bool DACM; // DAC soft mute
uint8_t DEEMP; // De-emphasis control (See manual.)
bool ADCHP; // ADC high-pass filter on/off
/* POWER DOWN CONTROL (0: On, 1: Off) */
bool PD_OFF; // Device power
bool PD_CLK; // Clock
bool PD_OSC; // Oscillator
bool PD_OUT; // Outputs
bool PD_DAC; // DAC
bool PD_ADC; // ADC
bool PD_MIC; // Microphone input
bool PD_LINE; // Line input
/* DIGITAL AUDIO INTERFACE FORMAT */
bool MS; // Master/Slave mode (0: slave, 1: master)
bool LRSWAP; // DAC left/right swap on/off
bool LRP; // DAC left/right phase (See manual.)
uint8_t IWL; // Input bit length (00: 16 bit, 01: 20 bit, 10: 24 bit, 11: 32 bit)
uint8_t FOR; // Data format (See manual.)
/* SAMPLE RATE CONTROL */
bool CLKIN; // Clock input divider (0: MCLK, 1: MCLK/2)
bool CLKOUT; // Clock input divider (0: MCLK, 1: MCLK/2)
uint8_t SR; // Sampling rate control (See manual.)
bool BOSR; // Base oversamping rate (See manual.)
bool USB_Normal; // Clock mode select (0: Normal, 1: USB)
} TLV320_Options;
typedef struct {
uint8_t i2c_addr; // az eszköz I2C-címe
TLV320_Options options;
} TLV320_State;
void TLV320_init(I2C_HandleTypeDef *phI2C, uint8_t i2c_addr);
void TLV320_updateOptions(TLV320_Options *pOpt);
void TLV320_reset();
void TLV320_getOptions(TLV320_Options *pOpt);
void TLV320_setOptions(const TLV320_Options *pOpt);
void TLV320_activate();
void TLV320_fullUpdate(TLV320_Options *pOpt);
void TLV320_setLineInGain(double dB);
#endif /* TLV320_TLV320_H_ */