微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS1211的时序问题

ADS1211的时序问题

时间:10-02 整理:3721RD 点击:

我用TM4C的SPI读ADS1211

SSIDataPutNonBlocking(SSI0_BASE,0xc0);  //设置INSR,读取采样数据。
    
  SSIDataPutNonBlocking(SSI0_BASE,0x00);//因为在ADS1211从模式读数据不产生CLK,所以发送3个数据为了产生3个CLK。  
  SSIDataPutNonBlocking(SSI0_BASE,0x00);  
  SSIDataPutNonBlocking(SSI0_BASE,0x00); //发送4个数据刚好8个深度 占用了4个  产生半满中断 

 

上面是发送的四个数据,第一个是命令,后面3个是读取ADS1211的数据

 

我先写入,再读出,是通过SSI的中断读出的,但是产生中断后,发现读出的值全是FF,这是为什么?

这个芯片的SPI设定应该没有问题,因为之前是用来读写ADS1254,都没问题

 

附件中2张图片,是在SPI不同的速度下的波形,黄色是CLK的波形,蓝色是DRDY的波形,这个波形的问题是 为什么在第二个CLK完成后,DRDY就变成高电平了?

 

 

你好,

我简单理一下思路:

1.你利用TM4C的SSI模块做SPI的读取。

2.写读的地址,然后连续读三个数据。

3.读SPI接收数据是利用中断读出。

我的问题是,如果按照你的思路,包括写地址也会产生接收中断,也就是你最后应该收到4个数据到你的buf中。

而且根据你的波形ENABLE 应该在每个数据读取完以后都产生一个电平跳变。

所以我建议两点:

第一.读TM4C函数调用手册 SSIDATAPUTNONBLOCKING函数。

第二,尝试写一个数据,看其接收室什么值,然后尝试写l两个数据看读出来是什么值,

SSI中断我设定的是  //接收超时中断,//接收半满或超过,这样我发送4个数据 刚好半满产生中断,我都仿真过了,是正确的。

现在我还有个疑问:就是在读写数据的时候是不是DRDY一直保持低电平,读写完毕后才变为高电平。现在示波器是完成2个数据就变成高点平了

你好,

先回答你的疑问,是的,DIRDY在读写的时候都是保持低电平,空闲是才会为高。

我感觉是初始化不对,因为我把初始化注销了,波形都没什么改变,

下面是我的开机初始化,请问有什么问题么?或者初始化我要注意点什么?

 while(!GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_3)) 
 while(GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_3))  //检查下降沿
 delay2(800); //延时程序  
 
 SSIDataPutNonBlocking(SSI0_BASE,0x64);  

  SSIDataPutNonBlocking(SSI0_BASE,0x52); 

 SSIDataPutNonBlocking(SSI0_BASE,0x20); 
 SSIDataPutNonBlocking(SSI0_BASE,0x81);  
 SSIDataPutNonBlocking(SSI0_BASE,0x38);

还有一个问题,我的单片机都是3.3V的,而1211是5V的,这样直接连在一起用,有没有问题?

你好,

不能这样啊.

你好,

你的SPI选择是四种模式中的哪一种?

是上升沿采样,CLK空闲低电平?

和ADS1211的SPI模式是匹配的么。

void InitSPI0(void)
{

//初始化SSI0
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); // The SSI3 peripheral must be enabled for use.
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //GPIO port B needs to be enabled so these pins can be used.
SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 100000, 8); //接收
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5);
GPIOPinConfigure(GPIO_PA2_SSI0CLK);
GPIOPinConfigure(GPIO_PA4_SSI0RX);
GPIOPinConfigure(GPIO_PA5_SSI0TX);

IntEnable(INT_SSI0);
SSIIntDisable(SSI0_BASE,SSI_RXFF|SSI_RXOR|SSI_RXTO);
SSIEnable(SSI0_BASE);

}

kqian0327,非常感谢你耐心的回复,上面是我的SPI的初始化,

SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 100000, 8); //接收

用的是SSI_FRF_MOTO_MODE_0,有错误么?

我做了很多努力,加延时,改设置,但是不管我怎么做,包括上面提示的先写一个数据,再写2个数据,都是在第二个8位数据传送完毕DRDY就变为高电平,到底是哪里错了?

感谢Michael,在你的提示下,似乎找到了答案,看到正确波形了,但是还要进一步验证,谢谢。

希望是这个问题,如果有帮到你,麻烦结下帖子,貌似你点赞你自己,没有点赞我的答案啊 :(

上一篇:DAC3164
下一篇:ADS12963EVM使用出现问题!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top