📄 uda1341.c.bak
字号:
//====================================================================
// File Name : 2410iis.c
// Function : S3C2410 IIS (UDA1341) Record & Play Test Program
// (DMA2, Double Buffer, Record, Play)
// Program : Shin, On Pil (SOP)
// Date : May 10, 2002
// Version : 0.0
// History
// 0.0 : Programming start (March 06, 2002) -> SOP
//====================================================================
#define L3D_L L3PORT&=~L3D //
#define L3M_L L3PORT&=~L3M //
#define L3C_L L3PORT&=~L3C //
#define L3D_H L3PORT|=L3D //
#define L3M_H L3PORT|=L3M //
#define L3C_H L3PORT|=L3C //
#define PLAY 0
#define RECORD 1
#define REC_LEN 0x50000 //327,680 Bytes
//******************[ Init1341 ]**************************************
void Init1341(char mode)
{
//Port Initialize
//----------------------------------------------------------
// PORT B GROUP
//Ports : GPB4 GPB3 GPB2
//Signal : L3CLOCK L3DATA L3MODE
//Setting: OUTPUT OUTPUT OUTPUT
// [9:8] [7:6} [5:4]
//Binary : 01 , 01 01
//----------------------------------------------------------
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3M|L3C); //Start condition : L3M=H, L3C=H
rGPBUP = rGPBUP & ~(0x7<<2) |(0x7<<2); //The pull up function is disabled GPB[4:2] 1 1100
rGPBCON = rGPBCON & ~(0x3f<<4) |(0x15<<4); //GPB[4:2]=Output(L3CLOCK):Output(L3DATA):Output(L3MODE)
//L3 Interface
_WrL3Addr(0x14 + 2); //STATUS (000101xx+10)
_WrL3Data(0x60,0); //0,1,10,000,0 : Reset,256fs,no DCfilter,iis
_WrL3Addr(0x14 + 2); //STATUS (000101xx+10)
_WrL3Data(0x20,0); //0,0,10,000,0 : No reset,256fs,no DCfilter,iis
_WrL3Addr(0x14 + 2); //STATUS (000101xx+10)
_WrL3Data(0x81,0); //1,0,0,0,0,0,01 : OGS=0,IGS=0,ADC_NI,DAC_NI,sngl speed,AoffDon
//record
if(mode)
{
_WrL3Addr(0x14 + 2); //STATUS (000101xx+10)
_WrL3Data(0xa2,0); //1,0,1,0,0,0,10 : OGS=0,IGS=1,ADC_NI,DAC_NI,sngl speed,AonDoff
_WrL3Addr(0x14 + 0); //DATA0 (000101xx+00)
_WrL3Data(0xc2,0); //11000,010 : DATA0, Extended addr(010)
_WrL3Data(0x4d,0); //010,011,01 : DATA0, MS=9dB, Ch1=on Ch2=off,
}
}
//===================================================================
//===================================================================
void _WrL3Addr(unsigned char data)
{
unsigned char i;
L3D_L;//L3D=L, L3M=L(in address mode), L3C=H
l3M_L;
L3C_H;
_NOP();_NOP();
for(i=0;i<8;i++) //LSB first
{
L3C_L;//L3C=L
if(data & 0x1) //If data's LSB is 'H'
L3D_H; //L3D=H
else
L3D_L; //L3D=H
_NOP();_NOP();
_NOP();_NOP();
L3C_H; //L3C=H
_NOP();_NOP();
_NOP();_NOP();
data >>= 1;
}
l3M_H;
L3C_H;//L3M=H,L3C=H
}
//===================================================================
void _WrL3Data(unsigned char data,int halt)
{
unsigned char i;
if(halt)
{
L3D_L;//L3D=L, L3M=L(in address mode), L3C=H
l3M_L;
L3C_H;
_NOP():_NOP():_NOP()://tstp(L3) > 190ns
}
l3M_H;
_NOP():_NOP():_NOP()://tstp(L3) > 190ns
for(i=0;i<8;i++)
{
L3C_L;//L3C=L
if(data & 0x1) //If data's LSB is 'H'
L3D_H; //L3D=H
else
L3D_L; //L3D=H
_NOP();_NOP();
_NOP();_NOP();
L3C_H; //L3C=H
_NOP();_NOP();
_NOP();_NOP();
data >>= 1;
}
l3M_H;
L3C_H;//L3M=H,L3C=H
}
//===================================================================
void Muting(void)
{
if(mute) //Mute
{
_WrL3Addr(0x14 + 0); //DATA0 (000101xx+00)
_WrL3Data(0xa4,0); //10,1,00,1,00 : after, no de-emp, mute, flat
}
else //No mute
{
_WrL3Addr(0x14 + 0); //DATA0 (000101xx+00)
_WrL3Data(0xa0,0); //10,1,00,0,00 : after, no de-emp, no mute, flat
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -