主题中讨论的其他器件: ADS1235
您好!
若要在 AM243x Launchpad 上构建 SPI 接口以从 ADS131M02 ADC 读取数据、请提供堆栈库或介绍如何在 SPI 接口中读取数据。
谢谢。
阿比纳亚
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.
尊敬的 ABI Bharathi:
以下链接中的示例代码可以很好地开始您的工作。
此外、请查看 ADS131M02数据表中8.5.1.7 SPI 通信帧会话中的详细信息。 下图是此 ADC 的典型 SPI 时序、您可以监测/DRDY 信号或将该信号用作 AM243x 处理器的中断、/DRDY 的下降沿指示数据已准备好读取、 然后、您可以发送 RREG、WREG 命令来读取或写入寄存器、或直接发送 SCLK 时钟、方法是发送足够的0数据(NULL)以通过 SPI 接口从 ADC 检索转换数据。
此致、
戴尔
尊敬的 Dale Li:
感谢您发送编修。
称重应用使用 ADS1235 (模数转换器)和1022称重传感器。 不过、我们起初使用的是 ADC 15 点击驱动器模块本身的 ADS131M02、我们需要确定如何通过 SPI 接口使用该 ADC 来收集数据、包括 ADC 配置、校准和滤波。
您首选 link ads131m02代码作为 MSP430控制器、但我们也使用 AM243x launchpad
在如何解读模拟数据方面、我们仍需要您的帮助。
谢谢!
阿比纳亚
尊敬的 ABI Bharathi:
这是 C 代码、 经过 一些修改后应该能够用于其他处理器。 这是我们针对 ADS131M0x 拥有的唯一示例代码。 正如我所说、您还可以检查 ADS131M02数据表中的时序和详细信息、如果您在从 ADC 收集数据时遇到任何问题、我可以提供帮助。
此致、
戴尔
尊敬的 ABI Bharathi:
示例代码对 每个函数和大多数代码行都有详细的说明和解释。 希望大家 先了解一下细节。
读取转换数据的函数是"ReadData (ADC_CHANNEL_DATA * DataStructuret)"。在 ads131m0x.c 文件中、您必须在主程序中调用此函数。 但是、 在调用 "ReadData (ADC_CHANNEL_DATA * DataStruct)" 函数读取数据之前、必须检查主程序循环中的"flag_nDRDY_interrupt"标志是否为真。 当/DRDY 信号触发中断并且在 hal.c 文件中执行"void GPIO_DRDY_IRQHandler ()"中断例程时,"flag_nDRDY_interrupt"的标志设置为"True"。
读取数据还有另一种替代解决方案,您可以 在 hal.c 文件中的"void GPIO_DRDY_IRQHandler ()"中断例程中调用"ReadData(ADC_CHANNEL_DATA *DataStruct)"函数,而不是在主程序循环中调用它。
我还强烈建议您查看自述文件、该文件已逐步显示如何使用此示例代码:
您好、Bryan:
感谢您的答复...
uint8_t spiSendReceiveByte(const uint8_t dataTx) { /* --- INSERT YOUR CODE HERE --- * This function should send and receive single bytes over the SPI. * NOTE: This function does not control the /CS pin to allow for * more programming flexibility. */ // Remove any residual or old data from the receive FIFO uint32_t junk; while (SSIDataGetNonBlocking(SSI_BASE_ADDR, &junk)); // SSI TX & RX uint8_t dataRx; MAP_SSIDataPut(SSI_BASE_ADDR, (uint32_t) dataTx); MAP_SSIDataGet(SSI_BASE_ADDR, (uint32_t *) &dataRx); return dataRx; }
上述代码具有 MSP430驱动程序库...如何在 Am243x Launchpad 中重新构建该函数?
谢谢
阿比纳亚
您好!
我参考 AM243x MCU+ SDK 示例:mcspi_loopback_am243x-lp_r5fss0-0_nortos_ti-arm-clang。 McSPI 实例初始化/打开代码是由 syscfg 自动基于 example.syscfg 生成的。 但我将使用 MCU_PLUS_SDK_AM243x_09.00.00.30、但 mcspi 驱动程序源文件仅包含此 mcspi 传递函数(int32_t MCSPI_transfer (MCSPI_Handle handle、MCSPI_Transaction * transaction)。
不提供 SPI 写入和读取功能。。。如何发送 ADC 寄存器和接收数据?
谢谢。
阿比纳亚
您好!
我参考 AM243x MCU+ SDK 示例:mcspi_loopback_am243x-lp_r5fss0-0_nortos_ti-arm-clang。 McSPI 实例初始化/打开代码是由 syscfg 自动基于 example.syscfg 生成的。 但我将使用 MCU_PLUS_SDK_AM243x_09.00.00.30、但 mcspi 驱动程序源文件仅包含此 mcspi 传递函数(int32_t MCSPI_transfer (MCSPI_Handle handle、MCSPI_Transaction * transaction)。
不提供 SPI 写入和读取功能。。。如何发送 ADC 寄存器和接收数据?
bool readData(adc_channel_data *DataStruct) { uint8_t dataRx[4] = {0}; //uint8_t bytesPerWord = getWordByteLength(); /* Set the nCS pin LOW */ setCS(LOW); // Send NULL word, receive response word int i; dataRx[i] = spiSendReceiveByte(0xA5); DataStruct->response = combineBytes(dataRx[0], dataRx[1]); // Send 2nd word, receive channel 1 data dataRx[i] = spiSendReceiveByte(0x14); DataStruct->channel1 = signExtend(&dataRx[0]); #if (CHANNEL_COUNT > 1) // Send 3rd word, receive channel 2 data dataRx[i] = spiSendReceiveByte(0x11); DataStruct->channel2 = signExtend(&dataRx[0]); #endif /* Set the nCS pin HIGH */ setCS(HIGH); // Returns true when a CRC error occurs return 0; } uint8_t spiSendReceiveByte( uint8_t dataTx) { uint8_t dataRx; MCSPI_Transaction spiTransaction; setCS(LOW); MCSPI_Transaction_init(&spiTransaction); spiTransaction.channel = gConfigMcspi0ChCfg[0].chNum; spiTransaction.dataSize = 8; spiTransaction.csDisable = TRUE; spiTransaction.count = (spiTransaction.dataSize/8); spiTransaction.txBuf = (void *)dataTx; spiTransaction.rxBuf = (void *)dataRx; spiTransaction.args = NULL; DebugP_log("transmit data %d\r\n",dataTx); dataRx = MCSPI_transfer(gMcspiHandle[CONFIG_MCSPI0],&spiTransaction); DebugP_log("receive data %d\r\n",dataRx); setCS(HIGH); return dataRx; }
中的上述代码用于 SPI 通信、但接收到的数据为0。 我需要您的帮助来解决该问题。
谢谢。
阿比纳亚