请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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