?? i2s.c
字號:
/*************************************Seekfor Embedded DOS v1.0***************************************************
****** *** ***** ****** **** ****** v1.0
** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** **
** ***** ***** ** **** ******* ***** ******** ***** ** ** ** ** **
*** ** ** ** ** ** ** ** ** ** *** ** ** ** ** ** ** ** ***
** ******* ******* **** ** ** ** ** ******* ** ** ** ** **
** ** ** ***** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
****** ***** ***** ******** ****** ***** ****** ***** ****** **** ******
<1)基本描述
Seekfor Embedded DOS v1.0是嵌入式的一個類DOS操作系統(tǒng),支持FAT16/FAT32.
<2)文件描述
文件名:i2s.c
功能:I2S驅(qū)動
<3>如需更新版本軟件,請聯(lián)系:
QQ:82054357
Mail:Seek_for@163.com
MSN:sfrad32@hotmail.com
**************************************************************************************************************/
#ifndef __I2S_C__
#define __I2S_C__
#include "dos.h"
/*默認(rèn)的設(shè)置是16 bits,44.1KHZ,384fs,32 fs bit clock*/
#if(SUPPORT_I2S==1)
#define MODE_LOW() rGPBDAT&=~0x04
#define MODE_HIGH() rGPBDAT|=0x04
#define CLK_LOW() rGPBDAT&=~0x10
#define CLK_HIGH() rGPBDAT|=0x10
#define DATA_LOW() rGPBDAT&=~0x08
#define DATA_HIGH() rGPBDAT|=0x08
#define ADDR_DATA0 0x14
#define ADDR_DATA1 0x15
#define ADDR_STATUS 0x16
static void delay()
{
int i;
for(i=0;i<100;i++);
}
static void wr_addr(unsigned char addr)
{
int i;
MODE_LOW();
for(i=0;i<8;i++)
{
CLK_HIGH();
if(addr&0x01)
DATA_HIGH();
else
DATA_LOW();
CLK_LOW();
addr>>=1;
delay();
}
CLK_HIGH();
MODE_HIGH();
}
static void wr_data(unsigned char data)
{
int i;
MODE_LOW();
delay();
MODE_HIGH();
for(i=0;i<8;i++)
{
CLK_HIGH();
if(data&0x01)
DATA_HIGH();
else
DATA_LOW();
CLK_LOW();
delay();
}
CLK_HIGH();
}
void I2S_init(unsigned char status)
{
/*ud1341 init*/
rGPBCON&=~((3<<8)|(3<<6)|(3<<4));
rGPBCON|=(2<<8)|(2<<6)|(2<<4);
wr_addr(ADDR_STATUS);
wr_data(0x51);/*I2S格式,384fs,Reset,DC filtering*/
wr_data(0x80+status);/*output 0db,input 0 db,polarity normal,single speed,ADC&DAC on*/
/*2410 init*/
rIISMOD=0x75;/*Master mode,RX+TX,I2S,16 bits,384fs,32fs bit clock*/
rIISPSR=(0x02<<5)|0x02;
rIISCON=0x0f;
rIISFCON=0x3000;
}
int I2S_Write(void*buff,int len)
{
unsigned short*ptr=(unsigned short*)buff;
while(len)
{
while(rIISCON&0x40);
rIISFIFO=*ptr++;
if(len>=2) len-=2;
else break;
}
return 0;
}
#endif
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -