主题中讨论的其他器件: C2000WARE
您好!
我想使用 F28379D 开发套件和 DRV8434S 通过 SPI 进行通信、我想使用具有以下 F28379和 DRV8434S 连接的载板:
SPIA SOMI -> SDO
SPIA SIMO -> SDI
SPIA CLK -> SCLK
SPIA CS -> SCS
例如、读取同时包含发送和接收的寄存器参数之一。
看看库和文档、我认为这是接近解决方案的东西、但不幸的是它不起作用。
首先、我初始化 SPI GPIO:
void configGPIOs(void)
{
//
// GPIO59 is the SPISOMIA.
//
GPIO_setMasterCore(59, GPIO_CORE_CPU1);
GPIO_setPinConfig(GPIO_59_SPISOMIA);
GPIO_setPadConfig(59, GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode(59, GPIO_QUAL_ASYNC);
//
// GPIO58 is the SPISIMOA clock pin.
//
GPIO_setMasterCore(58, GPIO_CORE_CPU1);
GPIO_setPinConfig(GPIO_58_SPISIMOA);
GPIO_setPadConfig(58, GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode(58, GPIO_QUAL_ASYNC);
//
// GPIO61 is the SPISTEA.
//
GPIO_setMasterCore(61, GPIO_CORE_CPU1);
GPIO_setPinConfig(GPIO_61_SPISTEA);
GPIO_setPadConfig(61, GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode(61, GPIO_QUAL_ASYNC);
//
// GPIO60 is the SPICLKA.
//
GPIO_setMasterCore(60, GPIO_CORE_CPU1);
GPIO_setPinConfig(GPIO_60_SPICLKA);
GPIO_setPadConfig(60, GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode(60, GPIO_QUAL_ASYNC);
}
我将控制器的 SPI 配置为主器件:
void initSPIAMaster(void)
{
//
// Must put SPI into reset before configuring it
//
SPI_disableModule(SPIA_BASE);
//
// SPI configuration. Use a 500kHz SPICLK and 8-bit word size.
//
SPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0,
SPI_MODE_MASTER, 500000, 8);
SPI_disableLoopback(SPIA_BASE);
SPI_setEmulationMode(SPIA_BASE, SPI_EMULATION_FREE_RUN);
SPI_setPTESignalPolarity(SPIA_BASE, SPI_PTE_ACTIVE_LOW);
//
// Configuration complete. Enable the module.
//
SPI_enableModule(SPIA_BASE);
}
我构建并发送数据包、检查接收到的值是否为预期值:
volatile uint8_t reg_value = 0;
reg_value |= 0x4000; // Set R/W bit
reg_value |= ((0X05 << 9) & 0x3F00); // Configure register address value (CTRL3)
reg_value = (uint8_t)((reg_value>>8) & 0xFF);
volatile uint8_t dataMSB = 0;
volatile uint8_t dataLSB = 0;
SPI_enableModule(SPIA_BASE);
// send first byte
SPI_writeDataNonBlocking(SPIA_BASE, reg_value<<8);
// wait transmission end
while(SPI_isBusy(SPIA_BASE));
// read first byte
dataMSB = (uint8_t)SPI_readDataNonBlocking(SPIA_BASE);
// send second byte
SPI_writeDataNonBlocking(SPIA_BASE, 0x00);
// wait transmission end
while(SPI_isBusy(SPIA_BASE));
// read second byte
dataLSB = (uint8_t)SPI_readDataNonBlocking(SPIA_BASE);
// reset SPI
SPI_disableModule(SPIA_BASE);
rData = ((((dataMSB<<8) | dataLSB) & 0x00FF)>>0x0); // complete data
// Check received data against expected data
if(rData != 0x06) // ctrl3 default value on power on
{
// Something went wrong. rData doesn't contain expected data.
ESTOP0;
}
即使更改 CTRL 地址、也始终为0。 它们似乎没有通信。 我做错了什么? 是否可以在两个器件之间建立一个有效的通信示例?
谢谢!
比亚吉奥
