91 lines
2.8 KiB
C
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_ */
|