主题中讨论的其他器件: 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。 我需要您的帮助来解决该问题。
谢谢。
阿比纳亚