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

📄 1700语音芯片spi控制程序.c

📁 1700语音芯片SPI控制程序.rar
💻 C
字号:
/*********************************************************************************
**本程序为ISD1700芯片控制程序
**这些指令经过测试,完全可用。
**由于资料的不完整,其他的一些控制指令未能写出来
*********************************************************************************/  
#include  "LPC213x.h"
#include  "config.h"

/******************************************************************************
**函数名称:delay()
**函数功能:程序所用的延时函数
**入口参数:无
**出口参数:无
******************************************************************************/
void  delay (uint32  dly)									 //寻迹使用延时
{ 	
   uint32  i;
   for(; dly>0; dly--) 
   	for(i=0; i<50000; i++);
}

/******************************************************************************
**函数名称:jp_init()
**函数功能:初始化独立键盘所用的管脚p0.00~p0.03
**入口参数:无
**出口参数:无
******************************************************************************/
void jp_init (void)
{
   PINSEL0=( PINSEL0&(~0XFF) );         //p0.00~p0.03选择GPIO功能
   IO0DIR =( IO0DIR&((~0X0F)) );		//p0.00~p0.03选择为输入口
}
/******************************************************************************
**函数名称:SPI_init()
**函数功能:初始化SPI接口,设置为主机
**入口参数:无
**出口参数:无
******************************************************************************/
void SPI_init(void)
{
   PINSEL0=(PINSEL0&(~(0XFF<<8))) | (0X15<<8); //设置引脚连接SPI
   IO0DIR=(IO0DIR|(0X01<<7));                  //p0.7为输出用于片选语音芯片开始通信
   S0SPCCR=0X52;                               //设置SPI时钟分频
   S0SPCR =(1<<3) |                            //数据在SCK的第一个时钟沿采样 
   		   (1<<4) |                            //SCK为低有效
		   (1<<5) |                            //SPI处于主模式
		   (1<<6) |							   //输出数据低位在先
		   (0<<7) ;                            //SPI中断被禁止
}      

/******************************************************************************
**函数名称:SPI_Senddata()
**函数功能:向SPI总线发送数据
**入口参数:data 待发送的数据
**出口参数:无
******************************************************************************/  
void SPI_Senddata(uint8 data)
{
   uint8 tmp;                                  //用于读取SPI状态寄存器值的变量

   S0SPDR=data;                                //总线需发送的数据   
   while( (S0SPSR&0X80)==0	);                 //等待一次数据传输结束
   tmp=S0SPSR;                                 //读取状态寄存器的值,防止写冲突
   //return(S0SPCCR);						   //赞不处理从机发送的数据
} 

/******************************************************************************
**函数名称:PU()
**函数功能:1700上电指令程序
**入口参数:无
**出口参数:无
******************************************************************************/
void PU (void)
{
   IO0CLR=1<<7;				 //SSEL0置低,开始发送数据
   SPI_Senddata(0x01);       //上电指令的数据为:(命令字节 0x01)
   SPI_Senddata(0x00);		 //				   +(数据字节 0x00)
   IO0SET=1<<7;				 //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:STOP()
**函数功能:停止语音芯片当前操作
**入口参数:无
**出口参数:无
******************************************************************************/
void STOP (void)
{
   IO0CLR=1<<7;				 //SSEL0置低,开始发送数据
   SPI_Senddata(0x02);       //指令的数据为:(命令字节 0x02)
   SPI_Senddata(0x00);		 //			   +(数据字节 0x00)
   IO0SET=1<<7;				 //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:RESET()
**函数功能:芯片复位
**入口参数:无
**出口参数:无
******************************************************************************/
void RESET (void)
{
   IO0CLR=1<<7;				 //SSEL0置低,开始发送数据
   SPI_Senddata(0x03);       //指令的数据为:(命令字节 0x03)
   SPI_Senddata(0x00);		 //			   +(数据字节 0x00)
   IO0SET=1<<7;				 //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:PD()
**函数功能:1700下电指令程序
**入口参数:无
**出口参数:无
******************************************************************************/
void PD (void)
{
   IO0CLR=1<<7;				 //SSEL0置低,开始发送数据
   SPI_Senddata(0x07);       //上电指令的数据为:(命令字节 0x07)
   SPI_Senddata(0x00);		 //				   +(数据字节 0x00)
   IO0SET=1<<7;				 //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:CLR_INT()
**函数功能:清除EOM标志和中断信号
**入口参数:无
**出口参数:无
******************************************************************************/
void CLR_INT (void)
{
   IO0CLR=1<<7;				 //SSEL0置低,开始发送数据
   SPI_Senddata(0x14);       //清除标志指令的数据为:(命令字节 0x14)
   SPI_Senddata(0x00);		 //                    +(数据字节 0x00)
   IO0SET=1<<7;				 //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:PLAY()
**函数功能:从当前地址放音至EOM标志
**入口参数:无
**出口参数:无
******************************************************************************/
void PLAY (void)
{
   IO0CLR=1<<7;				 //SSEL0置低,开始发送数据
   SPI_Senddata(0x40);       //指令的数据为:(命令字节 0x40)
   SPI_Senddata(0x00);		 //			   +(数据字节 0x00)
   IO0SET=1<<7;				 //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:ERASE()
**函数功能:擦除当前段语音
**入口参数:无
**出口参数:无
******************************************************************************/
void ERASE (void)
{
   IO0CLR=1<<7;				 //SSEL0置低,开始发送数据
   SPI_Senddata(0x42);       //指令的数据为:(命令字节 0x42)
   SPI_Senddata(0x00);		 //			   +(数据字节 0x00)
   IO0SET=1<<7;				 //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:G_ERASE()
**函数功能:擦除芯片全部语音
**入口参数:无
**出口参数:无
******************************************************************************/
void G_ERASE (void)
{
   IO0CLR=1<<7;				 //SSEL0置低,开始发送数据
   SPI_Senddata(0x43);       //指令的数据为:(命令字节 0x43)
   SPI_Senddata(0x00);		 //			   +(数据字节 0x00)
   IO0SET=1<<7;				 //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:FWD()
**函数功能:将放音指针指向下一段语音起始地址
**入口参数:无
**出口参数:无
******************************************************************************/
void FWD(void)
{
   IO0CLR=1<<7;				 //SSEL0置低,开始发送数据
   SPI_Senddata(0x48);       //指令的数据为:(命令字节 0x48)
   SPI_Senddata(0x00);		 //			   +(数据字节 0x00)
   IO0SET=1<<7;				 //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:SET_PLAY()        
**函数功能:从起始地址放音到结束地址
**入口参数:start_address:放音的开始地址,end_address:放音结束地址
**出口参数:无
******************************************************************************/
void SET_PLAY(uint8 start_address,uint8 end_address )
{
   IO0CLR=1<<7;				         //SSEL0置低,开始发送数据
   SPI_Senddata(0x90);               //指令的数据为:(命令字节 0x90)
   SPI_Senddata(0x00);	             //			  +(数据字节 0x00)
   SPI_Senddata(start_address); 	 //            +(起始地址低8位 S7~S0)
   SPI_Senddata(0x00);               //            +(起始地址高8位 00000 s10~s8)
   SPI_Senddata(end_address);		 //            +(结束地址低8位 E7~E0)
   SPI_Senddata(0x00);		         //            +(结束地址高8位 00000 E10~E8)
   SPI_Senddata(0x00);		         //            +(结束地址值    0x00)
   IO0SET=1<<7;				         //SSEL0置高,结束发送数据

}

/******************************************************************************
**函数名称:WR_APC2()
**函数功能:写数据D11~D0到APC寄存器,并由D2~D0位控制音量
**入口参数:data_low,data_high: 要写入APC寄存器的数据
**出口参数:无
******************************************************************************/
void WR_APC2 (uint8 data_low,uint8 data_high)
{
   IO0CLR=1<<7;				     //SSEL0置低,开始发送数据
   SPI_Senddata(0x65);           //指令的数据为:(命令字节 0x65)
   SPI_Senddata(data_low);		 //			   +(数据字节 D7~D0)
   SPI_Senddata(data_high);		 //			   +(数据字节 0000 D11~D8)
   IO0SET=1<<7;				     //SSEL0置高,结束发送数据
}

/******************************************************************************
**函数名称:main()
**函数功能:控制语音芯片
**入口参数:无
**出口参数:无
******************************************************************************/  
void main (void)
{
   uint8 yinl=0x0;
   jp_init();                  //键盘接口初始化
   SPI_init();                 //初始化和语音芯片通信的SPI口
   PU();                       //芯片上电
   delay(1);                
   //CLR_INT();                  //清除EOM标志和中断信号
   delay(1);
   while(1)
   {
	  SET_PLAY(0x10,0x5f);      //读一地址段录音,仅供测试用
	  delay(10000);
   }
}

⌨️ 快捷键说明

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