OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6977|回复: 1

isd1760语音芯片初始化不成功 一直在PU那个循环中出不来 不知道为什么有没有大神知道的 麻烦解答一下!!!

[复制链接]

1

主题

1

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2018-2-10
在线时间
3 小时
发表于 2018-2-10 09:14:58 | 显示全部楼层 |阅读模式
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 可是不管哪种方法都不行,网纱那个的资料也查了很多了  也弄不明白 求做过语音芯片的大神指点一下!谢谢啦!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2018-3-6
在线时间
38 小时
发表于 2018-5-8 16:29:17 | 显示全部楼层
楼主解决了吗 我也遇到这个问题 加我qq 1285973921  搞了几天了没进展  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-1 12:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表