gd_i2s.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /*!
  2. *******************************************************************************
  3. **
  4. ** \file gd_i2s.h
  5. **
  6. ** \brief I2S.
  7. **
  8. ** Copyright: 2012 - 2013 (C) GoKe Microelectronics ShangHai Branch
  9. **
  10. ** \attention THIS SAMPLE CODE IS PROVIDED AS IS. GOKE MICROELECTRONICS
  11. ** ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR
  12. ** OMMISSIONS.
  13. **
  14. ** \note Do not modify this file as it is generated automatically.
  15. **
  16. ******************************************************************************/
  17. #ifndef _GD_I2S_H_
  18. #define _GD_I2S_H_
  19. #include <gtypes.h>
  20. #include "gmodids.h"
  21. #include "gd_int.h"
  22. #include "gd_uart.h"
  23. typedef GD_INT_DATA_S* (*GD_I2S_ISR_T)(U8 channelIndex);
  24. /*!
  25. *******************************************************************************
  26. **
  27. ** \brief I2S driver error codes.
  28. **
  29. *******************************************************************************
  30. */
  31. enum
  32. {
  33. GD_ERR_I2S_TYPE_NOT_SUPPORTED = 0, //!< Device not supported.
  34. GD_ERR_I2S_INT_ERR,
  35. GD_ERR_I2S_NOT_OPEN,
  36. GD_ERR_I2S_BUSY,
  37. GD_ERR_I2S_WAIT,
  38. };
  39. /*!
  40. *******************************************************************************
  41. **
  42. ** \brief i2s channel.
  43. **
  44. *******************************************************************************
  45. */
  46. typedef enum
  47. {
  48. GD_I2S_CHANNEL_2 = 0, //!< I2S 2 channel.
  49. GD_I2S_CHANNEL_4 = 1, //!< I2S 4 channel.
  50. GD_I2S_CHANNEL_6 = 2, //!< I2S 6 channel.
  51. }GD_I2S_CHANNEL_E;
  52. /*!
  53. *******************************************************************************
  54. **
  55. ** \brief I2S operition modes.
  56. **
  57. ** \sa GD_I2S_MODE_S
  58. **
  59. ******************************************************************************/
  60. typedef enum
  61. {
  62. GD_I2S_LEFT_MODE = 0, //!< Left justify mode.
  63. GD_I2S_RIGHT_MODE = 1, //!< Right justify mode.
  64. GD_I2S_MSB_MODE = 2, //!< MSB extend mode.
  65. GD_I2S_I2S_MODE = 4, //!< I2S mode.
  66. GD_I2S_DSP_MODE = 6, //!< DSP mode.
  67. }GD_I2S_MODE_E;
  68. /*!
  69. *******************************************************************************
  70. **
  71. ** \brief I2S datarate speed modes.
  72. **
  73. ** \sa GD_I2S_SPEED_E
  74. **
  75. ******************************************************************************/
  76. typedef enum
  77. {
  78. GD_I2S_24000BPS = 24000,
  79. GD_I2S_32000BPS = 32000, //!< 32kHz datarate.
  80. GD_I2S_44100BPS = 44100,
  81. GD_I2S_48000BPS = 48000, //!< 48kHz datarate.
  82. GD_I2S_96000BPS = 96000,
  83. }GD_I2S_SPEED_E;
  84. /*!
  85. *******************************************************************************
  86. **
  87. ** \brief I2S datarate wlen modes.
  88. **
  89. ** \sa GD_I2S_WLEN_E
  90. **
  91. ******************************************************************************/
  92. typedef enum
  93. {
  94. GD_I2S_16BIT = 16, //!< 32kHz datarate.
  95. GD_I2S_24BIT = 24, //!< 48kHz datarate.
  96. }GD_I2S_WLEN_E;
  97. /*!
  98. *******************************************************************************
  99. **
  100. ** \brief I2S operition modes.
  101. **
  102. ** \sa GD_I2S_OPEN_MODE_E
  103. **
  104. ******************************************************************************/
  105. typedef enum
  106. {
  107. GD_I2S_GENERIC_MASTER_MODE, //!< Generic master mode.
  108. GD_I2S_GENERIC_SLAVER_MODE, //!< Generic slave mode.
  109. GD_I2S_AUTO_MASTER_MODE, //!< Auto master mode.
  110. GD_I2S_AUTO_SLAVER_MODE, //!< Auto slave mode.
  111. GD_I2S_DMA_MASTER_MODE, //!< DMA master mode.
  112. GD_I2S_DMA_SLAVER_MODE, //!< DMA slave mode.
  113. }GD_I2S_OPEN_MODE_E;
  114. enum
  115. {
  116. I2S_EVENT_FRAME = 1, /* received one audio frame or send finished one audio frame */
  117. I2S_EVENT_WILL_OVERFLOW = 2,
  118. I2S_EVENT_WILL_UNDERFLOW = 3,
  119. I2S_EVENT_ALREADY_OVERFLOW = 4,
  120. I2S_EVENT_ALREADY_UNDERFLOW = 5,
  121. I2S_EVENT_UNDEFINED = 6,
  122. };
  123. typedef void (*GD_I2S_Notifier)(U32 event);
  124. /*!
  125. *******************************************************************************
  126. **
  127. ** I2S INIT parameter.
  128. **
  129. ******************************************************************************/
  130. typedef struct
  131. {
  132. GBOOL master;
  133. GD_I2S_CHANNEL_E channel;
  134. GD_I2S_MODE_E mode;
  135. GD_I2S_SPEED_E speed;
  136. GD_I2S_WLEN_E wlen;
  137. } GD_I2S_INIT_PARAM_S;
  138. typedef struct
  139. {
  140. U32 frameSize;
  141. GD_I2S_Notifier notifier;
  142. } GD_I2S_OPEN_PARAM_S;
  143. #ifdef __cplusplus
  144. extern "C" {
  145. #endif
  146. GERR GD_I2S_RX_Open(GD_I2S_OPEN_PARAM_S *openParams);
  147. GERR GD_I2S_RX_Enable(void);
  148. GERR GD_I2S_RX_Disable(void);
  149. GERR GD_I2S_RX_Read_Frame(U8 *data, U32 *length);
  150. GERR GD_I2S_RX_Close(void);
  151. GERR GD_I2S_TX_Open(GD_I2S_OPEN_PARAM_S *openParams);
  152. GERR GD_I2S_TX_Enable(void);
  153. GERR GD_I2S_TX_Disable(void);
  154. GERR GD_I2S_TX_Mute(void);
  155. GERR GD_I2S_TX_Unmute(void);
  156. GERR GD_I2S_TX_Write_Frame(U8 *data, U32 length);
  157. GERR GD_I2S_TX_Close(void);
  158. GERR GD_I2S_SetClock(GD_I2S_SPEED_E speed);
  159. GERR GD_I2S_SetWlen(GD_I2S_WLEN_E wlen);
  160. GERR GD_I2S_SetMode(GD_I2S_MODE_E mode);
  161. GERR GD_I2S_SetChannel(GD_I2S_CHANNEL_E channel);
  162. GERR GD_I2S_Init(GD_I2S_INIT_PARAM_S *initParams);
  163. GERR GD_I2S_Bind_Rx2Tx(void);
  164. GERR GD_I2S_Unbind_Rx2Tx(void);
  165. GERR GD_I2S_Exit(void);
  166. #ifdef __cplusplus
  167. }
  168. #endif
  169. #endif /* _GD_I2C_H_ */
  170. /*----------------------------------------------------------------------------*/
  171. /* end of file */
  172. /*----------------------------------------------------------------------------*/