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

📄 uda1341ts.c

📁 embest下开发的audio音频设备驱动
💻 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 + -