TI论坛
直播中

陈静

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

用DSP2812读写ADS1298R,但是spi一直写不进去寄存器,为什么?


  • 您好,我用DSP2812读写ADS1298R,但是spi一直写不进去寄存器,不知道是为什么?这是我读写的程序。


    void writeREG(Uint16 valu)
    { SpiaRegs.SPITXBUF=valu;
      while(SpiaRegs.SPISTS.bit.INT_FLAG!=1)
      {}
      SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;
    }

    unsigned int dataread(void)
    {Uint16 data;
    SpiaRegs.SPITXBUF=0x0000;
    while(SpiaRegs.SPISTS.bit.INT_FLAG!=1)
      {}
    data=SpiaRegs.SPIRXBUF;
    return(data);
    }
    发送完寄存器的值之后,用读寄存器指令读寄存器的值一直读不出来,连ID寄存器都读不出来,请教是怎么回事啊?

回帖(3)

王丹丹

2025-2-11 11:10:44
 我觉得这是SPI的问题,如果东西写进去了,你测下drdy信号频率是不是和你设置的一样,
举报

何培芬

2025-2-11 11:10:50
请参考手册40到42页描述。读写都要先写操作码。
举报

李勇

2025-2-11 17:46:08
您好,根据您的描述和提供的代码片段,我将尝试分析可能的原因,并提供一些建议来解决您的问题。

1. 确保SPI初始化正确:
在进行SPI通信之前,请确保您已经正确初始化了DSP2812的SPI接口。这包括设置正确的时钟速率、主/从模式、CPOL和CPHA等参数。您可以查阅DSP2812的数据手册和ADS1298R的数据手册,以确保您正确配置了SPI接口。

2. 检查ADS1298R的CS(片选)信号:
在SPI通信过程中,确保您正确地控制了ADS1298R的CS信号。在发送数据之前,将CS拉低以选中设备;在发送数据之后,将CS拉高以取消选中。请检查您的硬件连接和代码,确保CS信号正确控制。

3. 检查ADS1298R的通信协议:
ADS1298R具有特定的通信协议,包括写寄存器、读寄存器和读取数据等操作。请确保您遵循了ADS1298R的通信协议,正确地发送了指令和数据。您可以查阅ADS1298R的数据手册,了解详细的通信协议。

4. 检查写寄存器函数:
在您的写寄存器函数中,您使用了`SpiaRegs.SPITXBUF`发送数据,然后等待`INT_FLAG`标志位变为1。但是,您没有检查`INT_FLAG`标志位是否确实表示数据已经发送完成。请确保您正确地处理了`INT_FLAG`标志位。

5. 检查读寄存器函数:
在您的读寄存器函数中,您发送了0x0000作为读取寄存器的指令。请确保这是正确的指令,并且ADS1298R能够识别。此外,您在读取数据之前没有发送读取寄存器的指令,这可能导致无法正确读取寄存器值。

6. 调试和测试:
为了更好地诊断问题,您可以尝试使用示波器或逻辑分析仪检查SPI通信线上的信号。这可以帮助您确定是否存在硬件问题,或者您的代码是否正确地发送和接收数据。

综上所述,您需要检查SPI接口的初始化、硬件连接、通信协议、写寄存器和读寄存器函数,以及使用调试工具来诊断问题。希望这些建议能帮助您解决问题。
举报

更多回帖

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