TI论坛
直播中

王鑫

8年用户 1271经验值
私信 关注
[问答]

ADS1211通过SSI的中断读出的,但是产生中断后读出的值全是FF,这是为什么?




  • 我用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就变成高电平了?

回帖(2)

石径

2025-1-22 14:28:30
我简单理一下思路:
1.你利用TM4C的SSI模块做SPI的读取。
2.写读的地址,然后连续读三个数据。
3.读SPI接收数据是利用中断读出。

我的问题是,如果按照你的思路,包括写地址也会产生接收中断,也就是你最后应该收到4个数据到你的buf中。
而且根据你的波形ENABLE 应该在每个数据读取完以后都产生一个电平跳变。
所以我建议两点:
第一.读TM4C函数调用手册 SSIDATAPUTNONBLOCKING函数。
第二,尝试写一个数据,看其接收室什么值,然后尝试写l两个数据看读出来是什么值,
举报

笑尽往事

2025-1-22 17:22:48
从您提供的代码和描述来看,您在使用TM4C微控制器通过SSI(同步串行接口)与ADS1211模数转换器进行通信。您提到在产生中断后读出的值全是FF,这可能是由于以下几个原因:

1. **SPI模式设置错误**:确保您的ADS1211配置为SPI模式,而不是I2C模式。ADS1211支持SPI和I2C两种通信协议,但您的代码看起来是为SPI模式编写的。

2. **时序问题**:在SPI通信中,时序非常重要。确保您的代码正确地发送了所需的时钟周期,并且没有遗漏或多余的时钟周期。

3. **寄存器配置**:检查ADS1211的寄存器配置是否正确。特别是,确保您已经正确设置了控制寄存器,以便在中断发生时读取数据。

4. **数据位顺序**:SPI通信中,数据位的顺序(MSB或LSB)需要匹配。确保您的代码和ADS1211的配置在这一点上是一致的。

5. **硬件连接**:检查您的硬件连接是否正确。错误的连接可能导致通信失败,从而读取到错误的数据。

6. **中断处理**:确保您的中断处理程序正确地读取了数据。如果中断处理程序没有正确地从SSI接口读取数据,可能会导致读取到错误的值。

7. **SSI配置**:检查您的SSI配置是否正确。确保SSI的时钟频率、相位和极性设置与ADS1211的要求相匹配。

8. **代码逻辑**:检查您的代码逻辑是否正确。特别是,确保在发送命令和读取数据之间没有逻辑错误。

针对您的代码,这里有一些建议:

- 确保您的SSI接口已经正确初始化,包括时钟频率、相位和极性。
- 检查您的中断处理程序,确保它正确地从SSI接口读取数据。
- 使用调试工具(如逻辑分析仪)来检查SPI通信的时序和数据。

如果您能提供更多的代码和配置细节,我可能能提供更具体的帮助。
举报

更多回帖

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