📄 aic23cfg.c
字号:
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#include "aic23cfg.h"
#define ADC_CLK 0x0020 //2812a pwm12 gpiob.5 27 30 sclk aic23
#define ADC_CS 0x0008 //2812a pwm10 gpiob.3 25 28 cs aic23
#define ADC_DATA 0x0010 //2812a pwm11 gpiob.4 26 24 sin aic23
#define ADC_DELAY 40
void AIC23_Write(unsigned short , unsigned short );
void adc_sck( void );
void delay(long j);
void AIC23_cfg( void )
{
EALLOW;
// Configure MUXs as digital I/Os or
GpioMuxRegs.GPBMUX.all=GpioMuxRegs.GPBMUX.all&(~ADC_CS)&(~ADC_CLK)&(~ADC_DATA);
// GPIO PORTs as output
GpioMuxRegs.GPBDIR.all=GpioMuxRegs.GPBDIR.all|ADC_CS|ADC_CLK|ADC_DATA;
EDIS;
GpioDataRegs.GPBSET.all=GpioMuxRegs.GPBDIR.all|ADC_CS|ADC_CLK|ADC_DATA;
delay(ADC_DELAY*10);
// Reset the AIC23 and turn on all power
AIC23_Write(AIC23_RESET_REG, 0);
delay(ADC_DELAY*100);
AIC23_Write(AIC23_POWER_DOWN_CTL, 0);
AIC23_Write(AIC23_ANALOG_AUDIO_CTL, ANAPCTL_DAC);
AIC23_Write(AIC23_DIGITAL_AUDIO_CTL, DIGPCTL_ADCHP);
// Turn on volume for line inputs
AIC23_Write(AIC23_LT_LINE_CTL, 0x79);
AIC23_Write(AIC23_RT_LINE_CTL,0x79);
// Configure the AIC23 for master mode, 44.1KHz stereo, 16 bit samples
// Use 12MHz USB clock
AIC23_Write(AIC23_DIGITAL_IF_FORMAT, DIGIF_FMT_LRP|DIGIF_FMT_MS | DIGIF_FMT_IWL_16 | DIGIF_FMT_FOR_DSP );
AIC23_Write(AIC23_SAMPLE_RATE_CTL, SRC_SR_44 | SRC_BOSR | SRC_MO);
// Turn on headphone volume and digital interface
AIC23_Write(AIC23_DIG_IF_ACTIVATE, DIGIFACT_ACT);
}
void AIC23_Write(unsigned short regaddr, unsigned short data)
{
unsigned short i;
data=((regaddr&0x0f)<<9)|(data&0x1ff);
GpioDataRegs.GPBCLEAR.all=ADC_CS;
delay(ADC_DELAY);
for(i=0;i<16;i++)
{
if(data&0x8000)
GpioDataRegs.GPBSET.all=ADC_DATA;
else
GpioDataRegs.GPBCLEAR.all=ADC_DATA;
delay(ADC_DELAY);
adc_sck();
data=data<<1;
}
GpioDataRegs.GPBSET.all=ADC_CS;
}
void adc_sck( void )
{
GpioDataRegs.GPBCLEAR.all=ADC_CLK;
delay(ADC_DELAY);
GpioDataRegs.GPBSET.all=ADC_CLK;
delay(ADC_DELAY);
GpioDataRegs.GPBCLEAR.all=ADC_CLK;
delay(ADC_DELAY);
}
void delay(long j)
{
long i;
for (i=0;i<j;i++){asm(" NOP");}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -