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

📄 uda1341ts.c

📁 BSP for S3C2410
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "vxWorks.h"
#include "iv.h"
#include "stdlib.h"
#include "sysLib.h"
#include "intLib.h"
#include "errno.h"
#include "ioLib.h"
#include "stdio.h"
#include "logLib.h"
#include "wrSbcArm9.h"


#include "UDA1341TS.h"

#ifndef BSP_44B0_LITTLE_ENDIAN
#define BSP_44B0_LITTLE_ENDIAN
#endif

#undef _TEST_CODEC_DMA_

#define IIS_RECORD 1
#define IIS_PLAY   0

#define U32 unsigned int

#define L3BUS_MODE_CFG 		(0x56000020)
#define L3BUS_CLK_CFG		(0x56000020)
#define L3BUS_DATA_CFG 		(0x56000030)

#define L3BUS_MODE_DATA 		(0x56000024)
#define L3BUS_CLK_DATA		(0x56000024)
#define L3BUS_DATA_DATA 		(0x56000034)

#define L3BUS_MODE_PLUP			(0x56000028)
#define L3BUS_DATA_PLUP			(0x56000038)


#define rL3CFG_MODE		(*(volatile unsigned *)0x56000020)
#define rL3CFG_CLK		(*(volatile unsigned *)0x56000020)
#define rL3CFG_DATA		(*(volatile unsigned *)0x56000030)

#define rL3DATA_MODE		(*(volatile unsigned *)0x56000024)
#define rL3DATA_CLK		(*(volatile unsigned *)0x56000024)
#define rL3DATA_DATA		(*(volatile unsigned *)0x56000034)

#define rL3_MODE_PLUP			(*(volatile unsigned *)0x56000028)
#define rL3_DATA_PLUP			(*(volatile unsigned *)0x56000038)


#define L3MODE_CLR  0xfffcffff
#define L3MODE_OUT	0x00010000

#define L3CLK_CLR	0xcfffffff
#define L3CLK_OUT	0x10000000

#define L3DATA_CLR	0xffffffcf
#define L3DATA_OUT	0x00000010
#define L3DATA_IN   0x00000000

#define L3MODE_LOW  0xfeff
#define L3MODE_HIGH 0x0100

#define L3CLK_LOW   0xbfff
#define L3CLK_HIGH  0x4000

#define L3DATA_LOW  0xfffb
#define L3DATA_HIGH 0x0004


#define UDA1314_IISCON						(0x55000000)
#define UDA1314_IISMOD						(0x55000004)
#define UDA1314_IISPSR						(0x55000008)
#define UDA1314_IISFCON					(0x5500000c)
#ifdef BSP_44B0_LITTLE_ENDIAN
#define UDA1314_IISFIFO					(0x55000010)
#else
#define UDA1314_IISFIFO					(0x55000012)
#endif

#define rIIS_GPEC			(*(volatile unsigned *)0x55000040)
#define rIIS_GPED			(*(volatile unsigned *)0x55000044)
#define rIIS_GPEU			(*(volatile unsigned *)0x55000048)

#define rIIS_CONFREG		(*(volatile unsigned *)0x55000000)
#define rIIS_MODREG	(*(volatile unsigned *)0x55000004)
#define rIIS_PSRREG		(*(volatile unsigned *)0x55000008)
#define rIIS_FCONREG	(*(volatile unsigned *)0x5500000c)

#ifdef BSP_44B0_LITTLE_ENDIAN
#define rIIS_FIFREG		(*(volatile unsigned short *)0x55000010)
#else 
#define rIIS_FIFREG		(*(volatile unsigned short *)0x55000012)
#endif

#ifdef BSP_44B0_LITTLE_ENDIAN
#define IIS_FIFREG		((volatile unsigned short *)0x55000010)
#else 
#define IIS_FIFREG		((volatile unsigned short *)0x55000012)
#endif


#define IIS_INTER_ENABLE		(0x001)
#define IIS_PRES_ENABLE			(0x002)
#define IIS_TR_LRCLK_GEN			(0x1f7)
#define IIS_RC_LRCLK_GEN		(0x1fb)
#define IIS_TR_DMA_ENABLE		(0x020)
#define IIS_RC_DMA_ENABLE		(0x010)

#define IIS_INTER_DISABLE		(0x1fe)
#define IIS_PRES_DISABLE		(0x1fd)
#define IIS_TR_LRCLK_NGEN		(0x008)
#define IIS_RC_LRCLK_NGEN		(0x004)
#define IIS_TR_DMA_DISABLE		(0x1ef)
#define IIS_RC_DMA_DISABLE		(0x1df)

#define IIS_CLK_CLR				(0x1fc)
#define IIS_CLK_16				(0x1fc)
#define IIS_CLK_32				(0x001)
#define IIS_CLK_48				(0x002)

#define IIS_MCLK_256			(0x1fb)
#define IIS_MCLK_384			(0x004)
#define IIS_SDB_8				(0x1f7)
#define IIS_SDB_16				(0x008)

#define IIS_LOW_LEFT			(0x1df)
#define IIS_HIGH_LEFT			(0x020)

#define IIS_TR_MODE_CLR			(0x13f)
#define IIS_NTR_MODE			(0x13f)
#define IIS_RECV_MODE			(0x040)
#define IIS_TR_MODE 			(0x080)
#define IIS_TR_RECV_MODE		(0x0c0)

#define IIS_MASTER_MODE			(0x0ff)
#define IIS_SLAVE_MODE			(0x100)

#define IIS_TR_FIFO_EN			(0x2000)
#define IIS_TR_FIFO_DIS			(0xdfff)
#define IIS_RC_FIFO_EN			(0x1000)
#define IIS_RC_FIFO_DIS			(0xefff)
#define IIS_TR_FIFO_NOR_MODE	(0x7fff)
#define IIS_TR_FIFO_DMA_MODE	(0x8000)
#define IIS_RC_FIFO_NOR_MODE	(0xbfff)
#define IIS_RC_FIFO_DMA_MODE	(0x4000)


#define rIIS_DISRC1		(*(volatile unsigned *)0x4b000040)
#define rIIS_DISRCC1	(*(volatile unsigned *)0x4b000044)
#define rIIS_DIDST1		(*(volatile unsigned *)0x4b000048)
#define rIIS_DIDSTC1	(*(volatile unsigned *)0x4b00004c)
#define rIIS_DCON1		(*(volatile unsigned *)0x4b000050)
#define rIIS_DSTAT1		(*(volatile unsigned *)0x4b000054)
#define rIIS_DCSRC1		(*(volatile unsigned *)0x4b000058)
#define rIIS_DCDST1		(*(volatile unsigned *)0x4b00005c)
#define rIIS_DMASKTRIG1	(*(volatile unsigned *)0x4b000060)

#define rIIS_DISRC2		(*(volatile unsigned *)0x4b000080)
#define rIIS_DISRCC2	(*(volatile unsigned *)0x4b000084)
#define rIIS_DIDST2		(*(volatile unsigned *)0x4b000088)
#define rIIS_DIDSTC2	(*(volatile unsigned *)0x4b00008c)
#define rIIS_DCON2		(*(volatile unsigned *)0x4b000090)
#define rIIS_DSTAT2		(*(volatile unsigned *)0x4b000094)
#define rIIS_DCSRC2		(*(volatile unsigned *)0x4b000098)
#define rIIS_DCDST2		(*(volatile unsigned *)0x4b00009c)
#define rIIS_DMASKTRIG2	(*(volatile unsigned *)0x4b0000a0)




typedef struct tagIISDeviceST
{
	int recvCount;
	int sndCount;
	int iisTaskId;
	int semCount;
}IIS_DEVICE_ST;

IIS_DEVICE_ST gIISDevice;

void UDA1341Delay(char count)
{
	int i=1000;
	int n;

	for(n=0;n<count;n++)
	{
		i--;
	}

}

#if 1
void L3busInit();
void IISbusInit();
void Uda1341Init(char mode);
void Uda1341SndData();
void Uda1341RecvData();
void L3busAddrTran(char addrVal);
void L3busDataTran(char dataVal , int halt);
void IISDmaInit();
void Uda1341DmaSndData();
void Uda1341DmaRecvData();
void IISDmaRecvIntProc(IIS_DEVICE_ST *iisDev);
void IISDmaSndIntProc(IIS_DEVICE_ST *iisDev);
int LoadFiletoAddr(char *pFileName, char *pAddr);

#endif

char dmaRecvBuf[10][1024];
char dmaSndBuf[1024];

void IISTaskProc()
{
	int i=0;
	int j=0;

	while(1)
	{

		if(gIISDevice.semCount>0)
		{
	
			printf("\r\nr%ds%d" ,gIISDevice.recvCount,gIISDevice.sndCount);
			#if 0
			if(gIISDevice.bufCount == 0)
			{
				for(i=0 ; i<2 ;i++)
				{
					printf("\r\n");
					for(j=0;j<10;j++)
					{
						printf("%02x ",dmaRecvBuf[9][i*10+j]);
					}
				}
				printf("\r\n");
			}
			else
			{
				for(i=0 ; i<2 ;i++)
				{
					printf("\r\n");
					for(j=0;j<10;j++)
					{
						printf("%02x ",dmaRecvBuf[gIISDevice.bufCount-1][i*10+j]);
					}
				}
				printf("\r\n");

			}
			#endif
			gIISDevice.semCount--;
		}

	}
	
	
}

void CodecModInit()
{
	gIISDevice.recvCount= 0;
	gIISDevice.sndCount =5;
	gIISDevice.semCount = 0;

/*
	if (usrTffsConfig (0, 0, "/tffs0/vxworks") == ERROR)
	{
        printf ("usrTffsConfig failed.\n");
		return;
	}
	else
		ioDefPathSet("/tffs0/");
	*/
	
	L3busInit();
	IISbusInit();
	Uda1341Init(IIS_RECORD);
	IISDmaInit();

#ifdef _TEST_CODEC_DMA_

	gIISDevice.iisTaskId =taskSpawn("iisTask" , 120 , 0 , 0x4000,
			(FUNCPTR) IISTaskProc, 0, 0, 0, 0, 0, 0, 
						   0, 0, 0, 0);

	if(gIISDevice.iisTaskId <= 0)
	{
			logMsg("\r\n Start iis task failure\n" , 0 , 0,0,0,0,0);
			return;
	}
#endif
	
	logMsg("\r\n CodecModInit\n" , 0 , 0,0,0,0,0);

}


void L3busInit()
{
	rL3CFG_MODE &= L3MODE_CLR;
	rL3CFG_MODE |= L3MODE_OUT;	

	rL3CFG_CLK &= L3CLK_CLR;
	rL3CFG_CLK |= L3CLK_OUT;
	
	rL3CFG_DATA &=L3DATA_CLR;
	rL3CFG_DATA |= L3DATA_OUT;

	rL3DATA_MODE |= L3MODE_HIGH;
	rL3DATA_CLK |= L3CLK_HIGH;

	rL3_MODE_PLUP |= 0x0100;
	rL3_MODE_PLUP |= 0x4000;
	rL3_DATA_PLUP |= 0x0004;

}

void IISbusInit()
{
	rIIS_GPEC &= 0xfffffc00;
	rIIS_GPEC |= 0x000002aa;

	rIIS_GPEU |= 0x1f;
	rIIS_CONFREG |=IIS_PRES_ENABLE;
	rIIS_CONFREG &=IIS_INTER_DISABLE;
	
	rIIS_CONFREG &=IIS_TR_LRCLK_GEN&IIS_RC_LRCLK_GEN;

	rIIS_CONFREG &= IIS_TR_DMA_DISABLE &IIS_RC_DMA_DISABLE;

	rIIS_MODREG &=IIS_CLK_CLR&IIS_TR_MODE_CLR&IIS_MCLK_256&IIS_LOW_LEFT\
				&IIS_MASTER_MODE;
	rIIS_MODREG |=IIS_CLK_32|IIS_SDB_16|IIS_TR_MODE;
	

	rIIS_PSRREG = (0x17<<5) +0x17;	 

	rIIS_FCONREG &=IIS_TR_FIFO_NOR_MODE&IIS_RC_FIFO_NOR_MODE;
	rIIS_FCONREG &=IIS_TR_FIFO_DIS|IIS_RC_FIFO_DIS;	

}


void Uda1341Init(char mode)
{
	rL3DATA_MODE |= L3MODE_HIGH;
	rL3DATA_CLK |= L3CLK_HIGH;
	rL3DATA_DATA &= L3DATA_LOW;
	
	L3busAddrTran(0x14+2);
	L3busDataTran(0x60 , 0);

	L3busAddrTran(0x14+2);
	L3busDataTran(0x20 , 0);

	L3busAddrTran(0x14+2);
	L3busDataTran(0x83 , 0);


}






void L3busAddrTran(char addrVal)
{
	int i = 0;
	
	rL3DATA_MODE &= L3MODE_LOW;
	rL3DATA_CLK |= L3CLK_HIGH;
	rL3DATA_DATA &= L3DATA_LOW;

	UDA1341Delay(6);

	for(i =0 ; i< 8 ; i++)
	{
		if(addrVal&0x01)
		{
			rL3DATA_CLK &= L3CLK_LOW;
			rL3DATA_DATA |= L3DATA_HIGH;
			UDA1341Delay(3);
			rL3DATA_CLK |= L3CLK_HIGH;
			rL3DATA_DATA |= L3DATA_HIGH;
			UDA1341Delay(3);
		}
		else
		{
			rL3DATA_CLK &= L3CLK_LOW;
			rL3DATA_DATA &= L3DATA_LOW;
			UDA1341Delay(3);
			rL3DATA_CLK |= L3CLK_HIGH;
			rL3DATA_DATA &= L3DATA_LOW;
			UDA1341Delay(3);
		}

		 addrVal >>=1;

	}

	rL3DATA_CLK |= L3CLK_HIGH;
	rL3DATA_MODE |= L3MODE_HIGH;
	rL3DATA_DATA &= L3DATA_LOW;
	
	

}



void L3busDataTran(char dataVal , int halt)
{
	int i = 0;
	int j = 0;

	if(halt)
	{
		rL3DATA_MODE &= L3MODE_LOW;
		rL3DATA_CLK |= L3CLK_HIGH;
		rL3DATA_DATA &= L3DATA_LOW;
		UDA1341Delay(3);
	}

	rL3DATA_CLK |= L3CLK_HIGH;
	rL3DATA_MODE |= L3MODE_HIGH;
	UDA1341Delay(3);
	

	for(i =0 ; i< 8 ; i++)
	{
		if(dataVal&0x01)
		{
			rL3DATA_CLK &= L3CLK_LOW;
			rL3DATA_DATA |= L3DATA_HIGH;
			UDA1341Delay(3);
			rL3DATA_CLK |= L3CLK_HIGH;
			rL3DATA_DATA |= L3DATA_HIGH;
			UDA1341Delay(3);
		}
		else
		{
			rL3DATA_CLK &= L3CLK_LOW;
			rL3DATA_DATA &= L3DATA_LOW;
			UDA1341Delay(3);
			rL3DATA_CLK |= L3CLK_HIGH;
			rL3DATA_DATA &= L3DATA_LOW;
			UDA1341Delay(3);
		}
		
		dataVal>>=1;	

	}


	rL3DATA_CLK |= L3CLK_HIGH;
	rL3DATA_MODE |= L3MODE_HIGH;
	rL3DATA_DATA &= L3DATA_LOW;
	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -