drv_i2s.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #ifndef __I2S_HAL_
  2. #define __I2S_HAL_
  3. typedef enum
  4. {
  5. SLAVE_MODE = 0, //I2S working at slave mode DEFAULT
  6. MASTER_MODE = 1 //I2S working at master mode
  7. } I2S_OPERATE_MODE_E;
  8. typedef enum
  9. {
  10. WORD_LENGTH_16 = 0,
  11. WORD_LENGTH_20,
  12. WORD_LENGTH_24,
  13. WORD_LENGTH_32,
  14. } I2S_WORD_LENGTH_E;
  15. typedef enum
  16. {
  17. BITE_DELAY_0_CYCLE = 0,
  18. BITE_DELAY_1_CYCLE,
  19. BITE_DELAY_2_CYCLE,
  20. BITE_DELAY_3_CYCLE,
  21. } I2S_BITE_DELAY_E;
  22. typedef enum
  23. {
  24. RATIO_24 = 0,
  25. RATIO_32,
  26. RATIO_48,
  27. RATIO_96,
  28. RATIO_128
  29. } I2S_BCLK_LRCK_RATIO_E;
  30. typedef enum
  31. {
  32. I2S_COMPATIBLE = 0,
  33. LEFT_JUSTIFILED = 1,
  34. RIGHT_JUSTIFILED = 2,
  35. } I2S_DATA_AUDIO_FMT_E;
  36. typedef enum
  37. {
  38. TX_INT_LEVEL_1_4 = 0,
  39. TX_INT_LEVEL_2_4, //tx_ fifo_half_int
  40. TX_INT_LEVEL_3_4,
  41. TX_INT_LEVEL_4_4, //tx_fifo_amost_empty_int
  42. } I2S_TX_INT_FIFO_LEVEL_E;
  43. typedef enum
  44. {
  45. RX_INT_LEVEL_1_4 = 0,
  46. RX_INT_LEVEL_2_4, //tx_ fifo_half_int
  47. RX_INT_LEVEL_3_4,
  48. RX_INT_LEVEL_4_4, //tx_fifo_amost_empty_int
  49. } I2S_RX_INT_FIFO_LEVEL_E;
  50. typedef enum
  51. {
  52. I2S_FREQ_8000HZ = 8000,
  53. I2S_FREQ_9600HZ = 9600,
  54. I2S_FREQ_11025HZ = 11025,
  55. I2S_FREQ_12000HZ = 12000,
  56. I2S_FREQ_16000HZ = 16000,
  57. I2S_FREQ_22050HZ = 22050,
  58. I2S_FREQ_24000HZ = 24000,
  59. I2S_FREQ_32000HZ = 32000,
  60. I2S_FREQ_44100HZ = 44100,
  61. I2S_FREQ_48000HZ = 48000,
  62. } I2S_FREQ_T;
  63. typedef struct
  64. {
  65. bool tx_enable; //[0]
  66. bool rx_enable; // [1]
  67. bool dma_mode; // [2]
  68. I2S_OPERATE_MODE_E ctrl_mode; // [3]
  69. bool bclk_pol; // [4]
  70. bool lrck_pol; // [5]
  71. I2S_DATA_AUDIO_FMT_E audio_mode; // [7:6]
  72. I2S_WORD_LENGTH_E word_length; // [9:8]
  73. I2S_BITE_DELAY_E bit_delay; // [11:10]
  74. I2S_BCLK_LRCK_RATIO_E bclk_lrck_ratio; // [14:12]
  75. bool tx_swap; // [15]
  76. bool rx_swap; // [16]
  77. I2S_TX_INT_FIFO_LEVEL_E tx_int_sel; // [18:17]
  78. I2S_RX_INT_FIFO_LEVEL_E rx_int_sel; // [20:19] reserved[31:21]
  79. } REG_I2S_CTRL_T;
  80. typedef struct
  81. {
  82. // int (*reg_default_check)();
  83. // int (*reg_rw_check)();
  84. void (*set_tx_enable)(bool en);
  85. void (*set_rx_enable)(bool en);
  86. void (*set_dma_mode)(bool en);
  87. void (*set_ctrl_mode)(bool en);
  88. void (*set_bclk_pol)(bool en);
  89. void (*set_lrck_pol)(bool en);
  90. void (*set_audio_mode)(uint8_t value);
  91. void (*set_word_length)(uint8_t value);
  92. void (*set_bit_delay)(uint8_t value);
  93. void (*set_bclk_lrck_ratio)(uint8_t value);
  94. void (*set_tx_swap)(bool en);
  95. void (*set_rx_swap)(bool en);
  96. void (*set_tx_int_sel)(uint8_t value);
  97. void (*set_rx_int_sel)(uint8_t value);
  98. void (*set_tx_fifo_clr)(bool en);
  99. void (*set_rx_fifo_clr)(bool en);
  100. uint32_t (*read_txrx_data)(void);
  101. void (*write_txrx_data)(uint32_t value);
  102. uint32_t (*get_tx_fifo_level)(void);
  103. uint32_t (*get_rx_fifo_level)(void);
  104. void (*set_int_en)(uint32_t mask);
  105. void (*disable_int_en)(uint32_t mask);
  106. uint32_t (*get_status)(void);
  107. uint32_t (*get_int_status)(void);
  108. uint32_t (*get_int_cause)(void);
  109. void (*set_int_clr)(uint32_t mask);
  110. } i2s_ops_t;
  111. bool drvWaitI2sIfcDone(void);
  112. void drvI2sEnableClk(void);
  113. void drvI2sDisableClk(void);
  114. void drvI2sSetRst(void);
  115. void drvI2sClrRst(void);
  116. void drvI2sSetSrcClk(uint32_t mclk_div_denom, uint32_t div_denom);
  117. void drvI2sMclkClose(void);
  118. void drvI2sGpioInitCfg(void);
  119. void drvI2sIfcInit(bool rx);
  120. void drvI2sIfcStartTransfer(uint32_t size, uint32_t *data);
  121. void drvI2sIfcStopTransfer(uint32_t size, uint8_t *data);
  122. void drvI2sStopTransfer(uint32_t size, uint8_t *data);
  123. void drvI2sIfcDeinit(void);
  124. i2s_ops_t *drvI2sGetI2sOps(void);
  125. void drvI2sSetCfg(REG_I2S_CTRL_T *serialI2sCfg);
  126. void drvI2sclearCfg(void);
  127. uint16_t prvI2sGetBclkDiv(uint32_t sampleRate);
  128. void drvI2sFifoStartTransfer(uint32_t size, uint32_t *data);
  129. #endif