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.
工具/软件:Code Composer Studio
您好,
我在F2.8035万作为主服务器和F2.8379万DZ作为从服务器之间进行了一个小SPI测试。 我的联系人是从主的SIMO到从的SIMO,从主的SCLK到从的SCLK,从主的SPISTE到从的SPISTE。 两个委员会有着共同的基础。 所有SPI连接的电压均为3.3V。
主代码:
UINT16 sdata= 0x0001;
对于(;;)
{
SpiaRegs.SPITXBUF=sdata;
while (SpiaRegs.SPIFFRX.bit.RXFFST !=1){}
sdata++;
delay_loop();
}
void delay_loop()
{
长I;
用于(i = 0;i < 1000万;I++){}
}
void spi_fifo_init()
{
//初始化SPI FIFO寄存器
SpiaRegs.SPICCR.bit.SPISWRESET=0;//重置SPI
SpiaRegs.SPICCR.all=0x000F;//16位字符,环回模式
SpiaRegs.SPICTL.All=0x0017;//启用中断,启用主/从Xmit
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.SPIBRR=0x0063;//波特率
SpiaRegs.SPIFFTX.all=0xC022;//启用FIFO,将TX FIFO级别设置为4
SpiaRegs.SPIFFRX.all=0x0022;//将RX FIFO级别设置为4
SpiaRegs.SPIFFCT.All=0x00;
SpiaRegs.SPIPRI.All=0x0010;
SpiaRegs.SPICCR.bit.SPISWRESET=1;//启用SPI
SpiaRegs.SPIFFTX.Bit.TXFIFO = 1;
SpiaRegs.SPIFFRX.Bit.RXFIFORESET=1;
}
从属代码:
void spi_fifo_init()
{
//初始化SPI FIFO寄存器
SpiaRegs.SPICCR.bit.SPISWRESET=0;//重置SPI
SpiaRegs.SPICCR.all=0x000F;//16位字符,环回模式
SpiaRegs.SPICTL.All=0x0013;//启用中断,启用主/从Xmit
SpiaRegs.SPISTS.all=0x0000;
SpiaRegs.SPIBRR.All=0x0063;//波特率
SpiaRegs.SPIFFTX.all=0xC022;//启用FIFO,将TX FIFO级别设置为4
SpiaRegs.SPIFFRX.all=0x0022;//将RX FIFO级别设置为4
SpiaRegs.SPIFFCT.All=0x0000;
SpiaRegs.SPIPRI.All=0x0010;
SpiaRegs.SPICCR.bit.SPISWRESET=1;//启用SPI
SpiaRegs.SPIFFTX.Bit.TXFIFO = 1;
SpiaRegs.SPIFFRX.Bit.RXFIFORESET=1;
}
中断无效spiRxFifoIsr (无效)
{
RDATA=SpiaRegs.SPIRXBUF;//读取数据
SpiaRegs.SPIFFRX.Bit.RXFFOVFCLR=1;//清除溢出标志
SpiaRegs.SPIFFRX.Bit.RXFFINTCLR=1;//清除中断标志
PieCtrlRegs.PIEACK.all|=0x20;//发出pie ack
}
//////////////////////////////////////////////////////////////////////////////
主代码(F2.8035万)永远等待While (SpiaRegs.SPIFFRX.bit.RXFFST!=1){}循环,而从代码从不接收RDATA中的任何内容。
信号在Picoscope上永远都是3.3 V。 以前我使用F2.8035万驾驶DRV8711,相同的SPI编码也适用于我。
我在这里错过了什么吗? 可能在连接上?
谢谢!
Nihit Shah
这是用于Launchpad TMS320F2.8379万D (从属)的SPI引脚配置
void InitSpibGpio()
{
EALLOW;
gpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;//在GPIO63上启用上拉(SPISIMOB)
gpioCtrlRegs.GPCPUD.bit.GPIO64 = 0;//在GPIO64上启用上拉(SPISOMIB
GpioCtrlRegs.GPCPUD.bit.GPIO65 = 0;//在GPIO65上启用上拉(SPICLKB)
gpioCtrlRegs.GPCPUD.bit.GPIO66 = 1;//在GPIO66上启用上拉(SPISTEB)
gpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3;//异步输入GPIO63 (SPISIMOB)
gpioCtrlRegs.GPCQSEL1.bit.GPIO64 = 3;//异步输入GPIO64 (SPISOMIB)
gpioCtrlRegs.GPCQSEL1.bit.GPIO65 = 3;//异步输入GPIO65 (SPICLKB)
gpioCtrlRegs.GPCQSEL1.bit.GPIO66 = 3;//异步输入GPIO66 (SPISTEB)
gpioCtrlRegs.GPBMUX2.bit.GPIO63 = 15;//将GPIO63配置为SPISIMOB
GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 15;//将GPIO64配置为SPISOMIB
GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 15;//将GPIO65配置为SPICLKB
GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 15;//将GPIO66配置为SPISTEB
EDIS;
}
这是用于TMS320F2.8035万 (主)的SPI引脚配置
void InitSpiaGpio()
{
EALLOW;
gpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;//在GPIO16上启用上拉(SPISIMOA)
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;//在GPIO17上启用上拉(SPISOMIA)
GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;//在GPIO18上启用上拉(SPICLKA)
GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;//在GPIO19上启用上拉(SPISTEA)
gpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3;//异步输入GPIO16 (SPISIMOA)
gpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3;//异步输入GPIO17 (SPISOMIA)
gpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3;//异步输入GPIO18 (SPICLKA)
gpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3;//异步输入GPIO19 (SPISTEA)
gpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1;//将GPIO16配置为SPISIMOA
gpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1;//将GPIO17配置为SPISOMIA
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1;//将GPIO18配置为SPICLKA
gpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1;//将GPIO19配置为SPISTEA
EDIS;
}
////////////////////////////////////////////////////////////////////////////
我可以从F2.8035万发送数据,但无法在Launchpad上捕获任何数据。 下面的文档包含蓝色表示时钟,金色表示芯片选择,绿色表示MOSI的波形。 当主中继器工作时,这些信号为3.3 V,当从中继器连接并准备就绪时,信号就会下降到2.3 V。我尝试使用1K欧姆电阻将从中继器上的信号向上拉至3.3 V。 但结果仍然一样。 我无法理解导致从属设备无法读取数据的原因。
以下是与F2.8035万相连的从属波形
Nikit,
请查看F2.8379万D的GPIO配置。 GPxMUXy不能将'15'作为值。 最大值为3。 F2837x器件的GPIO mux有两个阶段,一个组mux (GPyGMUXy)和一个mux (GPxMUXy)。 在设置GPxMUXy之前,必须先设置GPxGMUXy。 基本上,您的代码没有在从属设备上正确设置GPIO。 请先修复该问题。
接下来,我建议确保主设备上的电源能够为从设备提供足够的电源。 F2.8379万D的功耗比F2803x更大。 验证您的电源也没有达到电流限制。
我认为这只是你们的全球业务目标上的争论,但希望这就是问题所在。 很抱歉,我没有注意到您第一次共享GPIO代码。
标记