我们正在开发一个需要 SPI 通信的项目、因此、为了满足我们参考的数据表中指定的数据通信协议、我们可能需要更改自动生成的 API。
因此、为了实现同样的目的、我们还需要一些材料或见解供参考。
我们的一些问题:
1) 1) CS_HOLD 与 SPI 通信的 CS 相同吗? (我们对此存在疑问、因为在论坛上我们看到一个代码将 CS_HOLD 初始化为 false、在 while 循环中的 if 语句后、我们再次将 CS_HOLD 设为0)
2) 2) 什么是 Chip_Select_Hold? (低电平有效/高电平有效)
2) WDEL (我们假设的一些延迟因素)和 CSNR 的任务是什么?
最后、如果我们要修改该特定 API 以首先传输数据、然后仅开始接收、那么我们应该如何处理? (目前、我们正在使用 spiTransmitData 和 spiReceiveData 的组合)
uint32 spiTransmitAndReceiveData (spiBASE-t *spi、spiDAT1_t * dataconfig_t、uint32 blocksize、uint16 * srcbuff、uint16 * destbuff)
{
UINT16 Tx_Data;
uint32 Chip_Select_hold =(dataconfig_t->CS_hold )? 0x10000000U:0U;
UINT32 WDelay =(dataconfig_t->WDEL)? 0x04000000U:0u;
SPIDATAFMT_t DataFormat = dataconfig_t->DFSEL;
UINT8 ChipSelect = dataconfig_t->CSNR
/*用户代码开始(14)*/
/*用户代码结束*/
while (blocksize!= 0u)
{
if ((SPI->FLG & 0x000000FFU)!= 0U)
{
中断;
}
if (blockSize == 1u)
{
Chip_Select_Hold = 0u;
}
/*SAFETYMCUSW 45 D MR:21.1 "此驱动程序仅允许有效的非 NULL 输入参数"*/
TX_Data =* srcbuff;
SPI->DAT1 =((UINT32) DataFormat << 24u)|
((UINT32) ChipSelect << 16U)|
(WDelay) |
(CHIP_SELECT_HOLD)|
(UINT32) Tx_Data;
/*SAFETYMCUSW 567 S MR:17.1,17.4. "需要指针增量"*/
srcbuff++;
/*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/
while ((SPI->FLG & 0x00000100U)!= 0x00000100U)
{
}/*等待*/
/*SAFETYMCUSW 45 D MR:21.1 "此驱动程序仅允许有效的非 NULL 输入参数"*/
*destbuff =(uint16)SPI->BUF;
/*SAFETYMCUSW 567 S MR:17.1,17.4. "需要指针增量"*/
减震缓冲器++;
块大小--;
}
/*用户代码开始(15)*/
/*用户代码结束*/
返回(SPI->FLG & 0xFFU);
}
