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.
我正在尝试通过 SPI 使用 AD7793 3chan ADC 芯片设置 TM4C129ENCPDT。 该设计需要在总线上使用其中的两个芯片、在总线结构中、我将控制 SPI CS 线路之外的芯片选择线路、以指示我要与哪个芯片通信。 目前、我可以在示波器上看到我正在发送数据、根据我发送的内容、我可以看到信息到达 RX 引脚。 但是、我无法将数据输入 Tiva 芯片。
AD7793需要先向芯片发送命令消息、然后才能使用其数据寄存器中的值进行响应。 它看起来类似于 MICROWIRE 格式、但声称能够与 SPI、MICROWIRE、QSPI 和3Wire 格式配合使用。 我已经尝试使用多种格式以及 HWREG 命令和 spi.h 命令、但无法找到正确的设置来读取意思是完整信息。 我甚至无法读取 ID 寄存器。 我附加了我为与此芯片通信而编写的设置和数据获取函数。 如果您有任何想法、或者之前曾使用过此 ADC 芯片、请告诉我我缺少的内容。
谢谢、
~ Andrew
..................................................................................................
向 COM 寄存器写入0x60应该为我提供0x0B 的响应。
bool ctrlCS 允许我根据我尝试执行的操作来设置或不设置 CS 线路。 对于 ID、我将在 spiDataGet 函数中设置 CS。
uint8_t SpiADC::spiDataGet (uint8_t reg、uint8_t*数据、uint8_t DATA_SIZE、bool ctrlCS)
{
//将寄存器写入 SPI 端口
uint32_t data32[5]={0x00、0x00、0x00、0x00、0x00、0x00};
uint32_t data32_size = 5;
if (ctrlCS)
cs_low();
SSIDataPut (SSI0_BASE、0x60);
SSIDataGet (SSI0_BASE、data32);
while (SSIBusy (SSI0_BASE));
if (ctrlCS)
CS_HIGH ();
for (int i = i;0;<data32_size;i++)
{
data[i]= data32[i];//static_cast (* data32ptr);
}
data_size = data32_size;
返回 DATA_SIZE;
}
静态空 init_spi()
{
//********
//SSI0
//********
//设置 SSI 外设
SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_SSI0));
//设置 GPIO A 块
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOA));
//设置 GPIO N 块
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION));
//将相应的管脚配置为 SSI 而不是 GPIO。
GPIOPinConfigure (GPIO_PA2_SSI0CLK);
GPIOPinConfigure (GPIO_PA3_SSI0FSS);
GPIOPinConfigure (GPIO_PA4_SSI0XDAT0); //SSIOTX
GPIOPinConfigure (GPIO_PA5_SSI0XDAT1); //SSIORX
GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_2 | GPIO_PIN_3 |
GPIO_PIN_4 | GPIO_PIN_5);
//为独立的 SSI 线路配置适当的引脚
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0); /24V CS (开发板5V)
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0); //设置为高电平
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_1); //5V CS (开发板24V)
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、GPIO_PIN_1); //设置为高电平
SSIClockSourceSet (SSI0_BASE、SSI_CLOCK_SYSTEM);
SSIConfigSetExpClk (SSI0_BASE、 // SSI 模块基地址
G_SysClock、 // 120MHz 系统时钟
SSI_FRF_MOTO_MODE_3、 //数据传输协议(CPOL = 1 | CPHA = 1) 模式3
SSI_MODE_MASTER、 //运行模式
2000000、 //时钟速率(用于传输?) FSSI >= 2*比特率 (最小2MHz)
8//每帧传输的位数
);
SSIAdvModeSet (SSI0_BASE、SSI_ADV_MODE_LEGACY_LEGACGANIC); //将 SSI 设置为 Legacy
//启用 SSI0模块。
SSIEnable (SSI0_BASE);
}