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

📄 i2c.c

📁 DSP 5402 声音压缩 Demo板测试程序
💻 C
字号:

#include "datadef.h"		//定义数据结构
#include "54regs.h"			//54寄存器定义
/***************************************************************************/
/*                                                                         */
/*    SEND_DATA			                                                   */
/*                                                                         */
/*        										                              */
/*                                                                         */
/***************************************************************************/


struct VZ_DATA*		vz_rom_data	=(struct VZ_DATA*)0x350;

void set_sda(void)
{
	*MCBSP0_SPSA=MCBSP_PCR;		
	*MCBSP0_SPSD=*MCBSP0_SPSD|0x8;

}
void reset_sda(void)
{
	*MCBSP0_SPSA=MCBSP_PCR;		
	*MCBSP0_SPSD=*MCBSP0_SPSD&0xfff7;

}
void set_sclk(void)
{
	*MCBSP0_SPSA=MCBSP_PCR;		
	*MCBSP0_SPSD=*MCBSP0_SPSD|0x2;

}
void reset_sclk(void)
{
	*MCBSP0_SPSA=MCBSP_PCR;		
	*MCBSP0_SPSD=*MCBSP0_SPSD&0xfffd;

}


int read_sda(void)
{
	int xc;
	*MCBSP0_SPSA=MCBSP_PCR;

	xc=*MCBSP0_SPSD&0x8;
	if (xc)
		{
			
			return (1);
		}
	else
		{
			
			return (0);
		}
	
}


void START_I2C(void)
{    
	set_sda();
	delay(100);
	set_sclk();
	delay(100);
	reset_sda();
	delay(100);
	reset_sclk();
	delay(100);
}

void STOP_I2C(void)
{
	reset_sda();
	delay(100);
	set_sclk();
	delay(100);
	set_sda();
	delay(100);
}
              
void WRITE_BYTE(int byte)
{
	int nu=8;
	while (nu)
	{
	reset_sclk();
	delay(100);
	if (byte&0x8000)
		set_sda();
	else 
		reset_sda();
	byte<<=1;
	delay(100);
	set_sclk();
	delay(100);
	nu--;
	}
	reset_sclk();
	delay(100);
}

int READ_BYTE(void)
{
	int num=8,byte=0,c;
	reset_sclk();
	*MCBSP0_SPSD=*MCBSP0_SPSD&0xf7ff;
	delay(100);

	while (num)
	{
		delay(100);
		set_sclk();
		delay(100);
		c=read_sda();
		byte+=c;
		byte<<=1;
		reset_sclk();
		num--;
	}
	byte>>=1;
	*MCBSP0_SPSD=*MCBSP0_SPSD|0x800;
	delay(100);
	return(byte);
}

           
void CLOCK(void)
{ 
	int err;
	*MCBSP0_SPSD=*MCBSP0_SPSD&0xf7ff;
	delay(10);
	set_sclk();
	
	delay(100);
	err=1;
	while (read_sda()&&err)
	{
		err--;
	}
	delay(100);

	reset_sclk();
	*MCBSP0_SPSD=*MCBSP0_SPSD|0x800;
	delay(100);
}


int read_e2rom(int add)
{
	int byte;
	START_I2C();
	WRITE_BYTE(0x0ae00);
	CLOCK();
	WRITE_BYTE(0x0000);
	CLOCK();
	WRITE_BYTE(add);
	CLOCK();
	START_I2C();
	WRITE_BYTE(0x0af00);
	CLOCK();
	byte=READ_BYTE();
	STOP_I2C();
	return(byte);
}
	
int read16_e2rom(int add)
{
	int byte;
	START_I2C();
	WRITE_BYTE(0x0ae00);
	CLOCK();
	WRITE_BYTE(0x0000);
	CLOCK();
	WRITE_BYTE(add);
	CLOCK();
	START_I2C();
	WRITE_BYTE(0x0af00);
	CLOCK();
	byte=READ_BYTE();
	STOP_I2C();
	delay(100);
	long_delay(200);
	
	START_I2C();
	WRITE_BYTE(0x0ae00);
	CLOCK();
	WRITE_BYTE(0x0000);
	CLOCK();
	WRITE_BYTE(add+0x100);
	CLOCK();
	START_I2C();
	WRITE_BYTE(0x0af00);
	CLOCK();
	byte=byte<<8;
	byte+=READ_BYTE();
	STOP_I2C();
	return(byte);
}


void write16_e2rom(int add,int byte)
{
	int c;
	c=byte;
	byte&=0x0ff00;
	START_I2C();
	WRITE_BYTE(0x0ae00);
	CLOCK();
	WRITE_BYTE(0x0000);
	CLOCK();
    WRITE_BYTE(add);
	CLOCK();       
	WRITE_BYTE(byte);
	CLOCK();
	STOP_I2C();
	long_delay(200);
	byte=c;
	byte&=0x0ff;
	byte=byte<<8;
	START_I2C();
	WRITE_BYTE(0x0ae00);
	CLOCK();
	WRITE_BYTE(0x0000);
	CLOCK();
    WRITE_BYTE(add+0x100);
	CLOCK();       
	WRITE_BYTE(byte);
	CLOCK();
	STOP_I2C();
	long_delay(200);
}



void ccr_w(int add,int bt)
{
	START_I2C();
	       
    WRITE_BYTE(0xde00);
    CLOCK();
    
    WRITE_BYTE(0x0000);
    CLOCK();
	
	WRITE_BYTE(add);
    CLOCK();

	WRITE_BYTE(bt);
    CLOCK();
    
    STOP_I2C();
    long_delay(200);
}       
             
void I2C_INIT(void)
{
	set_sclk();
	delay(100);
	set_sda();
	delay(100);
}

void read_vz(void)
{
	*MCBSP0_SPSA=MCBSP_SPCR1;	/*配置MCBSP0为通用IO方式*/
	*MCBSP0_SPSD=0x0;
	*MCBSP0_SPSA=MCBSP_SPCR2;
	*MCBSP0_SPSD=0x0;
	
	*MCBSP0_SPSA=MCBSP_PCR;
	*MCBSP0_SPSD=0x2a00;
	
	I2C_INIT();
	ccr_w(0x3f00,0x0200);

	ccr_w(0x3f00,0x0600);

	(*vz_rom_data).U=read16_e2rom(0x8000);
	(*vz_rom_data).change=read16_e2rom(0x8200);
	(*vz_rom_data).TYPE_IDEN=read16_e2rom(0x8400);
	(*vz_rom_data).D_U[0]=read16_e2rom(0x8600);
	(*vz_rom_data).D_U[1]=read16_e2rom(0x8800);
	(*vz_rom_data).D_U[2]=read16_e2rom(0x8a00);
	(*vz_rom_data).D_U[3]=read16_e2rom(0x8c00);
	(*vz_rom_data).D_I[0]=read16_e2rom(0x8e00);
	(*vz_rom_data).D_I[1]=read16_e2rom(0x9000);
	(*vz_rom_data).D_I[2]=read16_e2rom(0x9200);
	(*vz_rom_data).A_U[0]=read16_e2rom(0x9400);
	(*vz_rom_data).A_U[1]=read16_e2rom(0x9600);
	(*vz_rom_data).A_U[2]=read16_e2rom(0x9800);
	(*vz_rom_data).A_U[3]=read16_e2rom(0x9a00);
	(*vz_rom_data).A_I[0]=read16_e2rom(0x9c00);
	(*vz_rom_data).A_I[1]=read16_e2rom(0x9e00);
	(*vz_rom_data).A_I[2]=read16_e2rom(0xa000);

}


void write_vz(void)
{
	*MCBSP0_SPSA=MCBSP_SPCR1;	/*配置MCBSP0为通用IO方式*/
	*MCBSP0_SPSD=0x0;
	*MCBSP0_SPSA=MCBSP_SPCR2;
	*MCBSP0_SPSD=0x0;
	
	*MCBSP0_SPSA=MCBSP_PCR;
	*MCBSP0_SPSD=0x2a00;
	
	I2C_INIT();
	ccr_w(0x3f00,0x0200);

	ccr_w(0x3f00,0x0600);

	write16_e2rom(0x8000,(*vz_rom_data).U);
	long_delay(200);
	write16_e2rom(0x8200,(*vz_rom_data).change);
	long_delay(200);
	write16_e2rom(0x8400,(*vz_rom_data).TYPE_IDEN);
	long_delay(200);
	write16_e2rom(0x8600,(*vz_rom_data).D_U[0]);
	long_delay(200);
	write16_e2rom(0x8800,(*vz_rom_data).D_U[1]);
	long_delay(200);
	write16_e2rom(0x8a00,(*vz_rom_data).D_U[2]);
	long_delay(200);
	write16_e2rom(0x8c00,(*vz_rom_data).D_U[3]);
	long_delay(200);
	write16_e2rom(0x8e00,(*vz_rom_data).D_I[0]);
	long_delay(200);
	write16_e2rom(0x9000,(*vz_rom_data).D_I[1]);
	long_delay(200);
	write16_e2rom(0x9200,(*vz_rom_data).D_I[2]);
	long_delay(200);
	write16_e2rom(0x9400,(*vz_rom_data).A_U[0]);
	long_delay(200);
	write16_e2rom(0x9600,(*vz_rom_data).A_U[1]);
	long_delay(200);
	write16_e2rom(0x9800,(*vz_rom_data).A_U[2]);
	long_delay(200);
	write16_e2rom(0x9a00,(*vz_rom_data).A_U[3]);
	long_delay(200);
	write16_e2rom(0x9c00,(*vz_rom_data).A_I[0]);
	long_delay(200);
	write16_e2rom(0x9e00,(*vz_rom_data).A_I[1]);
	long_delay(200);
	write16_e2rom(0xa000,(*vz_rom_data).A_I[2]);

}

⌨️ 快捷键说明

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