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/TMS320F2.8379万D:CCS/TMS320F2.8379万D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/659062/ccs-tms320f28379d-ccs-tms320f28379d

部件号:TMS320F2.8379万D
线程中讨论的其他部件:DRV8711TMS320F2.8035万LAUNCXL-F2.8379万D

工具/软件: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。 但结果仍然一样。 我无法理解导致从属设备无法读取数据的原因。  

    e2e.ti.com/.../waveform-.docx

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

    您好,Nibit,

    您能否确认您正在使用哪个Launchpad (如果可能,发送确切的部件号)?  在F2.8377万S启动板上,您尝试使用的某些特定PIN存在一些已知问题。  我怀疑这可能是同样的事情。  

    下面是有关GPIO63/65问题的线程(跳至末尾查看答案详细信息)。

    此致,

    克里斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    C2000 Launchpad XL TMS320F2.8379万D版本:1.1
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你。

    这款启动板在电平转换器上似乎有不同的GPIO,因此可能不是同一个问题。 当F2.8035万未连接到从属设备时,您发送的波形就会出现。 是这样吗? 如果是,您可以在连接波形时向我们展示波形吗?

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

    以下是与F2.8035万相连的从属波形

    e2e.ti.com/.../waveform-with-slave-connected.docx

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

    您是否可以共享接线图?
    您提到您有一台LAUNCHTXL-F2.8379万D,但我不确定您的F2.8035万是什么。 关于主板/系统如何连接的基本原理图很好。 请包括电源和接地连接以及两个板之间的任何其他接口。

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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它们有着共同的基础,3.3 由师父提供。

    谢谢!
    Nihit Shah
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在InitSpiGpio()函数后,从机SPI信号上的电压下降。
    //////////////////////////////////////////////////


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

    Nikit,

    请查看F2.8379万D的GPIO配置。 GPxMUXy不能将'15'作为值。 最大值为3。 F2837x器件的GPIO mux有两个阶段,一个组mux (GPyGMUXy)和一个mux (GPxMUXy)。 在设置GPxMUXy之前,必须先设置GPxGMUXy。 基本上,您的代码没有在从属设备上正确设置GPIO。 请先修复该问题。

    接下来,我建议确保主设备上的电源能够为从设备提供足够的电源。 F2.8379万D的功耗比F2803x更大。 验证您的电源也没有达到电流限制。

    我认为这只是你们的全球业务目标上的争论,但希望这就是问题所在。 很抱歉,我没有注意到您第一次共享GPIO代码。

    标记

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

    我完全忽略了组MUX和GPxMUXy不能将'15'作为值的事实。 非常感谢,我启动并运行了SPI。

    非常感谢,
    Nihit Shah