请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F280041C Thread 中讨论的其他器件:C2000WARE
工具与软件:
您好! 我将 C2000 C2000_79SDK_5_03_00_00 Ware_Motor 与 F280041C 配合使用。 我正在尝试设置 SPIB 接口。 以下是我的设置:
// SPI SIMO
GPIO_setMasterCore(56, GPIO_CORE_CPU1);
GPIO_setPinConfig(GPIO_56_SPIB_SIMO);
GPIO_setDirectionMode(56, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(56, GPIO_PIN_TYPE_STD);
// SPI SOMI
GPIO_setMasterCore(57, GPIO_CORE_CPU1);
GPIO_setPinConfig(GPIO_57_SPISOMIB);
GPIO_setDirectionMode(57, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(57, GPIO_PIN_TYPE_STD);
// SPI CLK
GPIO_setMasterCore(58, GPIO_CORE_CPU1);
GPIO_setPinConfig(GPIO_58_SPIB_CLK);
GPIO_setDirectionMode(58, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(58, GPIO_PIN_TYPE_STD);
void HAL_setupSPIB(HAL_Handle handle)
{
HAL_Obj *obj = (HAL_Obj *)handle;
// Must put SPI into reset before configuring it
SPI_disableModule(obj->spiHandle[1]);
// SPI configuration. Use a 1MHz SPICLK and 16-bit word size.
SPI_setConfig(obj->spiHandle[1], DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA1,
SPI_MODE_MASTER, 500000, 8);
SPI_disableLoopback(obj->spiHandle[1]);
SPI_setEmulationMode(obj->spiHandle[1], SPI_EMULATION_FREE_RUN);
//SPI_enableFIFO(obj->spiHandle[1]);
//SPI_setTxDelay(obj->spiHandle[1], 0x0018);
//HWREGH((obj->spiHandle[1])+SPI_O_FFCT) = 0x0018;
SPI_enableTriWire(obj->spiHandle[1]);
//SPI_enableLoopback(obj->spiHandle[1]);
SPI_clearInterruptStatus(obj->spiHandle[1], SPI_INT_TXFF);
// SPI_setFIFOInterruptLevel(obj->spiHandle[1], SPI_FIFO_TX2, SPI_FIFO_RX2);
// SPI_enableInterrupt(obj->spiHandle[1], SPI_INT_TXFF);
// Configuration complete. Enable the module.
SPI_enableModule(obj->spiHandle[1]);
while(SPI_getRxFIFOStatus(obj->spiHandle[1]))
{
char data=SPI_readDataBlockingFIFO(obj->spiHandle[1]);
}
return;
} // end of HAL_setupSPIB() function
unsigned int spi_xfer(unsigned char data)
{
//unsigned int value=data<<8;
SPI_transmitByte(halHandle->spiHandle[1], data);
while(SPI_getTxFIFOStatus(halHandle->spiHandle[1])!=SPI_FIFO_TXEMPTY);
while(SPI_getRxFIFOStatus(halHandle->spiHandle[1])!=SPI_FIFO_RXEMPTY);
unsigned char result=0;
result = SPI_readRxEmulationBuffer(halHandle->spiHandle[1]);
SPI_resetRxFIFO(halHandle->spiHandle[1]);
Delay_us(20);
return result;
}
回送位没有置位! 当 我在物理行调用 spi_xfer()时、一切都很好! 控制器正在发送正确的数据、 连接的器件正确响应命令、以此类推。 问题是、在 SPIRX 和 SPIRXEMU 缓冲区中、我已经传输了数据(值与 SPITXBUF 相同)。 它用作环回模式被启用、但我仔细检查了该位、它 没有被设置! 在n`t 上一切都是正确的、但微控制器仍会将发送缓冲区复制到接收缓冲区、并不读取输入引脚!
有什么建议吗?
谢谢!