socobear 发表于 2009-8-31 22:33:50

cs5532初始化不能成功

cs5532我按照datasheet上的说明进行初始化,却总不能成功。使用的单片机是LM3s8962。
和网上的一些参考例程对照过了,通过示波器观察了sclk和sdo的信号。发现我的时钟及发送的数据都是没有问题的,可是从sdi过来的数据总是没有重复性,0x00,0xff,0x10都出现过。
按道理,发送超过15个的0xff和1个0xfe,进行re-sync,然后再发送0x03,0x2000 0000开启一个复位周期,这时候接收的数据应该是0x1000 0000才对。可是我始终接收不到,有时候接受到了这样的数据,再来一次的是很又不是这个数据了。
很苦恼,哪位兄弟有碰见过类似的问题,给我个回复吧。非常感谢!
ps:我的时钟是4.096mhz的,频率没有问题,4.096左右跳动,但输出波形的幅值是250mv(交流测量),这个对cs5532工作有影响没有?

to amork:没找到合适的区,就发avr区了。

qiaoam 发表于 2009-9-1 08:16:38

没那么复杂,初始化很简单的

socobear 发表于 2009-9-1 17:43:12

to qiaoam:
我也知道这部分很简单,但总是找不到问题出在哪里了。我的程序有问题是吗?另外硬件上注意些什么?

zht_omc 发表于 2009-9-1 20:18:30

调整下SCLK线上的时钟频率试试

socobear 发表于 2009-9-1 20:46:12

to zht_omc:

现在的时钟频率是100Khz。在0~2Mhz范围内。用示波器看的,频率很准的说。
换600Khz,还是不对。
感觉不是频率的问题。

socobear 发表于 2009-9-1 21:04:54

贴下代码:
    //Peripheral config
    SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    GPIODirModeSet(GPIO_PORTA_BASE, GPIO_PIN_6, GPIO_DIR_MODE_OUT);
    GPIOPadConfigSet(GPIO_PORTA_BASE, GPIO_PIN_6,GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);
    SSIConfig(SSI0_BASE, SSI_FRF_NMW,SSI_MODE_MASTER,ulBitRate, 8);
    SSIEnable(SSI0_BASE);
    GPIOPinTypeSSI(GPIO_PORTA_BASE,(GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5));//CS5532_SSI_PINS为SSI
    CS5532_CS_CLR();
    delay_ms(20);
    //ssi init
    for(i = 180; i > 0; i--)
    {
      SSIDataPut(SSI0_BASE,0xFF);
    }
    SSIDataPut(SSI0_BASE,0xFE);
    //cs5532 reset
    SSIDataPut(SSI0_BASE,0x03);//write config register
    SSIDataPut(SSI0_BASE,0x20);//0x2000 0000
    SSIDataPut(SSI0_BASE,0x00);
    SSIDataPut(SSI0_BASE,0x00);
    SSIDataPut(SSI0_BASE,0x00);
   
    delay_ms(20);
   
    //get config register to confirm if the reset is OK
    SSIDataPut(SSI0_BASE,0x0B);//read config register
    delay_ms(4);
    SSIDataGet(SSI0_BASE,(unsigned long *)(&ucTemp));
    ulConfReg = ucTemp;
    SSIDataGet(SSI0_BASE,(unsigned long *)(&ucTemp));
    ulConfReg = (ulConfReg<<8) + ucTemp;
    SSIDataGet(SSI0_BASE,(unsigned long *)(&ucTemp));
    ulConfReg = (ulConfReg<<8) + ucTemp;
    SSIDataGet(SSI0_BASE,(unsigned long *)(&ucTemp));
    ulConfReg = (ulConfReg<<8) + ucTemp;

socobear 发表于 2009-9-1 22:42:25

这个是cs5532部分的布局。

http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_476905.JPG
(原文件名:未命名.JPG)

zfnuaa 发表于 2010-8-8 17:15:25

SSIDataGet(SSI0_BASE,(unsigned long *)(&ucTemp));
使用这个函数的时候,系统会不会发送时钟?因为此时的SSI,以控制器来看是主模式的。

4512125 发表于 2011-9-6 16:11:43

大虾好,我最近刚接触这个芯片,初始化和你相同的问题,我是发送31个FF和1个FE,然后延时一段时间,然后发送如下代码:
        for (i=0;i<31;i++) //复位
        CS5532_SendByte(0XFF);
        CS5532_SendByte(0XFE);

        CS5532Delay(50);



        Nop();Nop();
        CS5532_SendByte(0X03);//复位RS位
        CS5532_SendByte(0X21);
        CS5532_SendByte(0X80);
        CS5532_SendByte(0X00);
        CS5532_SendByte(0X00);

        CS5532Delay(50);



        Nop();Nop();
            CS5532_SendByte(0x0b); //从物理通道1配置寄存器读
//while(rec1!=0x10)//检验物理通道1配置寄存器RV位      
//        {
            rec1=CS5532ReadByte( );
            rec2=CS5532ReadByte( );
            rec3=CS5532ReadByte( );
            rec4=CS5532ReadByte( );
//        }
while(1)//转换程序,调试用…
{
}

我用示波器抓波形的时候,当我发送“CS5532_SendByte(0x0b); //从物理通道1配置寄存器读”这条指令,只要SDO有输出,基本能读出0X10000000,但是有时候抓波形的时候,发送这条指令,SDO没有输出,感觉上像是5532没有反应过来,您是如何解决这个问题的,时序我查很多遍了,很不解,希望看到的也能谈谈自己的想法…谢谢拉!!!

zhangguirui 发表于 2011-9-19 14:56:54

为什么我的读回来是0X88 00 00 00呢,再读一次是0XFFFFFFFF,再读就都是0了,请高手们指点一下

Hexboot.Aidath 发表于 2012-11-16 19:09:59

stm8 I/O口模拟时序,,,一点头绪都没有,LZ现在还搞好了?拿来参考下.
页: [1]
查看完整版本: cs5532初始化不能成功