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

📄 wolfsen.c

📁 FreeScale imx21开发板Nand flash烧写程序
💻 C
字号:
// ***************************************************************************
//
//  Filename:       WOLFSON.c
//
//  Created:        Louis Lai (7/20/2003)
//
//  Modified:       $Author: $ $Date: $
//
// ***************************************************************************


// ***************************************************************************
//  pragmas
// ***************************************************************************


// ***************************************************************************
//  includes
// ***************************************************************************
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "i2c.h"
#include "header.h"
#include "types.h"


// ***************************************************************************
//  macros
// ***************************************************************************
// Wolfson Register Address
#define 	WOLFSON_ADDR	0x34
#define 	WOLFSON_LLIN	0x00
#define		WOLFSON_RLIN	0x01
#define		WOLFSON_LHOUT	0x02
#define		WOLFSON_RHOUT	0x03
#define		WOLFSON_AAPC	0x04
#define		WOLFSON_DAPC	0x05
#define		WOLFSON_PDC		0x06
#define		WOLFSON_DAIF	0x07
#define		WOLFSON_SC		0x08
#define		WOLFSON_AC		0x09
#define		WOLFSON_RR		0x0A


//	Register Default Values
static U32 LLin_value	 = 0x97;
static U32 RLin_value  = 0x97;
static U32 LHout_value = 0x79;
static U32 RHout_value = 0x79;
static U32 AAPC_value  = 0x0A;
static U32 DAPC_value  = 0x08;
static U32 PDC_value   = 0x9F;
static U32 DAIF_value  = 0x0A;
static U32 SC_value    = 0x00;
static U32 AC_value    = 0x00;
static U32 RESET_value = 0x01;


// ***************************************************************************
//  definitions
// ***************************************************************************


	
// ***************************************************************************
//  types
// ***************************************************************************


// ***************************************************************************
//  structures
// ***************************************************************************


// ***************************************************************************
//  data
// ***************************************************************************


// ***************************************************************************
//  function implementations
// ***************************************************************************
// *******************************************************************
// 
//	Function:		config_WOLFSON
//					This function use the I2C interface to config.
//					the WOLFSON Codec 
//
//	Parameters:		U32			reg_addr		address of the config. register			
//					U32			data			value to set
//
//	Return:			void		
// *******************************************************************
void Config_WOLFSON(U32 reg_addr, U32 data)
{
		U32	f_byte;
		U32 s_byte;
		U32 s_address = WOLFSON_ADDR;		
	
		f_byte = (reg_addr << 1 | ((data >> 8) & 0x1 ));
		s_byte = data & 0xFF;
	
		// Set the I2C module to master/transmit mode	
		// ******************************************
		I2c_Mode(TRUE, TRUE);
		
		// ***********************************************************
		// Address Cycle
		// send out slave address and wait for acknowledgement
		// ***********************************************************
		I2c_Tx(s_address);
		
		// ***********************************************************
		// Data Cycle
		// send data byte by byte
		// ***********************************************************
		I2c_Tx(f_byte);			// address of the config. register
		I2c_Tx(s_byte);			// config. setting
		
		// Return the I2C module to slave/receive mode
		// *******************************************
		I2c_Mode(FALSE, FALSE);
}
						
void Wolfson_Reset(void)
{
	Config_WOLFSON(WOLFSON_RR, 0x00);
	
	return;
} 

void Wolfson_Power_on(void)
{
	Config_WOLFSON(WOLFSON_PDC, 0x00);
	
	return;
}

void Wolfson_Power_off(void)
{
	Config_WOLFSON(WOLFSON_PDC, 0xFF);
	
	return;
}


void Wolfson_LineIn_mute_enable(void)
{
	LLin_value |= 0x80;
	RLin_value |= 0x80;

	Config_WOLFSON(WOLFSON_LLIN, LLin_value);
	Config_WOLFSON(WOLFSON_RLIN, RLin_value);
	
	return;
}


void Wolfson_LineIn_mute_disable(void)
{
 	LLin_value &= ~0x80;
	RLin_value &= ~0x80;
	
	Config_WOLFSON(WOLFSON_LLIN, LLin_value);
	Config_WOLFSON(WOLFSON_RLIN, RLin_value);
	
	return;
}

void Wolfson_Master(BOOL mode)
{
	if (mode)
	{
		Config_WOLFSON(WOLFSON_DAIF, 0x70);
	}
	else
	{
		Config_WOLFSON(WOLFSON_DAIF, 0x00);
	}
	
	return;
}

void Wolfson_set_sampling_rate(U32 fs_adc, U32 fs_dac)
{
		// MCLK = 11.2896MHz		
		if(fs_adc == 44100 && fs_dac == 44100)
			SC_value |= 0x20;
		else if(fs_adc == 8000 && fs_dac == 44100)
			SC_value |= 0x28;
		else if(fs_adc == 44100 && fs_dac == 8000)
			SC_value |= 0x24;
		else if(fs_adc == 8000 && fs_dac == 8000)
			SC_value |= 0x2C;	
		//default set to adc = 44.1, dac = 44.1
		else
			SC_value |= 0x20;
			
		Config_WOLFSON(WOLFSON_SC, SC_value);
		
		return;
}

void Wolfson_Audio_Activate(void)
{
	AC_value |= 0x01;
	Config_WOLFSON(WOLFSON_AC, AC_value);
	
	return;
}

void Wolfson_Audio_Disable(void)
{
	AC_value &= ~0x01;
	Config_WOLFSON(WOLFSON_AC, AC_value);
	
	return;
}

void Wolfson_Set_Audio_Format(U32 mode)
{
//de-activate interface before configuration
	Wolfson_Audio_Disable();

//config audio format
	DAIF_value &= ~0x4F;
	switch(mode)
	{
		case 0:
		//master, 16-bit, left-justified
		{
			DAIF_value |= 0x40;	//master mode
			DAIF_value |= 0x01;	//left-justified
			break;
		}
		case 1:
		//slave, 16-bit, left-justified
		{
			DAIF_value &= ~0x40;//slave mode
			DAIF_value |= 0x01;	//left-justified
			break;
		}
		default:
		//master, 16-bit, left-justified
		{
			DAIF_value |= 0x40;	//master mode
			DAIF_value |= 0x01;	//left-justified

			break;
		}
	}
	Config_WOLFSON(WOLFSON_DAIF, DAIF_value);

//activate interface
	Wolfson_Audio_Activate();
	
	return;
}

void Wolfson_Bypass_Enable(void)
{
	AAPC_value |= 0x08;
	Config_WOLFSON(WOLFSON_AAPC, AAPC_value);
	
	return;
}

void Wolfson_LineIn_Select(void)
{
//select line in input to ADC
	AAPC_value &= ~0x04;
	Config_WOLFSON(WOLFSON_AAPC,AAPC_value);
	
	return;
}


void Recording(void)
{
	Wolfson_Reset();
	Wolfson_Power_on();
	Wolfson_set_sampling_rate(44100,44100);
	Wolfson_Set_Audio_Format(0);
	Wolfson_Bypass_Enable();
	Wolfson_LineIn_Select();
	Wolfson_LineIn_mute_disable();
	 
	return;
}


























⌨️ 快捷键说明

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