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.

[参考译文] TMS320F28062:TMS320F28062

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/649624/tms320f28062-tms320f28062

器件型号:TMS320F28062

尊敬的先生

   在我自己的 TMS320F28062设计中、我希望通过 SPI-B 通道 (8位)与 TMC429-LI 通信、但有一些问题。 当我发送数据时、数据将存储 TX 缓冲区、但 SPIDAT 寄存器垃圾值。然后在接收到 RX 缓冲区垃圾中的值后。   SPI 参数和功能如下所示。

空 InitSpibGpio (空)

EALLOW;

GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;//启用 GPIO12上的上拉电阻器(SPISIMOB)
GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;//启用 GPIO13上的上拉电阻器(SPISOMIB)
GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0;//启用 GPIO14上的上拉电阻(SPICLKB)
GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0;//启用 GPIO15上的上拉电阻器(SPISTEB)

GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 3;//异步输入 GPIO12 (SPISIMOB)
GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 3;//异步输入 GPIO13 (SPISOMIB)
GpioCtrlRegs.GPAQSEL1.bit.GPIO14 = 3;//异步输入 GPIO14 (SPICLKB)
GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3;//异步输入 GPIO15 (SPISTEB)

GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 3;//将 GPIO12配置为 SPISIMOB
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 3;//将 GPIO13配置为 SPISOMIB
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 3;//将 GPIO14配置为 SPICLKB
GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 3;//将 GPIO15配置为 SPISTEB

EDIS;

void SPI_initB (void)

SpibRegs.SPICCR.all =0x0007;  
SpibRegs.SPICTL.ALL =0x0006;  

SpibRegs.SPIBRR = 0x007F;    // SPI 波特率= LSPCLK/(SPIBRR+1)=32/16 =2MHz
SpibRegs.SPICCR.ALL =0x00C7;  

SpibRegs.SPIPRI.bit.FREE = 1;  //设置断点以避免干扰 xmission

void SPI_Fifo_initB()

SpibRegs.SPIFFTX.All=0xE040;  

SpibRegs.SPIFFRX.All=0x2044;  
SpibRegs.SPIFFCT.All=0x0000;  

空 InitSPI429 (空)

InitSpibGpio();

//初始化 SPI FIFO
SPI_Fifo_initB();

//初始化 SPI
SPI_initB();

空 Write428Short (UINT8地址、Int32值)

uint8 Write[4]、Read[4];

write[0]=地址;
写入[1]=0;
write[2]=值>> 8;
write[3]= value 和0xff;

ReadWrite428 (读、写);

int32 Read428Short (uint8地址)

UINT8读[4]、写[4];
int32结果;

WRITE[0]=地址|TMC428_READ;  TMC428_READ 为1  
写入[1]=0;
write[2]= 0;
write[3]= 0;

ReadWrite428 (读、写);

Result =(read[2]<<8)|(read[3]);
if (read[2]& 0x08) result|=0xf000;

返回结果;

空 ReadWrite428 (UINT8 *读取、UINT8 *写入)

int i;

for (i=0;i<4;i++)

SpibRegs.SPITXBUF=((UINT16) Write[I]<<8);

while (SpibRegs.SPIFFRX.bit.RXFFST!=1){}//等待数据被接收

read[i]=(SpibRegs.SPIRXBUF & 0xFFFF);//在 Rx 缓冲器中获取数据


#include "DSP28x_Project.h"//器件头文件和示例 include 文件
#include "F2806x_Device.h"
#include "TMC429_Register.h"
Int32 Amath;

 void main (void)

InitSysCtrl();

Dint;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();

TMC429_Enbl();   // TMC429时钟使能16MHz

InitSPI429 ();    // SPI B 初始化

Write428Short (IDX_AMAX|MOTOR0、2047);   // IDX_AMAX 12、MOTOR0、value

AMAX=Read428Short (IDX_AMAX);      //读取值

请提出任何建议。

Divyesh。

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

    尊敬的先生

       8位字符长度内的任何 TMS320F28062 SPI-B 通道的使用、如果有任何使用、请获取任何建议。 我在等。

    Divyesh。

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

    您能否在 C2000器件上执行回送测试、以查看您是否正在接收发送的内容。 您可以在 SPI 中使用环回模式。 如果可行、请检查两个器件上的时钟速率和极性是否匹配。

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

    几周以来、我们一直没有收到您的意见。 因此,我假设您能够解决您的问题。 如果没有、请回复此主题

    谢谢、此致、
    Veena