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.

[参考译文] TMS320F28335:作为主器件运行时 SPISTEA 信号出现问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/587642/tms320f28335-problem-with-spistea-signal-when-operating-as-master

器件型号:TMS320F28335
主题中讨论的其他器件:DAC80004

您好!

我尝试使用 SPI 模块中给出的中断示例进行回送- Example_2833xSpi_FFDLB_int.c 我已将 GPIO16-19配置为 SPI 操作。 GPIO19上的 SPISTE 信号没有任何变化。 根据操作手册、SPISTE 应在传输前由主器件取为低电平、并应在传输完成后驱动为高电平。 但引脚 GPIO19在整个运行期间保持低电平。 我可以使用示波器从主输出引脚(18和16)看到时钟信号和数据。 正如我所理解的、SPISTE 信号应用作我的应用的片选信号。  

此处给出了 GPIO 的配置。

空 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)

/*使用 GPIO 寄存器配置 SPI-A 引脚*/
//这指定哪些可能的 GPIO 引脚将是 SPI 功能引脚。
//注释掉其他不需要的行。

   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

   GpioCtrlRegs.GPBMUX2.ALL = 0;      // GPIO63... GPIO48 =通用 I/O
   GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;      // GPIO60作为输出
   EDIS;

主代码与模块中给出的示例代码相同。

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

    是否可以尝试删除此行?

    GpioCtrlRegs.GPBMUX2.ALL = 0; // GPIO63... GPIO48 =通用 I/O

    您还可以在初始化期间检查并确保 SPISTE 被正确设置为高电平。

    希望这对您有所帮助!

    Vince Rodriguez
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、如果您要发送多个字、只要有数据要传输、我们的 SPI 就不会切换 SPISTE。

    如果在各个字之间添加延迟、您应该会看到 SPISTE 转换。

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

    尊敬的 Vince:

    添加延迟是成功的。 我使用 FIFO 将两个16位字写入 TXBUF、在 TX-ISR 开始时、我添加了一个延迟环路。 正如我预期的那样、SPISTE 信号每32个时钟周期切换一次、这正是我使用 DAC80004所需的。  非常感谢您的帮助。

    此处给出了用于传输的 ISR。

    _interrupt void spiTxFifoIsr (void)

        uint16 i;
       delay_loop();
        for (i=0;i<2;i++)
       {
          SpiaRegs.SPITXBUF=sdata[i];     //发送数据
       }
       SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1; //清除中断标志
       PieCtrlRegs.PIEACX.All|=0x20;       //发出 PIE ACK

    Deepthi