主题中讨论的其他器件:TRF7970A、 MSP430G2553
我正在尝试将 TRF7970A BoosterPack (http://www.ti.com/tool/DLP-7970ABP)与 F28388D controlCARD (http://www.ti.com/tool/TMDSCNCD28388D)集成。 为此、我希望要求 TI 提供帮助、以确认我的实施情况和/或为以下问题提供可行的解决方法:
1.我的 SPI 连接是否配置正确? (低速外设时钟速率、波特率、字数据宽度、FIFO/无 FIFO 等)
2.我是否正确转换了8位整数以便在 F28388D driverlib 库函数中使用? (SPI_writeDataNonBlocking ()、SPI_writeDataNonBlockingFIFO ()等)
MSP430G2553和 TRF7970A 使用基于位和寄存器的实施方案、在两者之间实现 SPI 连接、我将此作为灵感来源。 迄今为止、我尝试将该实现修改为基于 driverlib 的实现方案的做法未能成功。
首先、我使用以下设置配置了 SPI 连接
SPI_setConfig (SPIA_BASE、800000、SPI_PROT_POL0PHA0、SPI_MODE_MASTER、200000、 8);
这意味着外设时钟以8MHz 运行、时钟没有极性或相移、F28388D 是 SPI 主器件、波特率为2MHz、数据宽度为8位。
其次、我假设 SPI 连接从 MSB 开始传输左对齐、因此我必须将8位字符转换为16位整数并向左移位8位。
例如、为了与 TRF7970A 对接、MSP430通过 SPI 发送左对齐8位字。 但是、F28388D 能够通过 SPI 传输16位字。 因此、我已将 SPI 连接配置为发送和接受8位字。 此外、每次我的 F28388D 通过 SPI 传输字(字符)时、我必须将 uint8_t 转换为16位整数、向左移位8位、然后将该值写入 SPI 传输缓冲区。 具体而言、我将 SPI_writeData 函数打包如下:
void SPI_directCommand (uint8_t ui8Command)
{
uint16_t valueToSend;
//从器件选择低电平以启动 SPI 传输
setSpiSlaveSelectLow();
//将地址/命令字位分配设置为命令(这是 TRF7970A 固件特有的)
ui8Command =(0x80 | ui8Command);//命令
ui8Command =(0x9f & ui8Command);//命令代码
//将 ui8Value 转换为的左对齐16位值
// SPI_WRITE 函数(转换和位向左移位8)
valueToSend =(uint16_t) ui8Command;
ValueToSend <<= 8;
//将数据写入发送缓冲区
SPI_writeDataBlockingFIFO (SPIA_BASE、valueToSend);
//从器件选择高电平到端 SPI 发送
setSpiSlaveSelectHigh();
}