主题中讨论的其他器件:BOOSTXL-DRV8323RS、 LAUNCHXL-F280025C、 DRV8323
尊敬的专家:
我使用的是280025,我参考 了有关使用 SPI 配置的 E2E 常见问题解答: https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/937258/faq-spi-configuration-and-use?tisearch=e2e-sitesearch&keymatch=faq%3atrue,I按照 这一阐述对 SPI 进行配置。
我已尝试将配置应用于 DRV8323RS 和另一个驱动器 IC (A4911)。我在两 块板之间连接六个信号引脚( 例如:“LAUNCHXL-F280025C”和“BOOSTXL-DRV8323RS”) Borad:Enable (GPIO29)、SCLK (GPIO9)、SDI/SIMO (GPIO8)、SDO/SOMI (GPIO10)、CS/STE (GPIO11)、GND。总线电压(VM)由稳定的24V 电压供电。但是、我在两个驱动器 IC 上都遇到了写入问题。我在写入这两个驱动器 IC 上都遇到了问题。
请勿重复一些无用的信息、例如断开 IDRIVE 和 VDS 引脚、只需将这两个引脚悬空、因为我没有连接这些引脚。
A4911的寄存器结构:

SPI 配置代码:
GPIO_setPinConfig (GPIO_8_SPIA_SIMO);
GPIO_setPadConfig (8、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (8、GPIO_QUAL_异 步);
GPIO_setPinConfig (GPIO_10_SPIA_SOMI);
GPIO_setPadConfig (10、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (10、GPIO_QUAL_异 步);
GPIO_setPinConfig (GPIO_9_SPIA_CLK);
GPIO_setPadConfig (9、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (9、GPIO_QUAL_异 步);
GPIO_setPinConfig (GPIO_11_SPIA_STE);
GPIO_setPadConfig (11、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (11、GPIO_QUAL_异 步);
HWREGH (base + SPI_O_FFTX)= 0xE040;
HWREGH (base + SPI_O_FFRX)= 0x2044;
HWREGH ((基址)+SPI_O_FFCT)= 0x0;
//SPI 设置
HWREGH (base + SPI_O_CCR)&=~(SPI_CCR_SPISWRESET);//SPI 复位打开
SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA0、SPI_MODE_MASTER、1000000、16);
SPI_disableLoopback (base);
HWREGH (base + SPI_O_CTL)&=~(SPI_CTL_OVERRUNINTENA);
HWREGH (base + SPI_O_CTL)|= SPI_CTL_TALK;//启用 nSCS
HWREGH (base + SPI_O_CTL)&=~(SPI_CTL_SPIINTENA);
SPI_setEmulationMode (base、SPI_emulation_free_run);
HWREGH (base + SPI_O_CCR)|= SPI_CCR_SPISWRESET;
读取和写入函数:
uint16_t SPI_xmit (uint32_t base、uint16_t spiFrame)
{
SPI_writeDataNonBlocking (base、spiFrame);
//等待 RX 标志指示 SPI 帧完成
while (SPI_getRxFIFOStatus (base)!= 1)
{
}
返回 SPI_readDataNonBlocking (base);
}
uint16_t A4911_spi_read (uint32_t base、uint16_t addr)
{
uint16_t toSend = 0;
toSend =(uint16_t)((((uint32_t) A4911AddrMask & addr)<< 11U);
toSend |=(uint16_t)(A4911Read);
luchang1 = toSend;
返回 SPI_xmit (base、toSend);
}
uint16_t A4911_spi_write (uint32_t base、uint16_t addr、uint16_t data)
{
uint16_t toSend = 0;
toSend =(uint16_t)((((uint32_t) A4911AddrMask & addr)<< 11U);
toSend |=(uint16_t)(A4911Write);
toSend |=(uint16_t)((((uint32_t) A4911ValueMask & data)<< 1U);
luchang2 = toSend;
返回 SPI_xmit (base、toSend);
}
在 main()中调用初始化中的函数
InitA1911();
A4911_SPI_WRITE (SPIA_BASE、0、12);
A4911_reg = A4911_SPI_Read (SPIA_BASE、0);
无论我写入寄存器0:A4911_SPI_WRITE (SPIA_BASE、0、12)或 A4911_SPI_WRITE (SPIA_BASE、0、8)中的数据是什么、我在 SPIRXBUF 中读取相同的结果:

我的板没有问题。我是否在代码中犯了错误或忽略了一些细节?您能给我一些建议?如果您能详细介绍我的描述并提供有用和清晰的信息、我将不胜感激。