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

📄 i2s.c

📁 可以在ARM 架构下运行的的 DOS (和MS-DOS兼容),非常难得的一个源码
💻 C
字号:
/*************************************Seekfor Embedded DOS v1.0***************************************************
 ******                   ***          *****                                    ******     ****     ****** v1.0
**   **                    **         **  **                                     **  **   **  **   **   ** 
**   **                    **         **                                         **   ** **    **  **   ** 
**                         **         **                                         **   ** **    **  **      
 **       *****    *****   ** ****  *******   *****  ********            *****   **   ** **    **   **     
  ***    **   **  **   **  ** **      **     **   **   *** **           **   **  **   ** **    **    ***   
    **   *******  *******  ****       **     **   **   **               *******  **   ** **    **      **  
     **  **       **       *****      **     **   **   **               **       **   ** **    **       ** 
**   **  **       **       ** **      **     **   **   **               **       **   ** **    **  **   ** 
**   **  **   **  **   **  **  **     **     **   **   **               **   **  **  **   **  **   **   ** 
******    *****    *****  ********  ******    *****  ******              *****  ******     ****    ******  
<1)基本描述
	Seekfor Embedded DOS v1.0是嵌入式的一个类DOS操作系统,支持FAT16/FAT32.
<2)文件描述
	文件名:i2s.c
	功能:I2S驱动
<3>如需更新版本软件,请联系:
	QQ:82054357
	Mail:Seek_for@163.com
	MSN:sfrad32@hotmail.com
**************************************************************************************************************/
#ifndef __I2S_C__
#define __I2S_C__
#include "dos.h"
/*默认的设置是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


⌨️ 快捷键说明

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