ac97.h
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:10k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. //
  2. // Copyright (c) Microsoft Corporation.  All rights reserved.
  3. //
  4. //
  5. // Use of this source code is subject to the terms of the Microsoft end-user
  6. // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  7. // If you did not accept the terms of the EULA, you are not authorized to use
  8. // this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  9. // install media.
  10. //
  11. // -----------------------------------------------------------------------------
  12. //
  13. //      THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  14. //      ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  15. //      THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  16. //      PARTICULAR PURPOSE.
  17. //  
  18. // -----------------------------------------------------------------------------
  19. //
  20. // ac97.h 
  21. // 
  22. // definitions for the AC97 Controller and AC97 codec - Sigmatel's STAC9766
  23. //
  24. #ifndef _AC97_H_
  25. #define _AC97_H_
  26. // For audio controller
  27. // 
  28. #define AC97_INTERNAL_CLOCK_ENABLE (1<<20) // Enable CPU clock to AC97 controller
  29. #define AC97_PCMDATA_FIFO_LENGTH (16)
  30. // AC97 Global Control register
  31. //
  32. #define  AC97_CODEC_READY_ENABLE (1<<22)
  33. #define  AC97_PCM_OUT_UNDERRUN_ENABLE (1<<21)
  34. #define  AC97_PCM_IN_OVERRUN_ENABLE (1<<20)
  35. #define  AC97_MIC_IN_OVERRUN_ENABLE (1<<19)
  36. #define  AC97_PCM_IN_THRESHOLD_ENABLE (1<<18)
  37. #define  AC97_PCM_OUT_THRESHOLD_ENABLE (1<<17)
  38. #define  AC97_MIC_IN_THRESHOLD_ENABLE (1<<16)
  39. #define  AC97_PCM_OUT_DMA_MODE (2<<12)
  40. #define  AC97_PCM_OUT_PIO_MODE (1<<12)
  41. #define  AC97_PCM_IN_DMA_MODE (2<<10)
  42. #define  AC97_PCM_IN_PIO_MODE (1<<10)
  43. #define  AC97_MIC_IN_DMA_MODE (1<<9)
  44. #define  AC97_MIC_IN_PIO_MODE (1<<8)
  45. #define  AC97_ACLINK_ENABLE (1<<3)
  46. #define  AC97_ACLINK_ON (1<<2)
  47. #define  AC97_WARM_RESET (1<<1)
  48. #define  AC97_COLD_RESET (1<<0)
  49. // AC97 Codec Command and Status Register
  50. //
  51. #define AC97_READ_COMMAND (1<<23)
  52. #define AC97_CMD_ADDR_SHIFT (16)
  53. #define AC97_CMD_DATA_SHIFT (0)
  54. #define AC97_STAT_DATA_READ_MASK (0xFFFF << 0)
  55. #define AC97_STAT_ADDR_READ_MASK (0x7F << 16)
  56. // Defines for audio controller end here
  57. // Defines for the STAC9766 registers
  58. //
  59. #define  AC97_RESET 0x0000       // Reset - default:6990h
  60. #define  AC97_MASTER_VOL_STEREO 0x0002       // LINE_OUT Master Volume - 8000h
  61. #define  AC97_HEADPHONE_VOL 0x0004       // HP_OUT Master Volume - 8000h
  62. #define  AC97_MASTER_VOL_MONO 0x0006       // Mono Volume - 8000h
  63. // Register 8 not supported 
  64. #define AC97_PCBEEP_VOL 0x000a       // PC BEEP - 0000h
  65. #define  AC97_PHONE_VOL 0x000c       // Phone Volume - 8008h
  66. #define  AC97_MIC_VOL 0x000e       // MIC Input (mono) - 8008h
  67. #define  AC97_LINEIN_VOL 0x0010       // Line Input (stereo) - 8808h
  68. #define  AC97_CD_VOL 0x0012       // CD Input (stereo) - 8808h
  69. #define  AC97_VIDEO_VOL 0x0014       // Video Input - 8808h
  70. #define  AC97_AUX_VOL 0x0016       // Aux Input (stereo) - 8808h
  71. #define  AC97_PCMOUT_VOL 0x0018       // PCM Out Output (stereo) - 8808h
  72. #define  AC97_RECORD_SELECT 0x001a       // Record Select - 0000h
  73. #define  AC97_RECORD_GAIN 0x001c // Record Gain - 8000h
  74. // 1e unsupported
  75. #define  AC97_GENERAL_PURPOSE 0x0020 // General Purpose - 0000h
  76. #define  AC97_3D_CONTROL 0x0022 // 3D Control - 0000h
  77. #define  AC97_INTR_PAGE 0x0024 // Audio Interrupt and Paging
  78. #define  AC97_POWER_CONTROL 0x0026 // Powerdown Control/Stat - 000Fh
  79. // registers 0x0028 - 0x0058 are reserved
  80. //
  81. #define AC97_EXT_AUDIO_ID 0x0028 // Extended Audio ID - 0205h
  82. #define  AC97_EXT_AUDIO_CONTROL 0x002A // Extended Audio Control - 0400h
  83. #define  AC97_PCM_DAC_RATE 0x002C // PCM DAC Rate - BB80h
  84. // 30 unsupported
  85. #define  AC97_PCM_ADC_RATE 0x0032 // PCM ADC RATE - BB80h
  86. // 34, 36, 38 unsupported
  87. #define  AC97_SPDIF_CONTROL 0x003A // SPDIF Control - 2A00h
  88. // registers 0x005a - 0x007a are vendor reserved
  89. //
  90. #define   AC97_DIG_AUDIO_CONTROL 0x006A // Digital Audio Control - 0000h
  91. #define   AC97_REV_CODE 0x006C // Revision Code - 0000h
  92. #define   AC97_ANALOG_SPEC 0x006E // Analog Special - 0000h
  93. #define   AC97_72H_ENABLE 0x0070 // 72h Enable - 0000h
  94. #define   AC97_ANALOG_CURR_ADJUST 0x0072 // Analog Current Adjust - 0000h
  95. #define   AC97_GPIO_CURR_ACCESS 0x0074 // GPIO Current Access - 0000h
  96. #define   AC97_78H_ENABLE 0x0076 // 78h Enable - 0000h
  97. #define   AC97_HPF_BYPASS 0x0078 // High Pass Filter Bypass
  98. #define   AC97_VENDOR_ID1 0x007C // Vendor ID1 - 8384h
  99. #define   AC97_VENDOR_ID2 0x007E // Vendor ID2 - 7666h
  100. // AC97 codec vendor - Sigmatel
  101. //
  102. #define  AC97_VENDOR_SIGMATEL 0x83847666 // SigmaTel
  103. // volume control bit defines 
  104. #define  AC97_MUTE 0x8000 // Mute - Line Out, HP, MONO
  105. #define  AC97_MAX_ATT_LEFT 0x1f00 // Left Channel - Line Out, HP, Line In, CD, Video, AUX, PCM Out
  106. #define  AC97_MAX_ATT_RIGHT 0x001f // Right Channel - Line Out, HP, MONO, Phone, MIC, Line In, CD, Video, AUX, PCM Out
  107. #define AC97_VOL_LEFT 0x2020 // Optional bits D13, D5 set (Line, HP)- Attenuation = 46.5 dB 
  108. #define  AC97_VOL_RIGHT 0x2020 // Optional bits D13, D5 set (Line HP, Mono)- Attenuation = 46.5 dB
  109. #define  AC97_VOL_PCBEEP 0x001E // Max Attenuation - PC BEEP - Pin grounded
  110. #define  AC97_MICBOOST           0x0040 // Boost Enable - Also check 6E register- TBD
  111. // Record Select defines - 1Ah
  112. //
  113. #define  AC97_RECMUX_MIC         0x0000 // MIC Select
  114. #define  AC97_RECMUX_CD          0x0101 // CD In -  Pins grounded
  115. #define  AC97_RECMUX_VIDEO       0x0202      // Video in - Pins grounded
  116. #define  AC97_RECMUX_AUX         0x0303 // AUX In - PinS grounded
  117. #define  AC97_RECMUX_LINE        0x0404 // Line In
  118. #define  AC97_RECMUX_STEREO_MIX  0x0505 // Stereo Mix
  119. #define  AC97_RECMUX_MONO_MIX    0x0606 // Mono Mix
  120. #define  AC97_RECMUX_PHONE       0x0707 // Phone - Pin grounded
  121. // Record Gain - 1Ch
  122. //
  123. #define  AC97_RECORD_GAIN_VAL 0x0F0F // Record Gain L & R
  124. // general purpose register bit defines - 20h
  125. // 
  126. #define AC97_GP_LPBK            0x0080 // Loopback mode
  127. #define AC97_GP_MS              0x0100 // Mic Select 0=Mic1, 1=Mic2
  128. #define AC97_GP_MIX             0x0200 // Mono output select 0=Mix, 1=Mic
  129. #define AC97_GP_3D              0x2000 // 3D Enhancement 1=on
  130. #define AC97_GP_POP             0x8000 // DAC Bypasses filter and connects to Line Out
  131. // 3D Control defines - 22h
  132. //
  133. #define AC97_SS3D_SEP_OFF 0x0000 // 3D Separation OFF
  134. #define AC97_SS3D_SEP_LOW 0x0004 // LOW
  135. #define AC97_SS3D_SEP_MED 0x0008 // MEDIUM
  136. #define AC97_SS3D_SEP_HIGH 0x000C // HIGH
  137. // powerdown control and status bit defines - 26h
  138. //
  139. #define AC97_PWR_EAPD 0x8000 // External Amp Power Down
  140. #define AC97_PWR_REF 0x0008 // Vref nominal
  141. #define AC97_PWR_ANL 0x0004 // Analog section ready
  142. #define AC97_PWR_DAC 0x0002 // DAC section ready
  143. #define AC97_PWR_ADC 0x0001 // ADC section ready
  144. // control
  145. #define AC97_PWR_PR0            0x0100      // ADC and Mux powerdown
  146. #define AC97_PWR_PR1            0x0200      // DAC powerdown
  147. #define AC97_PWR_PR2            0x0400      // Analog Mixer Powerdown (Vref on)
  148. #define AC97_PWR_PR3            0x0800      // Output Mixer Powerdown (Vref off)
  149. #define AC97_PWR_PR4            0x1000      // AC-link Powerdown
  150. #define AC97_PWR_PR5            0x2000      // Internal Clk Disable
  151. #define AC97_PWR_PR6            0x4000      // Aux Out Powerdown
  152. // useful power states
  153. #define AC97_PWR_D0             0x0000      // everything on
  154. #define AC97_PWR_D1             AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR4
  155. #define AC97_PWR_D2             AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR2|AC97_PWR_PR3|AC97_PWR_PR4
  156. #define AC97_PWR_D3             AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR2|AC97_PWR_PR3|AC97_PWR_PR4
  157. #define AC97_PWR_ANLOFF         AC97_PWR_PR2|AC97_PWR_PR3  //analog section off
  158. //Extended Audio ID Defines - 28h 
  159. //The CID0 and CID1 are HIGH and so the DSA bits will reset to 10 which corresponds to left slot 6 and right slot 9
  160. // Extended Audio Control/Status defines - 2Ah
  161. //
  162. #define AC97_ENABLE_VRA 0x0001 // variable Rate Sampling Enabled
  163. #define AC97_ENABLE_SPDIF 0x0004 // SPDIF Enabled
  164. // PCM DAC rate Registers defines - 2Ch and 32h
  165. //
  166. #define AC97_PCM_DAC_RATE_8KHZ 0x1F40 // 8 kHz Sample Rate
  167. #define AC97_PCM_DAC_RATE_11KHZ 0x2B11 // 11.025 kHz
  168. #define AC97_PCM_DAC_RATE_16KHZ 0x3E80 // 16 kHz
  169. #define AC97_PCM_DAC_RATE_22KHZ 0x5622 // 22.05 kHz
  170. #define AC97_PCM_DAC_RATE_32KHZ 0x7D00 // 32 kHz
  171. #define AC97_PCM_DAC_RATE_44KHZ 0xAC44 // 44.1 kHz
  172. #define AC97_PCM_DAC_RATE_48KHZ 0xBB80 // 48 kHz
  173. // SPDIF Control defines - 3Ah Pin 48 is HIGH and so the register 3Ah will read 0000h
  174. //
  175. // Revision Code defines - 6Ch
  176. //
  177. #define AC97_REVISION_CODE 0x0000 // Revision Code
  178. // Analog Special defines - 6Eh
  179. //
  180. #define AC97_ALL_MIX 0x1000 // Controls the record source when stereo option is selected
  181. // #define AC97_   - ADC slots TBD
  182. #define AC97_MIC_BOOST_20DB 0x0000 // Selected with bit D6 in 0Eh
  183. #define AC97_MIC_BOOST_30DB 0x0004 // Selected with bit D6 in 0Eh
  184. //
  185. #define AC97_READLOCKED_REG 0xABBA // Value to be written for reading/writing locked registers
  186. // Analog Current Adjust defines - 72h and 74h
  187. //
  188. #define AC97_CURR_NORMAL 0x0000 // Normal Current
  189. #define AC97_CURR_80_NOMINAL 0x0002 // 80% of than Nominal Current
  190. #define AC97_CURR_120_NOMINAL 0x0004 // 120% of than Nominal Current
  191. #define AC97_CURR_140_NOMINAL 0x0006 // 140% of than Nominal Current
  192. #define AC97_ANTIPOP 0x0080 // Anti-pop 
  193. // GPIO Access register defines - 74h - pins not being used.
  194. //
  195. // High Pass Filter Bypass defines - 76h and 78h
  196. //
  197. #define AC97_HIPASS_DISABLE 0x0001 // High Pass filtering Disabled
  198. //Vendor ID1 and ID2 defines - 7Ch an 7Eh
  199. //
  200. #define  AC97_VENDOR_ID1_VAL 0x8384 // Sigmatel
  201. #define  AC97_VENDOR_ID2_VAL 0x7666 // SigmaTel
  202. #endif // _AC97_H_