单片机学习小组
直播中

陈桂英

7年用户 187经验值
私信 关注

isd1760语音芯片初始化失败

void ISD_Ready(void)   //        在SPI命令输入到1760前  应保持的状态
{
        SS=1;
        SCLK=1;
        MOSI=0;
}
void ISD_UP(void)        //上电
{
    SS=0;                   //为低是选中芯片并开启SPI接口
        ISD_senDdat(0x01);
        ISD_senDdat(0x00);
        SS=1;
        delay(50);                 //空闲时拉高
}
void ISD_RESET(void)  //芯片复位
{
        SS=0;
        ISD_senDdat(0x03);
        ISD_senDdat(0x00);
        SS=1;
        delay(50);
}
void ISD_RD_STATUS(void)  //返回状态寄存器的内容
{
        SS=0;
        ISD_senDdat(0x05);
        ISD_senDdat(0x00);
        ISD_senDdat(0x00);
        delay(10);
        SR0_L=ISD_senDdat(0x05);
        SR0_H=ISD_senDdat(0x00);
        SR1=ISD_senDdat(0x00);
        SS=1;
        delay(50);
}
uchar ISD_senDdat(uchar dat)
{
        uint i;
        uchar ISD_BUF;
        ISD_Ready();
        ISD_BUF=dat;        //需要发送给ISD1760的数据
        SS=0;
        for(i=0;i<8;i++)
        {
                 SCLK=0;
                if((ISD_BUF&0x01)==1)
                {
                        MOSI=1;                                 //逐位发送,低位先发送
                }
                else
                {
                        MOSI=0;        
                }
                ISD_BUF=ISD_BUF>>1;                 //发送好一位之后右移一位
                if(MISO)                                   //同时接受返回的数据,返回数据高位先移出
                {
                         ISD_BUF=ISD_BUF|0x80;        
                }
                SCLK=1;
                delay(6);
        }
        MOSI=0;
        return(ISD_BUF);         //返回给MCU
}
void ISD_Init(void)
{
        uchar SBUF;
        ISD_Ready();
        SR0_L=0;
        SR0_H=0;
        SR1=0;
        PLAYADD_L=0;                //初始化寄存器的值
        PLAYADD_H=0;
        ERCADD_L=0;
        ERCADD_H=0;
        APC_L=0;
        APC_H=0;
        ISD_RESET();                  //复位
        delay(50);
        while((SR0_L&0x01)||(!(SR1&0x01)))                 //上电        芯片成功上电后PU和RDY置1
        {
                  ISD_UP();
                delay(500);
                ISD_RD_STATUS();
        }
        while(ISD_Free());                  //检测忙
        SBUF=ISD_REVID();                 //读取芯片
        delay(10);
        delay(10);
        while(ISD_Free());                  //检测忙
        ISD_CLR_INT();                          //清除中断
        delay(10);
        while(ISD_Free());                  //检测忙
        ISD_WR_APC2(0x40,0x0c);         //设置APC寄存器的值 初始化音量取中间音量
        delay(10);
        while(ISD_Free());                  //检测忙
        ISD_RD_APC();                           //读取APC寄存器的数据
        delay(10);
}
我只放上了需要用来初始化的主要程序,在芯片运行的时候会在
while((SR0_L&0x01)||(!(SR1&0x01)))                 //上电        芯片成功上电后PU和RDY置1
        {
                  ISD_UP();
                delay(500);
                ISD_RD_STATUS();
        }
这个循环之内出不来 我也试过另外的判条件while((!(SR1&0x01))||(!(SR0_L&0x04)))即上电成功之后RDY和PU置1 可是不管哪种方法都不行,网纱那个的资料也查了很多了  也弄不明白 求做过语音芯片的大神指点一下!谢谢啦!

回帖(1)

江皎

2020-3-6 07:38:46
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

更多回帖

发帖
×
20
完善资料,
赚取积分