主题中讨论的其他器件:CC2650
我有一个采用 RHB 封装的 CC2650、我想使用 SPI 模块将 AD4683 (ADC)进行通信(读写)。
问题是 事务每次都无法正常工作。
这是我用于"SPI_Controller"的代码。
-------------------------------------------------------
#ifndef ADC_CONFIG_PARAMS_DATA_SIZE
#define ADC_CONFIG_PARAMS_DATA_SIZE 16.
#endif
#ifndef adc_data_size_32.
#define ADC_DATA_SIZE_32 32.
#endif
静态 SPI_Transaction spiTransaction;
静态 SPI_Params adcParams1;
静态 SPI_Params adcConfigParams;
静态空 setup_adc (){
spiHandle = SPI_open (Board_SPI0、&adcConfigParams);
//设置 configuration2寄存器
uint32_t txData = 0xA1FF;
spiTransaction.txBuf =&txData;
spiTransaction.count = 1;
SPI_TRANSMIT (spiHandle、&spiTransaction);
Task_sleep (10000);
//设置 configuration2寄存器
txData = 0xA13C;
spiTransaction.txBuf =&txData;
spiTransaction.count = 1;
SPI_TRANSMIT (spiHandle、&spiTransaction);
Task_sleep (10000);
//设置 configuration1寄存器
txData = 0x92C2;
spiTransaction.txBuf =&txData;
spiTransaction.count = 1;
RES = SPI_TRANSMIT (spiHandle、&spiTransaction);
SPI_Close (spiHandle);
}
uint32_t SPI_CONTROLLER_readADC (){
uint32_t txData = 0x70007000;
uint32_t rxData;
SPI_Transaction spit;
spit.txBuf =&txData;
spit.rxBuf =&rxData;
spit.count = 1;
spiHandle = SPI_open (Board_SPI0、&adcParams1);
SPI_TRANSMIT (spiHandle、&spit);
SPI_Close (spiHandle);
返回 rxData;
}
静态空 SPI_Controller_init (void)
{
SPI_INIT();
...
SPI_PARAMS_init (&adcParams1);
adcParams1.dataSize = ADC_DATA_Size_32;
adcParams1.frameFormat = SPI_POL1_PHA0;
adcParams1.bitrate = 500000;
SPI_PARAMS_init (&adcConfigParams);
adcConfigParams.frameFormat = SPI_POL1_PHA0;
adcConfigParams.dataSize = ADC_CONFIG_PARAMS_DATA_SIZE;
adcConfigParams.bitrate = 500000;
spiTransaction.rxBuf = NULL;
}
静态 void SPI_taskFxn (UArg a0、UArg A1)
{
SPI_Controller_init ();
...
Setup_ADC ();
while (1){
Task_sleep (100000);
// setup_adc ();
SPI_CONTROLLER_readADC1 ();
}
}
-------------------------------------------------------
当我使用 setup_adc 函数进行事务时、一切都正常、我使用外部示波器验证了结果。
当我想从 ADC 读取数据时、我必须发送32位数据(0x70007000)、但当我使用示波器进行检查时、发送的数据始终相同或错误。 它发送的是17位而不是32位、并且始终具有相同的内容、时钟相位和极性不受 SPI_Params 的影响、我不知道它为什么不起作用。