📄 wolfsen.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 + -