This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F28377S:SPI 3线模式、SPISTE 切换

Guru**** 2482215 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/968112/ccs-tms320f28377s-spi-3-wire-mode-spiste-toggle

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

您好! 

我将使用 TMS28377S 驱动 SPI 三线制。

我的代码是

1.将 SPISTE 位清零为低电平。  ->SPI_LOAD_LOW ();  
2.发送4个16位字。         --> SpiSend (0x8001);和 SpiSend (0x8001);和...
3.将 SPISTE 位设置为高电平。       ->SPI_LOAD_HIGH ();

每次发送16位字时、SPISTE 位都会被切换。


1) 1)使用以下代码设置进行测试时,SPISTE 是否在发送16位字(SpiSend (0x8001);)后自动切换?

2) 2)是否有任何方法可以防止这种情况?

========================================================================================================================================================

/* SPI 初始化部分*/ void InitSpi (void) { SpiaRegs.SPICCR.bit.SPISWRESET = 0; SpiaRegs.SPICCR.bit.CLKPOLARITY = 1; SpiaRegs.SPICCR.bit.SPICHAR =(16-1);// 16位字 SpiaRegs.SPICCR.bit.SPILBK = 0; //启用主设备(0 =从设备,1 =主设备) //启用传输(TALK) //时钟相位(0 =正常、1 =延迟) //禁用 SPI 中断 SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; SpiaRegs.SPICTL.bit.TALK = 1; SpiaRegs.SPICTL.bit.CLK_PHASE = 0; SpiaRegs.SPICTL.bit.SPIINTENA=0; SpiaRegs.SPIPRI.bit.TRIWIRE = 1; //设置波特率 SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;// 500kHz //设置空闲位 //在断点上停止不会停止 SPI SpiaRegs.SPIPRI.bit.FREE = 1; //解除 SPI 复位 SpiaRegs.SPICCR.bit.SPISWRESET = 1; }
/* SPI 发送函数部分*/ uint16_t SpiSend (uint16_t data) { uint16_t dmummy; SpiaRegs.SPICTL.bit.Talk = 1; SpiaRegs.SPITXBUF = data; while (SpiaRegs.SPISTS.bit.INT_flag!= 1){} DPXBUF = data;while (SpiaRegs.SpiaRegs.SPISTubummy = return; }
/*实数数据传输器件*/ void TestDataSendFunc (void) { SPI_LOAD_LOW (); // SPISTE Low SpiSend (0x8001);// 1 SpiSend (0x8001);// 2 SpiSend (0x8001);// 3 SpiSend (0x8001);// 4 SPI_LOAD_HIGH (); // SPISTE High }

======================================================================================================================================== 

感谢你能抽出时间

此致、

Lee

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Minsik:

    我假设 SPI_LOAD_LOW ()和 SPI_LOAD_HIGH ()是用于切换用作 SPISTE 的 GPIO 引脚的函数。 是这样吗? 如果是、则必须将该引脚配置为 GPIO 引脚。 更多信息、请参阅 TMS320F2837xS 技术参考手册中的 GPIO 部分。

    请注意、您使用的器件上的 SPI 确实支持 FIFO 模式。 如果启用 FIFO、最多可以背对背加载16个字符。 SPI 将保持 SPISTE 引脚为低电平、直到发送完 FIFO 中的所有字符。 有关详细信息、请参阅 C2000ware 中的任何 SPI FIFO 示例。