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

📄 i2s.h

📁 s3c6400 ADS下官方测试程序
💻 H
字号:
/**************************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for validating functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------------
* 
*	File Name : i2s.h
*  
*	File Description : This file defines the register access function
*						and declares prototypes of i2s funcions
*
*	Author : Sunil,Roe
*	Dept. : AP Development Team
*	Created Date : 2006/12/26
*	Version : 0.1 
* 
*	History
*	- Created(Sunil,Roe 2006/12/25)
*  
**************************************************************************************/
#ifndef __I2S_H__
#define __I2S_H__
 
  
#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>
#include "def.h"

#define I2S_NORMAL_DMA	// normal DMA or SDMA Selection.

#define ENABLE						(1)
#define DISABLE						(0)

#define ACTIVE						(1)
#define INACTIVE						(0)

#define PAUSE						(1)
#define NOPAUSE						(0)

#define FLUSH						(1)
#define NON_FLUSH					(0)

#define I2S_CONNUM					(2)

#define CHIP_ID 						(0x34)		// WM8753 Chip ID
#define WRDATA						(1)
#define POLLACK     					(2)
#define RDDATA						(3)
#define SETRDADDR					(4)

#define I2S_MODE_PLAY				0
#define I2S_MODE_RECORD_MICIn 		1
#define I2S_MODE_RECORD_LineIn		2

#define I2S_STATUS_PLAY			0
#define I2S_STATUS_RECORD			1

#define I2S_DMAC0_REC_COUNT		0x40
#define I2S_DMAC1_PLAY_COUNT		0x40
#define I2S_DMA_TRANSFER_SIZE		0xff0
#define I2S_RECORD_LENGTH			(I2S_DMA_TRANSFER_SIZE*I2S_DMAC0_REC_COUNT*4)
//#define I2S_RECORD_LENGTH			(I2S_DMA_TRANSFER_SIZE*I2S_DMAC0_REC_COUNT*4)/8

#define I2S_I2C_BUF_SIZE			0x20
#define I2S_I2C_WRDATA				(1)
#define I2S_I2C_POLLACK 			(2)
#define I2S_I2C_RDDATA				(3)
#define I2S_I2C_SETRDADDR			(4)

typedef enum I2S_Id
{
	eI2S_CON		= 0,
	eI2S_MOD		= 1,
	eI2S_FIC		= 2, 
	eI2S_PSR		= 3,
	eI2S_TXD		= 4,
	eI2S_RXD		= 5,
}
eI2S_Id;

typedef enum I2S_XFER_MODE
{
	eI2S_XFER_TX		= 0,
	eI2S_XFER_RX		= 1,
	eI2S_XFER_BOTH	= 2,
}
eI2S_XFER_MODE;

typedef enum I2S_CLOCK_POLARITY
{
	eLEFT_LOW_RIGHT_HIGH	= 0,
	eLEFT_HIGH_RIGHT_LOW	= 1,
}
eI2S_CLOCK_POLARITY;

typedef enum I2S_DATA_FORMAT
{
	eI2S_DATA_I2S		= 0,
	eI2S_DATA_MSB_JUSTIFIED		= 1,		// left-justified
	eI2S_DATA_LSB_JUSTIFIED	= 2,			// right-justified
}
eI2S_DATA_FORMAT;

typedef enum I2S_FLUSH_MODE
{
	eI2S_FLUSH_TX		= 0,
	eI2S_FLUSH_RX		= 1,
	eI2S_FLUSH_BOTH	= 2,
}
eI2S_FLUSH_MODE;

typedef enum I2S_MS_MODE
{
	eI2S_MS_MASTER_MODE_USING_PCLK		= 0,
	eI2S_MS_MASTER_MODE_USING_I2SCLK	= 1,
	eI2S_MS_SLAVE_MODE_USING_PCLK		= 2,
	eI2S_MS_SLAVE_MODE_USING_I2SCLK		= 3,	
}
eI2S_MS_MODE;

typedef enum I2S_CODEC_MODE
{
	eI2S_CODEC_MASTER_MODE	= 0,
	eI2S_CODEC_SLAVE_MODE	= 1,
}
eI2S_CODEC_MODE;

typedef enum I2S_CLK_SRC
{
	eI2S_CLK_INTERNAL		= 0,
	eI2S_CLK_EXTERNAL		= 1,
}
eI2S_CLK_SRC;

typedef struct I2S_I2CInform
{
	s32		iI2CMode;
	s32		iI2CStatus;
	s32		iI2CDataCount;
	s32		iI2CPt;
	u8		aucI2CData[I2S_I2C_BUF_SIZE];	
}
I2S_oI2CInform;

typedef struct I2S_Inform
{
	float		fI2SCodecCLK;
	u32		uRecCount;
	u32		uPlayCount;
	u32 *	puRecBuf;
	u32		uRecLength;
	u8		ucRecDone;
	u8		ucClkSrc;
	u8		ucDMANum;
	u8		ucDMACon;
	u8		ucDMATxSrc;
	u8		ucDMARxSrc;
	I2S_oI2CInform	oI2CInform;	
}
I2S_oInform;



void I2S_Init8753(u8, u8, u8, eI2S_CODEC_MODE);
/*---------------------------------- APIs of rI2SCON ---------------------------------*/
void I2S_SetI2STxerMode(u8, eI2S_XFER_MODE);
void I2S_SetDMAPause(u8, eI2S_XFER_MODE, u8);
void I2S_SetChPause(u8, eI2S_XFER_MODE, u8);
void I2S_SetDMAActive(u8, eI2S_XFER_MODE, u8);
void I2S_SetActive(u8, u8);
/*---------------------------------- APIs of rI2SMOD ---------------------------------*/
void I2S_SetCodecClkSrc(u8, eI2S_CLK_SRC);
void I2S_SetMasterSlaveMode(u8, eI2S_MS_MODE);
/*---------------------------------- APIs of rI2SFIC ---------------------------------*/
void I2S_FlushFIFO(u8, eI2S_FLUSH_MODE, u8);
void I2S_SetInterfaceMode(u8, eI2S_XFER_MODE, eI2S_CLOCK_POLARITY, eI2S_DATA_FORMAT, u8, u8, u8);
/*---------------------------------- APIs of rI2SPSR ---------------------------------*/
void I2S_SetPreScaler(u8 , u8 , u16 );
/*---------------------------------- APIs of rI2STXD ---------------------------------*/

/*---------------------------------- APIs of rI2SRXD ---------------------------------*/

/*---------------------------------- APIs of general I2S ---------------------------------*/
void I2S_SetBaseAddr(u8, u32);
u32 I2S_GetRegAddr(u8 , eI2S_Id );
u32 I2S_GetRegValue(u8 , eI2S_Id );
void I2S_SetRegValue(u8 , eI2S_Id , u32 );
/*---------------------------------- APIs of WM8753 ---------------------------------*/
void I2S_Init8753Driver(u8 , u8 , u8, eI2S_CODEC_MODE );
void I2S_WrWM8753(u8 , u8 , u8 , u16 );
u8 I2S_RdWM8753(u8 , u32 ,u32 );
#ifdef __cplusplus
}
#endif

#endif /*__I2S_H__*/



⌨️ 快捷键说明

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