📄 i2s.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 + -