工具/软件:
此问题链接到上述链接。
我尝试使用 ADS8688 数据表中的手动通道 n 选择 (MAN_Ch_n) 函数来与 8 通道 ADC 和 SPI 进行通信。 但是、CS 信号在对应于每个通道的 SCLK 结束的时间间隔内保持低电平(32 个时钟之后立即)。 换句话说、不会出现下降沿。 我相信你会很容易理解这一点,通过看照片.
我还有其他选项吗? 我需要 8 通道 ADC 和 SPI 通信。
下面是 SPI 配置代码。
/*
*========= 测试函数=========
*/
void SPI_TEST (UArg arg0、UArg arg1)
{
SPI_Params spiParams;/* SPI 参数结构*/
SPI_Handle handle;/* SPI handle */
SPI_Transaction 事务;/* SPI 事务*/
bool RetVal = false;/*返回值*/
/*初始化 GPIO 驱动程序*/
gpio_init ();
/*初始化 SPI 驱动程序*/
spi_init ();
/*默认 SPI 配置参数*/
SPI_Params_init (&spiParams);
spiParams.frameFormat = SPI_POL0_PHA1;
spiParams.dataSize = 32;
/*取消以下代码行的注释以测试回调模式*/
/* spiParams.transferMode = SPI_MODE_callback;*/
/* spiParams.transferCallbackFxn = MCSPICallbackFxn;*/
/*打开 QSPI 驱动器*/
// handle = SPI_open (Board_MCSPI_serial_Instance、&spiParams);
Handle = SPI_open (1U、&spiParams);//选择 SPI2
/*加载数据*/
LoadData();
/*启动传输*/
uint8_t cnt = 0;
for(cnt = 0; cnt < 32; cnt++){
txBuf[cnt]= 0x00U;
}
txBuf[3]= 0xC0U;
txBuf[7]= 0xC4U;
txBuf[11]= 0xC8U;
txBuf[15]= 0xCCU;
txBuf[19]= 0xD0U;
txBuf[23]= 0xD4U;
txBuf[27]= 0xD8U;
txBuf[31]= 0xDCU;
TransferLength = 8U;
Transaction.count = transferLength;
Transaction.txBuf =&txBuf[0];
transaction.rxBuf =&rxBuf[0];
while (1)
{
retval = SPI_TRANSFER(句柄,&TRANSACTION);
spiResultBuf =((uint16_t) rxBuf[1]<< 8)| rxBuf[0];
SYSTEM_printf(“USR Rx 数据为 0x%x%x、%u \n“、rxBuf[1]、rxBuf[0]、spiResultBuf);
delay (delay_value);
}
if (false == retval)
{
SPI_LOG(“\n SPI 传输中发生错误\n“);
}
暴露
{
/**
*以下是回调模式需要检查以指示
*转接完成。
*/
if (SPI_MODE_Callback == spiParams.transferMode)
{
while (txCompleteCallbackFlag == 1U);
}
RetVal = VerifyData ((uint8_t *)&serializerData[0]、&rxBuf[0]、transferLength);
if (true == retVal)
{
SPI_log(“\n 所有测试均已通过。 \n“);
}
暴露
{
SPI_LOG(“\n 某些测试失败。 \n“);
}
}
SPI_CLOSE(句柄);
while (1);
}