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

📄 375interface.c

📁 mega128+VS1003做的mp3的程序 可以用WINAVR编译
💻 C
字号:
#include <iom64v.h>
#include <macros.h>
#define  UINT8 unsigned char
/******************************************************************************/

#define	 USED_BUS		//屏闭后使用I/O模拟总线操作

#ifdef USED_BUS
#define CH375_CMD_PORT_ADDR 0xfe00		 //命令口
#define CH375_DAT_PORT_ADDR	0xfc00		 //数据口
#endif
#define  CH375_INT BIT(1)				 //CH375联络信号



#ifndef USED_BUS
#define  CH375_CS  BIT(0)
#define  CH375_A0  BIT(1)
#define  CH375_RD  BIT(1)
#define  CH375_WR  BIT(0)
void mDelay1uS(void)  /* 至少延时1uS,根据单片机主频调整 */
{
	//UINT8	i;
	//for ( i = 1; i != 0; i -- );
	NOP();
}
#endif

void CH375_PORT_INIT( )  /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */
{
 	#ifdef USED_BUS
	Print_str("Init CH375 used External bus...\r\n");
	#else 
	Print_str("Init CH375 used I/O bus...\r\n");
	DDRA = 0x00;  /* 设置8位并口为输入 */
	PORTC=CH375_CS; //设置CS,WR,RD默认为高电平 0x08为3310引脚*/
	DDRC =CH375_CS|CH375_A0;  /* 设置CS,WR,RD,A0为输出,设置INT#为输入 */
	PORTG = CH375_WR|CH375_RD;
	DDRG  = CH375_WR|CH375_RD;
	#endif
	
	DDRD &= ~(CH375_INT);
}

void xWriteCH375Cmd( UINT8 mCmd )		/* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */
{
	#ifdef USED_BUS
	*(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; /*通过并口直接读写CH375而非普通I/O模拟 */
	NOP();  /* 至少延时1uS */
	#else
	PORTC |=CH375_A0;// 0x08;  /* 输出A0=1 */
	PORTA = mCmd;  /* 向CH375的并口输出数据 */
	DDRA = 0xFF;  /* 并口D0-D7输出 */
	PORTC &=~(CH375_CS);// 0xF9;  /* 输出有效写控制信号, 写CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */
	PORTG &=~(CH375_WR);
	DDRA = 0xFF;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
	PORTC |= CH375_CS;// 0x07;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */
	PORTG |= CH375_WR|CH375_RD;
	DDRA = 0x00;  /* 禁止数据输出 */
	PORTC &= ~(CH375_A0);  /* 输出A0=0; 可选操作 */
	NOP();//mDelay1uS( ); mDelay1uS( );  /* 至少延时2uS */
	#endif
}

void xWriteCH375Data( UINT8 mData )		/* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */
{
 	#ifdef USED_BUS
    *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; /* 通过并口直接读写CH375而非普通I/O模拟 */
	NOP();  /* 至少延时1uS */
	#else
	PORTA = mData;  /* 向CH375的并口输出数据 */
	DDRA = 0xFF;  /* 并口D0-D7输出 */
	PORTC &= ~(CH375_A0|CH375_CS);//0xF1;  /* 输出有效写控制信号, 写CH375芯片的数据端口, A0=0; CS=0; WR=0; RD=1; */
	PORTG &= ~(CH375_WR);
	DDRA = 0xFF;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
	PORTC |= CH375_CS;//0x07;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */
	PORTG |= CH375_RD|CH375_WR;
	DDRA = 0x00;  /* 禁止数据输出 */
	NOP();//mDelay1uS( );  /* 至少延时1.2uS */
	#endif
}

UINT8 xReadCH375Data( void )			/* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */
{
	UINT8	mData;
	#ifdef USED_BUS
	NOP();  /* 至少延时1uS */
	mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR;  /*通过并口直接读写CH375而非普通I/O模拟 */
	return( mData );
	#else
	NOP();//mDelay1uS( );  /* 至少延时1.2uS */
	DDRA = 0x00;  /* 数据输入 */
	PORTC &= ~(CH375_A0|CH375_CS);//0xF2;  /* 输出有效读控制信号, 读CH375芯片的数据端口, A0=0; CS=0; WR=1; RD=0; */
	PORTG &= ~(CH375_RD);
	DDRA = 0x00;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
	mData = PINA;  /* 从CH375的并口PA输入数据 */
	PORTC |= CH375_CS;//0x07;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */
	PORTG |= CH375_RD|CH375_WR;
	return( mData );
	#endif
}

⌨️ 快捷键说明

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