⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac97.h

📁 基于AMD Au1200(MIPS32处理器)的AC97驱动源码
💻 H
字号:
/*******************************************************************
    Copyright (c) 2001-2005 BSQUARE Corporation.  All rights reserved.
 ******************************************************************/

#ifndef _AC97_AUDIO_H_
#define _AC97_AUDIO_H_

#include "platform.h"

#define TIMEOUT     200

//
// AC97 Controller registers
// 
//
#define AC97_RESET                   	    0x00
#define AC97_MASTER_VOLUME           	    0x02
#define AC97_ALT_LINE_LEVEL_OUT_VOLUME      0x04
#define AC97_MASTER_VOLUME_MONO      	    0x06
#define AC97_PC_BEEP_VOLUME          	    0x0a
#define AC97_PHONE_VOLUME            	    0x0c
#define AC97_MIC_VOLUME              	    0x0e
#define AC97_LINE_IN_VOLUME          	    0x10
#define AC97_CD_VOLUME               	    0x12
#define AC97_VIDEO_VOLUME            	    0x14
#define AC97_AUX_VOLUME              	    0x16
#define AC97_PCM_OUT_VOLUME          	    0x18
#define AC97_RECORD_SELECT           	    0x1a
#define AC97_RECORD_GAIN             	    0x1c
#define AC97_GENERAL_PURPOSE         	    0x20
#define AC97_THREE_D_CONTROL         	    0x22
#define AC97_POWER_CONTROL           	    0x26
#define AC97_EXTENDED_AUDIO_ID           	0x28
#define AC97_EXTENDED_AUDIO_STATUS_CONTROL  0x2a
#define AC97_PCM_FRONT_DAC_RATE	            0x2c
#define AC97_PCM_ADC_RATE		            0x32
#define AC97_SERIAL_CONFIGURATION    	    0x74
#define AC97_MISC_CONTROL            	    0x76
#define AC97_SAMPLE_RATE_0           	    0x78
#define AC97_SAMPLE_RATE_1           	    0x7a
#define AC97_VENDOR_ID1              	    0x7c
#define AC97_VENDOR_ID2              	    0x7e

//
// Define the individual bits in the indexed control registers.  The full set is not
// defined here, only the ones which are of interest in this driver
//
//
// MASTER_VOLUME register bits
//

#define VOLUME_MUTE             0x8000  // 1 - mutes both channels
#define VOLUME_RIGHT_MASK       0x003f  // D5:0 are right volume control
#define VOLUME_RIGHT_SHIFT      0
#define VOLUME_LEFT_MASK        0x3f00  // D13:8 are left volume control
#define VOLUME_LEFT_SHIFT       8

//
//  General purpose reg
//
#define GP_LPBK                 0x0080
#define GP_MS                   0x0100
#define GP_MIX                  0x0200
#define GP_3D                   0x2000


///
// POWER_CONTROL/STATUS register bits.  These subsections reside upon the CODEC
// Generally, setting a 1 powers down the subsection, 0 powers it up.
//

#define ADC                     0x0001  // RO - ADC section ready to xmit data
#define DAC                     0x0002  // RO - DAC section ready to accept data
#define ANL                     0x0004  // RO - analog gainuators,attenuators, mixers ready
#define REF                     0x0008  // RO - voltage references, vref, vrefout OK
#define PR0                     0x0100  // WO - 1 powers down ADC; 0 powers up
#define PR1                     0x0200  // WO - 1 powers down DAC; 0 powers up
#define PR2                     0x0400  // WO - 1 powers down analog mixer (VREF on); 0 powers up
#define PR3                     0x0800  // WO - 1 powers down analog mixer (VREF off); 0 powers up
#define PR4                     0x1000  // WO - 1 powers down AC-Link; 0 powers up
#define PR5                     0x2000  // WO - 1 powers down digital clock; 0 powers up
#define PR6                     0x4000  // WO - 1 powers down headphone amp; 0 powers up

//
// SERIAL_CONFIGURATION register bits
//

#define DRRQ0                   0x0001  // master AC 97 codec DAC right request
#define DRRQ1                   0x0002  // slave 1 codec DAC right request
#define DRRQ2                   0x0004  // slave 2 codec DAC right request
#define DLRQ0                   0x0100  // master AC 97 codec DAC left request
#define DLRQ1                   0x0200  // slave 1 codec DAC left request
#define DLRQ2                   0x0400  // slave 2 codec DAC left request
#define DRQEN                   0x0800  // fills idle slots wit DAC read requests
#define REGM0                   0x1000  // master CODEC register mask
#define REGM1                   0x2000  // slave 1 codec register mask
#define REGM2                   0x4000  // slave 2 codec register mask
#define SLOT16                  0x8000  // enable 16-bit slots

//
// MISC_CONTROL register bits
//

#define ARSR                    0x0001  // ADC right sample generator select 0=SR0, 1=SR1
#define DRSR                    0x0004  // DAC right sample generator select 0=SR0, 1=SR1
#define SRX8D7                  0x0020  // multiply SR1 rate by 8/7
#define SRX10D7                 0x0040  // multiply SR1 rate by 10/7
#define MODEN                   0x0080  // modem filter enable
#define ALSR                    0x0100  // ADC left sample generator select 0=SR0, 1=SR1
#define DLSR                    0x0400  // DAC left sample generator select 0=SR0, 1=SR1
#define DACZ                    0x8000  // zero fill (vs. repeat sample) if DAC is starved


extern BOOL AC97ReadReg(IN PSC_AC97 *pAC97,IN ULONG InReg,OUT ULONG *Result);
extern BOOL AC97WriteReg(IN PSC_AC97 *pAC97,IN ULONG  Reg,IN ULONG  Value);
extern BOOL AC97ResetRegisters(IN PSC_AC97 *pAC97);
extern BOOL AC97GetMasterVolume(IN PSC_AC97 *pAC97,OUT ULONG *LVol,OUT ULONG *RVol);
extern BOOL AC97SetMasterVolume(IN PSC_AC97 *pAC97,IN ULONG LVol,IN ULONG RVol);
extern BOOL AC97GetPCMOutVolume(IN PSC_AC97 *pAC97,OUT ULONG *LVol,OUT ULONG *RVol);
extern BOOL AC97SetPCMOutVolume(IN PSC_AC97 *pAC97,IN ULONG LVol,IN ULONG RVol);
extern BOOLEAN CodecSetVolume(IN PSC_AC97 *pAC97,IN ULONG Volume);
extern ULONG CodecGetVolume(IN PSC_AC97 *pAC97);
extern BOOL CodecSetMasterMute(IN PSC_AC97 *pAC97);
extern BOOL CodecClrMasterMute(IN PSC_AC97 *pAC97);
extern BOOLEAN InitializeCodec(IN OUT PWAVE_DEVICE_INSTANCE);
extern BOOL InitializeDMARegisters(PWAVE_DEVICE_INSTANCE );
extern BOOL CodecSetSampleRate(IN PSC_AC97 *pAC97,IN ULONG Hertz);
extern BOOL CodecSetADCSampleRate(IN PSC_AC97 *pAC97,IN ULONG Hertz);
extern BOOL CodecPowerDown(IN PSC_AC97 *pAC97);
extern BOOL CodecPowerUp(IN PSC_AC97 *pAC97);
extern BOOL InitializeRegisters(PSC_AC97 *pAC);
#endif _AC97_AUDIO_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -