Initial commit: TXW82x FPV v2.7.0.7-42229 SDK + project sources
This commit is contained in:
325
sdk/include/hal/i2s.h
Normal file
325
sdk/include/hal/i2s.h
Normal file
@@ -0,0 +1,325 @@
|
||||
#ifndef _HAL_I2S_H_
|
||||
#define _HAL_I2S_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief i2s bit width per sample type
|
||||
*/
|
||||
enum i2s_sample_bits {
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s bit width per sample: 8bits
|
||||
*/
|
||||
I2S_SAMPLE_BITS_8BITS,
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s bit width per sample: 16bits
|
||||
*/
|
||||
I2S_SAMPLE_BITS_16BITS,
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s bit width per sample: 24bits
|
||||
*/
|
||||
I2S_SAMPLE_BITS_24BITS,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief i2s sample frequency type
|
||||
*/
|
||||
enum i2s_sample_freq {
|
||||
|
||||
I2S_SAMPLE_FREQ_8K,
|
||||
|
||||
|
||||
I2S_SAMPLE_FREQ_16K,
|
||||
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s sample frequency: 44.1K(WS frequency)
|
||||
*/
|
||||
I2S_SAMPLE_FREQ_44_1K,
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s sample frequency: 48K(WS frequency)
|
||||
*/
|
||||
I2S_SAMPLE_FREQ_48K,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @brief i2s channel type
|
||||
*/
|
||||
enum i2s_channel {
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s mono channel
|
||||
*/
|
||||
I2S_CHANNEL_MONO,
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s stereo channel
|
||||
*/
|
||||
I2S_CHANNEL_STEREO,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief i2s data format type
|
||||
*/
|
||||
enum i2s_data_fmt {
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* I2S communication format I2S
|
||||
*/
|
||||
I2S_DATA_FMT_I2S,
|
||||
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* I2S communication format MSB(right justified)
|
||||
*/
|
||||
I2S_DATA_FMT_MSB,
|
||||
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* I2S communication format LSB(left justified)
|
||||
*/
|
||||
I2S_DATA_FMT_LSB,
|
||||
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* I2S communication format PCM
|
||||
*/
|
||||
I2S_DATA_FMT_PCM,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief i2s mode type
|
||||
*/
|
||||
enum i2s_mode {
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* I2S master mode setting
|
||||
*/
|
||||
I2S_MODE_MASTER,
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* I2S slave mode setting
|
||||
*/
|
||||
I2S_MODE_SLAVE,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief spi ioctl cmd
|
||||
*
|
||||
*/
|
||||
enum i2s_ioctl_cmd {
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* Set the polarity of WSCLK
|
||||
*@The specific Settings:
|
||||
* (1)left channel WSCLK level is low , right channel WSCLK level is high
|
||||
* (2)left channel WSCLK level is high, right channel WSCLK level is low
|
||||
*/
|
||||
I2S_IOCTL_CMD_SET_WSCLK_POL,
|
||||
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s bit width per sample
|
||||
*@The specific Settings:
|
||||
* (1)I2S_SAMPLE_BITS_8BITS
|
||||
* (2)I2S_SAMPLE_BITS_16BITS
|
||||
* (3)I2S_SAMPLE_BITS_24BITS
|
||||
*/
|
||||
I2S_IOCTL_CMD_SET_SAMPLE_BITS,
|
||||
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s bit width per sample
|
||||
*@The specific Settings:
|
||||
* (1)I2S_CHANNEL_MONO
|
||||
* (2)I2S_CHANNEL_STEREO
|
||||
*/
|
||||
I2S_IOCTL_CMD_SET_CHANNEL,
|
||||
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s communication format
|
||||
*@The specific Settings:
|
||||
* (1)I2S_DATA_FMT_I2S
|
||||
* (2)I2S_DATA_FMT_MSB
|
||||
* (3)I2S_DATA_FMT_LSB
|
||||
*/
|
||||
I2S_IOCTL_CMD_SET_DATA_FMT,
|
||||
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s open WSCLK & BCLK & DATA debounce
|
||||
* (Only for i2s slave)
|
||||
*/
|
||||
I2S_IOCTL_CMD_SET_DEBOUNCE,
|
||||
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* i2s open duplex using iis0 & iis1
|
||||
*/
|
||||
I2S_IOCTL_CMD_SET_DUPLEX,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief spi request interrupt flag
|
||||
*
|
||||
*/
|
||||
enum i2s_irq_flag {
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* I2S interrupt signal that transmits half of the data
|
||||
*/
|
||||
I2S_IRQ_FLAG_HALF = BIT(0),
|
||||
/*! Compatible version: V0
|
||||
*@Describe:
|
||||
* I2S interrupt signal that transmits all data
|
||||
*/
|
||||
I2S_IRQ_FLAG_FULL = BIT(1),
|
||||
|
||||
I2S_IRQ_FLAG_RESET = BIT(2),
|
||||
};
|
||||
|
||||
|
||||
/* User interrupt handle */
|
||||
typedef void (*i2s_irq_hdl)(uint32 irq, uint32 irq_data);
|
||||
|
||||
/* I2S api for user */
|
||||
struct i2s_device {
|
||||
struct dev_obj dev;
|
||||
};
|
||||
|
||||
struct i2s_hal_ops{
|
||||
struct devobj_ops ops;
|
||||
int32(*open)(struct i2s_device *i2s, enum i2s_mode mode, enum i2s_sample_freq frequency, enum i2s_sample_bits bits);
|
||||
int32(*close)(struct i2s_device *i2s);
|
||||
int32(*ioctl)(struct i2s_device *i2s, uint32 cmd, uint32 param);
|
||||
int32(*read)(struct i2s_device *i2s, void *buf, uint32 len);
|
||||
int32(*write)(struct i2s_device *i2s, const void *buf, uint32 len);
|
||||
int32(*write_scatter)(struct i2s_device *i2s, const scatter_data *data, uint32 count);
|
||||
int32(*request_irq)(struct i2s_device *i2s, uint32 irq_flag, i2s_irq_hdl irqhdl, uint32 irq_data);
|
||||
int32(*release_irq)(struct i2s_device *i2s, uint32 irq_flag);
|
||||
};
|
||||
|
||||
|
||||
/* I2S API functions */
|
||||
|
||||
/**
|
||||
* @brief i2s_open.
|
||||
*
|
||||
* @Compatible version: V0
|
||||
*
|
||||
* @note This function must be called before any I2S driver operations.
|
||||
*
|
||||
* @param i2s The address of I2S device in the RTOS.
|
||||
* @param mode I2S work mode setting - see "enum i2s_mode".
|
||||
* @param frequency I2S sample frequency setting - see "enum i2s_sample_freq".
|
||||
* @param bits I2S sample bits setting - see "enum i2s_sample_bits".
|
||||
*
|
||||
* @return
|
||||
* - RET_OK Success
|
||||
* - RET_ERR Fail
|
||||
*/
|
||||
int32 i2s_open(struct i2s_device *i2s, enum i2s_mode mode, enum i2s_sample_freq frequency, enum i2s_sample_bits bits);
|
||||
|
||||
/**
|
||||
* @brief i2s_close.
|
||||
*
|
||||
* @Compatible version: V0
|
||||
*
|
||||
* @param i2s The address of I2S device in the RTOS.
|
||||
*
|
||||
* @return
|
||||
* - RET_OK Success
|
||||
* - RET_ERR Fail
|
||||
*/
|
||||
int32 i2s_close(struct i2s_device *i2s);
|
||||
|
||||
/**
|
||||
* @brief i2s_write.
|
||||
*
|
||||
* @Compatible version: V0
|
||||
*
|
||||
* @param i2s The address of I2S device in the RTOS.
|
||||
* @param buf Write the start address of buf.
|
||||
* @param len Write length, uint: byte.
|
||||
*
|
||||
* @return
|
||||
* - RET_OK Success
|
||||
* - RET_ERR Fail
|
||||
*/
|
||||
int32 i2s_write(struct i2s_device *i2s, const void *buf, uint32 len);
|
||||
|
||||
int32 i2s_write_scatter(struct i2s_device *i2s, const scatter_data *data, uint32 count);
|
||||
|
||||
/**
|
||||
* @brief i2s_read.
|
||||
*
|
||||
* @Compatible version: V0
|
||||
*
|
||||
* @param i2s The address of I2S device in the RTOS.
|
||||
* @param buf Read the start address of buf.
|
||||
* @param len Read length, uint: byte.
|
||||
*
|
||||
* @return
|
||||
* - RET_OK Success
|
||||
* - RET_ERR Fail
|
||||
*/
|
||||
int32 i2s_read(struct i2s_device *i2s, void *buf, uint32 len);
|
||||
|
||||
/**
|
||||
* @brief i2s_ioctl.
|
||||
*
|
||||
* @Compatible version: V0
|
||||
*
|
||||
* @param i2s The address of I2S device in the RTOS.
|
||||
* @param cmd Control command - see"enum i2s_ioctl_cmd".
|
||||
* @param param Parameters required to execute the current Control command.
|
||||
*
|
||||
* @return
|
||||
* - RET_OK Success
|
||||
* - RET_ERR Fail
|
||||
*/
|
||||
int32 i2s_ioctl(struct i2s_device *i2s, uint32 cmd, uint32 param);
|
||||
|
||||
/**
|
||||
* @brief i2s_request_irq.
|
||||
*
|
||||
* @Compatible version: V0
|
||||
*
|
||||
* @param i2s The address of I2S device in the RTOS.
|
||||
* @param irq_flag The type of interrupt - see"enum i2s_irq_flag".
|
||||
* @param irqhdl The interrupt function.
|
||||
* @param irq_data The parameters of the interrupt function
|
||||
*
|
||||
* @return
|
||||
* - RET_OK Success
|
||||
* - RET_ERR Fail
|
||||
*/
|
||||
int32 i2s_request_irq(struct i2s_device *i2s, uint32 irq_flag, i2s_irq_hdl irqhdl, uint32 irq_data);
|
||||
|
||||
/**
|
||||
* @brief i2s_release_irq.
|
||||
*
|
||||
* @Compatible version: V0
|
||||
*
|
||||
* @param i2s The address of I2S device in the RTOS.
|
||||
* @param irq_flag The type of interrupt - see"enum i2s_irq_flag".
|
||||
*
|
||||
* @return
|
||||
* - RET_OK Success
|
||||
* - RET_ERR Fail
|
||||
*/
|
||||
int32 i2s_release_irq(struct i2s_device *i2s, uint32 irq_flag);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user