基于PIC16F886 的ISD2100语音IC的驱动代码
发布时间:2011/8/8 18:01:00 来源:
#include <stdio.h>
#include <pic.h>
#include<time.h>
#include "usart.h"
__CONFIG(0x3FD4); //看门狗关,内部RC振荡,GO0/GP1做I/O,不加密,MCLR脚做复位
#define _XTAL_FREQ 8000000 /* A simple demonstration of serial communications which
* incorporates the on-board hardware USART of the Microchip PIC16Fxxx series of devices.
* 空闲时保证sck高电平
* 上升沿采样数据
* 公司 大联大集团品佳集团 王鹤
* 时间 20100829
* UART 硬件 SPI采用软件,没有SPI地址
* 后续考虑 软件UART*/
//此处CS LOW有效
#define TRUE 0
#define FALSE 1
#define ISD2100_CS RC2
#define ISD2100_CS_TRIS TRISC2
#define ISD2100_clk RC3
#define ISD2100_clk_TRIS TRISC3
#define ISD2100_DO RC5
#define ISD2100_DO_TRIS TRISC5
#define ISD2100_SI RC4
#define ISD2100_SI_TRIS TRISC4
#define ISD2100_INTB RB0
#define ISD2100_INTB_TRIS TRISB0
#define ISD2100_RST RB1
#define ISD2100_RDY RB2
#define ISD2100_RDY_TRIS TRISB2
unsigned int Rdata ;
unsigned char RdataBuf[10] ;
unsigned char SenddataBuf[10] ;
void Send8BitData(unsigned char cmd1)
{
unsigned char n=8;
ISD2100_CS = TRUE;
for (n = 0; n<8 ;n++)
{
ISD2100_clk = 0;
if((cmd1 & 0x80) == 0x80)
ISD2100_DO = 1 ;
else ISD2100_DO = 0 ;
__delay_us(1);
ISD2100_clk = 1;
__delay_us(1);
cmd1=cmd1<<1;
}
ISD2100_CS = FALSE;
}
void SendData(unsigned char SendCount)
{
unsigned char n,m;
//ISD2100_clk = 1;
for(m=0;m<SendCount;m++)
{ //while(!ISD2100_RDY);
for (n = 0; n<8 ;n++)
{ ISD2100_clk = 0;
if((SenddataBuf[m] & 0x80) == 0x80)
ISD2100_DO = 1 ;
else ISD2100_DO = 0 ;
__delay_us(1);
ISD2100_clk = 1;
__delay_us(1);
SenddataBuf[m]=SenddataBuf[m]<<1;
}
}
ISD2100_clk = 1;
}
/***************************************
发送16bit给spiEEPROM数据程序
如发送0x1234 给eeprom
调用格式为: Send16BitData(0x1234);
****************************************/
void Send16BitData(unsig the USART - settings defined in usart.h
// Output a message to prompt the user for a keypress
printf("\rPress a key and I will echo it back:\n");
while(1){
input = getch(); // read a response from the user
printf("\rI detected [%c]",input); // echo it back
if(input == 'q')
{
Send8BitData(0x10);
printf("P_Up\n"); // echo it back
}
if(input == 'w')
{
Send8BitData(0x12);
printf("P_Down\n"); // echo it back
}
if(input == 'e')
{
SenddataBuf[0]=0x14;
SendData(1);
printf("RESET\n");//Set8BitData(0x14); // echo it back
}
if(input == 'r' | input == 'f')
{
ISD2100_clk = 1;
ISD2100_CS = TRUE;
SenddataBuf[0]=0xa4;
SenddataBuf[1]=0x00;
if(input == 'r')
SenddataBuf[2]=i++;
if(input == 'f')
SenddataBuf[2]=i--;
SenddataBuf[3]=0x00;
SenddataBuf[4]=0x04;
SendData(5);
ISD2100_CS = FALSE;
printf("VP index = %c%c\n",i/10+48,i%10+48); // echo it back
}
if(input == '1')//read device 两种方法都通过测试
{
ISD2100_clk = 1;
ISD2100_CS = TRUE;
READ_ID(); //ok 方法1
// Send8BitData(0x48); //read ID 方法2
// ReceiveData(4) ; //read ID 方法2
ISD2100_CS = FALSE;
printf("Device ID=%x%x-%x%x-%x%x-%x%x\n", RdataBuf[0]/16,RdataBuf[0]%16,
RdataBuf[1]/16,RdataBuf[1]%16,
RdataBuf[2]/16,RdataBuf[2]%16,
RdataBuf[3]/16,RdataBuf[3]%16);
}
}
}
以上代码经测试也可用于如 ISD3800/ISD3900等数字式 语音录放IC
|
|
|
您可能对以下产品感兴趣 |
|
|
|
产品型号 |
功能介绍 |
兼容型号 |
封装形式 |
工作电压 |
备注 |
|
|