请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F280039C 主题中讨论的其他器件: ADS7038
您好!
我已将 TMS320F280039C 控制卡与 ADS7038 IC 连接、根据数据表、我将发送配置数据并在数据写入是否正确的情况下读回、但我无法从 ADS7038模块接收任何数据。
配置如下:
>波特率:1MHz
>位大小: 8
>使用 FIFO
> SPI 模式0
>控制器模式
> PinMux:

我发送的代码如下所示:
void ADC_ExternalInit( void )
{
uint16_t i = 0;
static uint16_t tmp_Error_uint16_t = FALSE;
/* Write the configuration of the external ADC, instead of the last entry, that is activating the auto sequence mode. */
for ( i=0 ;i < ( ADC_Sys_Ex_StartupConfig_Length_u16 - 1u );i++ )
{
/* Write three times eight bit = 24-Bits in total. */
SPI_transmitNBytes(SPIB_BASE,(uint16_t *)&ADC_Sys_Ex_StartupConfig_a16[i*3], (uint16_t)3, (uint16_t)0);
/* Clear of fifo pointer is needed, otherwise the function SPI_writeDataBlocking will not work next time. */
SPI_clearFIFOPointer();
}
/* Readback the registers hat has been previously written to ensure the correct operation. */
for ( i=0;i<ADC_Sys_Ex_StartupConfigReadback_Length_u16;i++ )
{
/* Write three times eight bit = 24-Bits in total. */
SPI_transmitNBytes(SPIB_BASE,(uint16_t *)&ADC_Sys_Ex_StartupConfigReadback_a16[i*3], 3, 0);
if ( i >= 1u )
{
if ( SPI_M_READ_BUFFER != ADC_Sys_Ex_StartupConfig_a16[((i-1u)*3u)+2u] )
{
tmp_Error_uint16_t = TRUE;
}
}
SPI_clearFIFOPointer();
}
/* Check if an error is present during the external ADC setup. */
if ( tmp_Error_uint16_t == ( uint16_t ) TRUE )
{
ADC_Sys_Ex_ADCInit_uint16_t = FALSE;
}
else
{
ADC_Sys_Ex_ADCInit_uint16_t = TRUE;
/* Activate the auto sequence mode at the end of the init phase. */
SPI_transmitNBytes(SPIB_BASE,(uint16_t *)&ADC_Sys_Ex_StartupConfig_a16[(ADC_Sys_Ex_StartupConfig_Length_u16-1u)*3u], 3, 0);
/* Clear of fifo pointer is needed, otherwise the function SPI_writeDataBlocking will not work next time. */
SPI_clearFIFOPointer();
}
/***********************************************************************************/
extern void SPI_clearFIFOPointer ( void ) {
/* TX FIFO */
/* Write 0 to reset the FIFO pointer to zero, and hold in reset.*/
HWREGH(SPIB_BASE + SPI_FFTX_SPIRST) = SPI_D_FIFO_RESET;
/* RX FIFO */
/* Write 0 to reset the FIFO pointer to zero, and hold in reset.*/
HWREGH(SPIB_BASE + SPI_FFRX_RXFIFORESET) = SPI_D_FIFO_RESET;
/* Restart FIFO, first start with Rx - FIFO */
/* Release receive FIFO from reset. */
HWREGH(SPIB_BASE + SPI_FFRX_RXFIFORESET) = SPI_D_FIFO_RELEASE;
/* Release transmit FIFO from reset. */
HWREGH(SPIB_BASE + SPI_FFTX_SPIRST) = SPI_D_FIFO_RELEASE;
}
/***********************************************************************************/
static const uint16_t ADC_Sys_Ex_StartupConfig_a16 [] = {
ADC_EXT_WR_REG,0x10,0x00, /* Disable a current on going conversion. */
ADC_EXT_WR_REG,0x01,0x00, /* Reset the configuration at startupd. */
ADC_EXT_WR_REG,0x02,0x10, /* Append a 4-bit channel ID to the measured data. */
ADC_EXT_WR_REG,0x03,0x00, /* Oversampling is deactivated. */
ADC_EXT_WR_REG,0x04,0x00, /* 1 MHz sample rate + Auto sequence mode. */
ADC_EXT_WR_REG,0x05,0x00, /* All channels are configured as analog input. */
ADC_EXT_WR_REG,0x12,0x0F, /* CH0, CH1, CH2 and CH3 are enabled for the auto sequence mode. */
ADC_EXT_WR_REG,0x10,0x11, /* Start the auto sequence mode. */
};
static const uint16_t ADC_Sys_Ex_StartupConfigReadback_a16 [] = {
ADC_EXT_RD_REG,0x10,0x00, /* Disable a current on going conversion. */
ADC_EXT_RD_REG,0x01,0x00, /* Reset the configuration at startupd. */
ADC_EXT_RD_REG,0x02,0x00, /* Append a 4-bit channel ID to the measured data. */
ADC_EXT_RD_REG,0x03,0x00, /* Oversampling is deactivated. */
ADC_EXT_RD_REG,0x04,0x00, /* 1 MHz sample rate + Auto sequence mode. */
ADC_EXT_RD_REG,0x05,0x00, /* All channels are configured as analog input. */
ADC_EXT_RD_REG,0x12,0x00, /* CH0, CH1, CH2 and CH3 are enabled for the auto sequence mode. */
0x00,0x00,0x00 /* One additional row with dummy data to read out the last register. */
};
static uint16_t ADC_Sys_Ex_StartupConfig_Length_u16 = 8u;
static uint16_t ADC_Sys_Ex_StartupConfigReadback_Length_u16 = 8u;
/***********************************************************************************/
下面附加了输出代码段:




注:
> ADS7038在3.3电压下工作。
我有一些疑问:
1.外设模式下是否默认使用 ADS7038?
2.是否需要在 ADS7038中启用硬件写入/读取保护? 如果是、我该怎么做?
请告诉我问题可能在哪里、以及如何解决。
谢谢!
此致、
U·特哈斯