This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:通过 SPI 与 BOOSTXL-ADS7841-Q1连接时出现问题

Guru**** 2387830 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/776404/tm4c1294ncpdt-problem-interfacing-with-boostxl-ads7841-q1-through-spi

器件型号:TM4C1294NCPDT

大家好、

首先、我想说的是、我已经联系过数字转换器论坛、在那里我没有得到太多帮助、我的问题仍然在继续。 我已经呆了3天、所以我决定来这里寻求帮助。

正如标题所示、我正在连接 BOOSTXL-ADS7841-Q1。 这是 器件的数据表、方便您查阅。

其次、我的应用的当前行为可以通过时序图进行解释、如下所示。

根据图、一旦  CS  变为低电平、BUSY 和 DOUT 就会变为低电平。 我的 DOUT 和 BUSY 目前始终保持低电平。

这是控制字节 0x97 以及随后两个字节 0x000x00生成 DOUT 发送数据时钟的示波器屏幕截图。

这是消息帧。


现在是相同的消息帧、但具有忙 线。

以下是我的代码

/*
src_ads8741.c
*

** 器件使用 TM4C1294的 SSI2引脚分配如下
:* SPI MOSI - PQ2 - SSI3XDATA0
* SPI MISO - PQ3 - SSI3XDATA1
* SPI SCL - PQ0 - SSI3SLCK
* SPI ~CS - PM7 -芯片选择
* ADS BUSY - PP3 - BUSY PIN
*/


#include "src_ads8741q1/src_ads8741q1.h"
#include "src_mk_led/mk led_control.h"

uint32_t pui32DataRx[16];

void init_ads7841q1 (uint32_t sysClock){

MAP_SysCtlPeripheralEnable (SYSCTL_Periph_SSI3);
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);

//配置 SSI3引脚
MAP_GPIOPinConfigure (GPIO_PQ0_SSI3CLK);
MAP_GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0);//MISO
MAP_GPIOPinConfigure (GPIO_PQ3_SSI3XDAT1);//MOSI
MAP_GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3);

//设置 SPI:2MHz、8位数据、模式0
MAP_SSIClockSourceSet (SSI3_base、SSI_CLOCK_SYSTEM);
MAP_SSIConfigSetExpClk (SSI3_base、sysClock、SSI_FRF_MOTO_MOTO_MODE_0、
SSI_MODE_MASTER、2000000、24);
// MAP_SSIAdvModeSet (SSI3_base、SSI_ADV_MODE_LEGACH);
MAP_SSIEnable (SSI3_base);

//空接收缓冲区
uint32_t dummy[1];
while (MAP_SSIDataGetNonBlocking (SSI3_base、&dummy[0]));

//配置芯片选择引脚
MAP_GPIOPinTypeGPIOOutput (GPIO_PORTM_BASE、GPIO_PIN_7);
ads7841q1_chip_select (取消选择);
//配置 BUSY 引脚
MAP_GPIOPinTypeGPIOInput (GPIO_PORTP_BASE、GPIO_PIN_3);
}

void ads7841q1_READ_DATA (){
uint32_t buffer_data[3]={0、0、0};
MAP_GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、0);

/*以控制字节发送*/
SSIDataPut (SSI3_base、0x97);
SSIDataGet (SSI3_base、&buffer_data[0]);

SSIDataPut (SSI3_base、0x00);
SSIDataGet (SSI3_base、&buffer_data[1]);

SSIDataPut (SSI3_base、0x00);
SSIDataGet (SSI3_base、&buffer_data[2]);
while (SSIBusy (SSI3_base)){}


MAP_GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、GPIO_PIN_7);

}

void ads7841q1_chip_select (chip_select 选项){
if (option == select){
MAP_GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、0);
SET_BOARD_LED (Board_LED_1、LED_ON);
} 否则、如果(选项=取消选择){
MAP_GPIOPinWrite (GPIO_PORTM_BASE、GPIO_PIN_7、GPIO_PIN_7);
SET_BOARD_LED (Board_LED_1、LED_OFF);
}
}

void ads7841q1_check_busy(){
if (GPIOPinRead (GPIO_PORTP_BASE、GPIO_PIN_3)= GPIO_PIN_3){
SET_BOARD_LED (Board_LED_2、LED_ON);
} 否则{
SET_BOARD_LED (Board_LED_2、LED_OFF);
}
}

我尝试了不同的模式、即  SSI_FRF_MOTO_MODE_0 至  SSI_FRF_MOTO_MODE_3  

在  main.c 中 、我在   while 循环之前初始化函数 init_ads7841q1 ()、并将  ads7841q1_read_data ()放入 while 循环中以生成通信。

奇怪的是、当使用 GUI 应用程序时、应用程序会发现 Booster Pack 附带但不能与我的应用程序配合使用。 我不知道我错过了什么,我很绝望...

非常感谢你们的帮助。

如果您需要我提供更多信息、请告诉我。

谢谢、

Alex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alex、您好!

    您认为 TM4C 的 SPI 实现存在问题吗? 对我来说、SPI 听起来工作正常、但您无法让从器件进行回复、这是正确的吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Raplh、

    感谢您在这一较晚的时间内回复。

    我认为 SPI 配置正确、但结果不符合我的预期、因此我对此也有疑问。

    Alex
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Hau、

    由于您有 SPI 数据传出、因此 TM4C 配置中的大多数情况都是这样、但我确实看到您共享的捕获与时序图存在一些问题:

    1) 1)从数据表中可以清楚地看到、从器件在时钟的上升沿对数据进行采样、但您的捕获会在时钟的下降沿显示数据。 根据 D/S 规格、您需要使用 SSI_FRF_MOTO_MODE_0、因此 TM4C 配置应该可以正常工作。

    2) 2)从我可以看到的内容中、您应该使用8字节事务、而不是24字节事务。 DS 表示每周期24次时钟转换、但仅限8位总线。 因此、我也会对其进行调整。

    不幸的是、除了进行这些更改之外、我认为您还需要从数据转换器论坛的各位同事那里获得建议。 但是、如果您在星期一下午之前没有收到回复、请再次在此处发布您未收到支持的主题、我可以尝试帮助您将您在该论坛上的问题上报。 我说星期一下午是因为现在是周末,虽然我是周末疯狂的人之一,但并不是每个人都这么做了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    拉尔夫

    非常感谢您的回答。

    我设法解决了这个问题。 由于电路板硬件问题、μ~SHDN 引脚始终被拉低。

    我遵循数据表中的原理图、该原理图告诉我 μ~SHDN 引脚始终被拉高、以防止芯片进入关断模式。  我想我下次不能如此盲目地相信原理图。

    当我手动将 VCC 应用到芯片中时、它为我提供了正确的输出。 现在、我只需要找到解决此问题的方法。

    愿上帝保佑你们!

    Alex