風淋室語音系統輔助程序
前文學習了風淋室語音系統芯片的主要構成及特點,本文重點在于了解風淋室主意系統的輔助軟件管理程序,也就是類似編程類的編碼,通過此程序來實現語音系統的智能化服務。
摘取一小段講述關于風淋室語音系統的芯片說明:
風淋室語音系統芯片一般采用ISD1700系列芯片,而此種芯片一般是Winbond推出的單片優質語音錄放電路,該芯片提供多項新功能,包括內置專利的多信息管理系統,新信息提示(vAlert),雙運作模式(獨立&嵌入式),以及可定制的信息操作指示音效。
#include
//************************宏定義***********************************//
#define uchar unsigned char
#define uint unsigned int
//**************ISD1700 狀態寄存器及各個標志位定義*****************//
unsigned char bdata SR0_L; // SR0 寄存器
unsigned char bdata SR0_H;
unsigned char bdata SR1; // SR1 寄存器
unsigned char APCL=0,APCH=0; // APC 寄存器
unsigned char PlayAddL=0,PlayAddH=0; // 放音指針低位,高位
unsigned char RecAddL=0,RecAddH=0; // 錄音指針低位,高位
sbit CMD=SR0_L^0; // SPI 指令錯誤標志位
sbit FULL=SR0_L^1; // 芯片存儲空間滿標志
sbit PU=SR0_L^2; // 上電標志位
sbit EOM=SR0_L^3; // EOM 標志位
sbit INTT=SR0_L^4; // 操作完成標志位
sbit RDY=SR1^0; // 準備接收指令標志位
sbit ERASE=SR1^1; // 擦除標志位
sbit PLAY=SR1^2; // 播放標志位
sbit REC=SR1^1; // 錄音標志位
/********************************************************************
* ISD1700 SPI 指令函數聲明 *
*********************************************************************/
unsigned char ISD_SendData(unsigned char dat);
void ISD_PU(void);
void ISD_Rd_Status(void);
void ISD_WR_APC2(unsigned char apcdatl,apcdath);
void ISD_SET_PLAY (unsigned char Saddl,Saddh,Eaddl,Eaddh);
void zhuanhuan(uchar k);
//**********************端口定義**********************************//
sbit SS=P3^3;
sbit SCK=P3^2;
sbit MOSI=P3^1;
sbit MISO=P3^0;
//********************標志位定義***********************************//
uint aa=100,bb=100;
//********************其它函數聲明********************************//
void Cpu_Init(void); // 系統初始化
void ISD_Init(void); // ISD1700 初始化
void delay(unsigned int t); // ms 級延遲
/*************************** 主函數 *******************************/
/*****************************************************************
函數原型: void IniCpuIO()
功能: CPU 及系統變量初始化
*******************************************************************/
void Cpu_Init(void)
{
P3=0x
}
/*******************************************************************
函數原型: void ISD_Init(void);
功能: 系統初始化。
******************************************************************/
void ISD_Init(void)
{
uchar i=2;
SS=1;
SCK=1;
MOSI=0;
do
{
ISD_PU(); // 上電
delay(50);
ISD_Rd_Status(); // 讀取狀態
}while(CMD||(!PU)); // if(CMD_Err==1)||(PU!=1))則再次發送上電指令
ISD_WR_APC2(0x40,0x04); // 將0x0440(芯片出廠默認值,可根據需要更改數值)寫入APC 寄存器
do
{
ISD_Rd_Status(); // 等待RDY 位置1
}while(RDY==0);
do
{
delay(300);
delay(300);
i--;
}while(i>0);
delay(300);
}
void zhuanhuan(uchar k)
{
do{ISD_Rd_Status();}while(RDY==0);delay(12);
switch(k)
{
case 1:ISD_SET_PLAY(0x10,0,0x
case 2:ISD_SET_PLAY(0x2b,0,0x
}
}
/*********************************************************************
* 函數原型: unsigned char ISD_SendData(unsigned char dat);
* 功 能: 向CPU 發送&讀回數據
**********************************************************************/
unsigned char ISD_SendData(unsigned char dat) // 保證外部SS=1
{
unsigned char i,j,BUF_ISD=dat;
SCK=1; // 初始條件
SS=0; // 使能ISD1700 的SPI
for(j=4;j>0;j--) // 延遲
{;}
for(i=0;i<8;i++) // 發送&接收8 位數據
{
SCK=0;
for(j=2;j>0;j--) // 延遲
{;}
if(BUF_ISD&0x01) // 將BUF_ISD 中的最低位數據發送到MOSI 端口
MOSI=1;
else
MOSI=0;
BUF_ISD>>=1; // BUF_ISD 右移一位
if(MISO) // 逐個接收MISO 端口的數據。將數據存在BUF_ISD的最高位
BUF_ISD|=0x80;
SCK=1;
for(j=6;j>0;j--) // 延遲
{;}
}
MOSI=0;
return(BUF_ISD); //返回接收到的數據
}
/*********************************************************************
* 函數原型: void ISD_PU(void); 發送指令后需要延遲50ms
* 功 能: 上電
*********************************************************************/
void ISD_PU(void)
{
ISD_SendData(0x01); // 發送PU 命令
ISD_SendData(0x00);
SS=1;
}
/*********************************************************************
* 函數原型: void ISD_Rd_Status(void);
* 功 能: 讀取狀態寄存器內容
**********************************************************************/
void ISD_Rd_Status(void)
{ unsigned char i ;
ISD_SendData(0x05); // 發送
ISD_SendData(0x00);
ISD_SendData(0x00);
SS=1;
for(i=2;i>0;i--) //延遲
{;}
SR0_L=ISD_SendData(0x05); // 從MISO 讀出狀態
SR0_H=ISD_SendData(0x00);
SR1=ISD_SendData(0x00);
SS=1;
}
/********************************************************************
* 函數原型: void ISD_WR_APC2(unsigned char apcdatl,apcdath);
* 功 能: 設置APC2
*********************************************************************/
void ISD_WR_APC2(unsigned char apcdatl,apcdath)
{
ISD_SendData(0x65);
ISD_SendData(apcdatl); //發送低8 位數據
ISD_SendData(apcdath); //發送高8 位數據
SS=1;
}
/******************************************************************
* 函數原型: void ISD_SET_PLAY( unsigned char Saddl,Saddh,Eaddl,Eaddh)
* 功 能: 定點播放
*
*******************************************************************/
void ISD_SET_PLAY( unsigned char Saddl,Saddh,Eaddl,Eaddh)
{
ISD_SendData(0x80);
ISD_SendData(0x00);
ISD_SendData(Saddl); // 開始地址低8 位
ISD_SendData(Saddh); // 開始地址高8 位
ISD_SendData(Eaddl); // 結束地址低8 位
ISD_SendData(Eaddh); // 結束地址高8 位
ISD_SendData(0x00);
SS=1;
}
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i
for(j=0;j<110;j++);
}
文章來源:http://www.klcfilter.com/ TEL:蘇小姐-13570963006 黃生-13570963007