📄 uda1341ts.c
字号:
/* UDA1341 operation
written by ZhangBo 2008-5
*/
#include "2410lib.h"
#include "audio.h"
#define L3C (0x10) //GPB4=L3C
#define L3D (0x8) //GPB3=L3D
#define L3M (0x4) //GPB2=L3M
#define L3C_L() {rGPBDAT &= ~(L3C);}
#define L3C_H() {rGPBDAT |= (L3C);}
#define L3D_L() {rGPBDAT &= ~(L3D);}
#define L3D_H() {rGPBDAT |= (L3D);}
#define L3M_L() {rGPBDAT &= ~(L3M);}
#define L3M_H() {rGPBDAT |= (L3M);}
void writeAddr(UINT8T dat);
void writeData(UINT8T dat,int halt);
/* address mode write */
void writeAddr(UINT8T dat)
{
int i,j;
/* L3M signal should be low to start address write */
L3M_L();
/* L3CClock should be high then wait */
L3C_H();
for(i = 0; i < 5; i++)
;
for(i = 0; i < 8; i++)
{
/* when data bit is 1 write this */
if(dat & 0x1)
{
/* when clock is low then write data */
L3C_L();
L3D_H();
for(j = 0; j < 5; j++)
;
/* low to high to complete one write operation */
L3C_H();
L3D_H();
for(j = 0; j < 5; j++)
;
}
/* when data bit is 0 write this */
else
{
/* when clock is low then write data */
L3C_L();
L3D_L();
for(j = 0; j < 5; j++)
;
/* low to high to complete one write operation */
L3C_H();
L3D_L();
for(j = 0; j < 5; j++)
;
}
dat = dat >> 1;
}
/* let clock be high and L3Mode be high */
L3C_H();
L3M_H();
}
/* data mode write */
void writeData(UINT8T dat,int halt)
{
int i,j;
if(halt)
{
L3C_H(); // L3C=H(while tstp, L3 interface halt condition)
for(j=0; j<5; j++) // tstp(L3) > 190ns
;
}
/* mode high cloc high */
L3M_H();
L3C_H();
for(j = 0; j < 5; j++)
;
for(i = 0; i < 8; i++)
{
if(dat & 0x1)
{
/* when clock is low then write */
L3C_L();
L3D_H();
for(j = 0; j < 5; j++)
;
/* low to high to complete one write operation */
L3C_H();
L3D_H();
for(j = 0; j < 5; j++)
;
}
else
{
/* when clock is low then write */
L3C_L();
L3D_L();
for(j = 0; j < 5; j++)
;
/* low to high to complete one write operation */
L3C_H();
L3D_L();
for(j = 0; j < 5; j++)
;
}
dat = dat >> 1; //one loop check one bit
}
/* mode high clock high */
L3M_H();
L3C_H();
}
/* init UDA1341 device */
void init_1341(int mode)
{
/*GPB4 GPB3 GPB2 as output */
rGPBCON = rGPBCON = rGPBCON |(1<<8)|(1<<6)|(1<<4);
/*GPB2 GPB3 GPB4 pullup function are disabled */
rGPBUP = rGPBUP |(7<<2);
L3M_H();
L3C_H();
writeAddr(0x14+0x2);
writeData(0x50,0); //reset sc1=0,sc0=1, DCfilter=0
writeAddr(0x14+0x2);
writeData(0x10,0); //no reset sc1=0,sc0=1, DCfilter=0
/* set status */
writeAddr(0x14+0x2);
writeData(0x81,0); //OGS IGS PAD PDA DS = 0 ADC on
writeAddr(0x14);
writeData(0x0c,0); //volume = 12
if(mode == 1)
{
writeAddr(0x14+2); // status
writeData(0xa2,0); // OGS=0,IGS=1,ADC_NI,DAC_NI,sngl speed,AonDoff
writeAddr(0x14+0); // data0
writeData(0xc2,0); // DATA0, Extended addr(010)
writeData(0x4d,0); // DATA0, MS=9dB, Chanel1=on, Chanel2=off,
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -