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.

[参考译文] TMS320F28379D:双工 SPI 数据通信问题

Guru**** 2539510 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1385972/tms320f28379d-problem-with-duplex-spi-data-communication

器件型号:TMS320F28379D
Thread 中讨论的其他器件:C2000WARE

工具与软件:

我 将尝试 在28379D 之间执行双向通信、一个作为主器件、另一个作为从器件。

我已成功执行单向通信(主器件->传输、从器件->接收器)

但是、当我尝试进行双向通信时、我遇到了问题。

主器件和从器件有时都会收到正确值、有时会收到错误值。 错误的值是我尝试发送的值或一些随机值。

用于主设备的代码

#include "F28x_Project.h"

void delay_loop (void);
void spi_xmit (uint16A);
void spi_fifo_init (void);
void SPI_init (void);
void 错误(void);

Volatile Uint16 datasend=40;
void main (void)

uint16 sdata;
UINT16 RDATA;

InitSysCtrl();

InitSpiaGpio();

颜色;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();

spi_fifo_init ();
InitSpi();

SData = 1;
for (;;)

//发送数据
spi_xmit (datasend);
DELAY_US (100);
if (SpiaRegs.SPIFFRX.bit.RXFFST!= 0){
RDATA = SpiaRegs。 SPIRXBUF;//读取接收到的数据
}


}
}

void delay_loop()

长 I;
对于(i = 0;i < 10000;i++){}
}

void 错误(void)

asm (" ESTOP0");
(;;);
}

void spi_xmit (uint16A)

SpiaRegs。 SPITXBUF = A;  
}

void spi_fifo_init ()

SpiaRegs.SPIFFRX.bit.RXFFIL = 0x00;
SpiaRegs.SPIFFRX.bit.RXFFIENA = 0x00;  
SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 0x00;
SpiaRegs.SPIFFRX.bit.RXFFINT = 0x00;
SpiaRegs.SPIFFRX.bit.RXFFST = 0x00;  
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 0x00;
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR = 0x00;  
SpiaRegs.SPIFFRX.bit.RXFFOVF = 0x00;  

SpiaRegs.SPIFFCT.all=0x0;

}


#include "F2837xD_DEVICE.h"
#include "F2837xD_examples.h"

//
//计算 BRR:7位波特率寄存器的值
// SPI CLK freq = 500kHz
// LSPCLK freq = CPU freq/4 (默认设置)
// BRR =(LSPCLK freq / SPI CLK freq)- 1
//
#if CPU_FRQ_200MHz
#define SPI_BRR ((200E6 / 4)/ 500E3)- 1
#endif

#if CPU_FRQ_150MHz
#define SPI_BRR ((150E6 / 4)/ 500E3)- 1
#endif

#if CPU_FRQ_120MHz
#define SPI_BRR ((120E6 / 4)/ 500E3)- 1
#endif

//
// InitSPI -此函数将 SPI 初始化为已知状态
//
void InitSpi (void)

//初始化 SPI-A
SpiaRegs.SPICCR.bit.SPISWRESET = 0;

SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpiaRegs.SPICTL.bit.CLK_PHASE = 1;
SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;

SpiaRegs.SPICCR.bit.SPICHAR =(16-1);
SpiaRegs.SPIFFTX.bit.SPIFFENA = 0;
SpiaRegs.SPICTL.bit.talk = 1;
SpiaRegs.SPICTL.bit.SPIINTENA = 1;// Enable SPIINTENA to Generate INT_FLAG bit on complete SPI transmission (启用 SPIINTENA 以在 SPI 传输完成时生成 INT_FLAG 位)
SpiaRegs.SPICCR.bit.SPILBK = 0;

SpiaRegs.SPICCR.bit.SPISWRESET = 1;
}

//
void InitSpiGpio()

InitSpiaGpio();
}

//
// InitSpiaGpio -初始化 SPIA GPIO
//
void InitSpiaGpio()

EALLOW;

GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//启用 GPIO16上的上拉(SPISIMOA)
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;
GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;
GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;

GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入 GPIO19 (SPISTEA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;//异步输入 GPIO19 (SPISTEA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//异步输入 GPIO19 (SPISTEA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;//异步输入 GPIO19 (SPISTEA)

GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;//将 GPIO19配置为 SPISTEA
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3;

GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;//将 GPIO19配置为 SPISTEA
GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;//将 GPIO19配置为 SPISTEA
GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;//将 GPIO19配置为 SPISTEA
GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 3;//将 GPIO19配置为 SPISTEA

EDIS;
}

//
//文件结尾
//

生成中断

#include "F28x_Project.h"

void delay_loop (void);
void spi_xmit (uint16A);
void spi_fifo_init (void);
void SPI_init (void);
void 错误(void);
Volatile Uint16 datasend = 450;//发送数据

uINT16 RDATA;//接收到的数据
void main (void)

InitSysCtrl();
InitSpiaGpio();
颜色;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();

spi_fifo_init ();//初始化 SPI FIFO
InitSpi();
for (;;)

spi_xmit (datasend);//发送数据
DELAY_US (100);
if (SpiaRegs.SPIFFRX.bit.RXFFST!= 0){
RDATA = SpiaRegs。 SPIRXBUF;//读取接收到的数据以清除 RX FIFO
}
}
}


void 错误(void)

asm (" ESTOP0");//测试失败!! 停下来!
(;;);
}

void spi_xmit (uint16A)

// while (SpiaRegs.SPIFFTX.bit.TXFFST >= 16){}//如果 TX FIFO 已满、则等待
SpiaRegs。 SPITXBUF = A;
}

void spi_fifo_init ()

SpiaRegs.SPIFFRX.bit.RXFFIL = 0x00;  
SpiaRegs.SPIFFRX.bit.RXFFIENA = 0x00;  
SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 0x00;  
SpiaRegs.SPIFFRX.bit.RXFFINT = 0x00;  
SpiaRegs.SPIFFRX.bit.RXFFST = 0x00;  
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 0x00;
SpiaRegs.SPIFFRX.bit.RXFFOVFCLR = 0x00;  
SpiaRegs.SPIFFRX.bit.RXFFOVF = 0x00;  

SpiaRegs.SPIFFCT.all=0x0;

}
#include "F2837xD_DEVICE.h"
#include "F2837xD_examples.h"

//
//计算 BRR:7位波特率寄存器的值
// SPI CLK freq = 500kHz
// LSPCLK freq = CPU freq/4 (默认设置)
// BRR =(LSPCLK freq / SPI CLK freq)- 1
//
#if CPU_FRQ_200MHz
#define SPI_BRR ((200E6 / 4)/ 500E3)- 1
#endif

#if CPU_FRQ_150MHz
#define SPI_BRR ((150E6 / 4)/ 500E3)- 1
#endif

#if CPU_FRQ_120MHz
#define SPI_BRR ((120E6 / 4)/ 500E3)- 1
#endif

//
// InitSPI -此函数将 SPI 初始化为已知状态
//
void InitSpi (void)

//初始化 SPI-A
SpiaRegs.SPICCR.bit.SPISWRESET = 0;

SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 1;
SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;

SpiaRegs.SPICCR.bit.SPICHAR =(16-1);
SpiaRegs.SPIFFTX.bit.SPIFFENA = 0;
SpiaRegs.SPICTL.bit.talk = 1;// Receiver mode enabled (SpiaRegs.SPICTL.bit.talk = 1)
SpiaRegs.SPICTL.bit.SPIINTENA = 1;
SpiaRegs.SPICCR.bit.SPILBK = 0;

SpiaRegs.SPICCR.bit.SPISWRESET = 1;
}


void InitSpiGpio()

InitSpiaGpio();
}

//
// InitSpiaGpio -初始化 SPIA GPIO
//
void InitSpiaGpio()

EALLOW;

GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;//启用 GPIO58上的上拉(SPISIMOA)
GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;//启用 GPIO59上拉(SPISOMIA)
GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;//启用 GPIO60上的上拉(SPICLKA)
GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;// Enable pio61 (SPISTEA)上拉

GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;//异步输入 GPIO58 (SPISIMOA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;//异步输入 GPIO59 (SPISOMIA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;//异步输入 GPIO60 (SPICLKA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;//异步输入 GPIO61 (SPISTEA)

GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;//将 GPIO58配置为 SPISIMOA
GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;//将 GPIO59配置为 SPISOMIA
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;//将 GPIO60配置为 SPICLKA
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3;//将 GPIO61配置为 SPISTEA

GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;//将 GPIO58配置为 SPISIMOA
GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;//将 GPIO59配置为 SPISOMIA
GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;//将 GPIO60配置为 SPICLKA
GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 3;//将 GPIO61配置为 SPISTEA

EDIS;
}

//
//文件结尾
//

示波器数据

黄色:MOSI

粉色:时钟选择

蓝色:MISO

MOSI 的数据似乎大多是正确的、但在 MISO 中、错误更多。

有人可以帮我解决这个问题吗?

我曾尝试使用 FIFO、但在这种情况下、从器件似乎卡住了。

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

    您好!

    您是否已参考过我们的 C2000Ware 软件示例? 如果没有、请务必参考。

    • 基于位域的示例: C:\ti\c2000\C2000Ware_5_02_00_00\device_support\f2837xd\examples\cpu1
    • 基于 Driverlib 的示例: C:\ti\c2000\C2000Ware_5_02_00_00\driverlib\f2837xd\examples\cpu1\spi
      • 这里有一个外部环回示例、用于在两个 SPI 模块之间进行通信、您可能会觉得有用。

    这些示例中的大多数也会实施 FIFO 模式-在尝试实施 FIFO 时、您的意思是它"卡住"? 另外、请务必查看配置以比较您的初始化、并在 CCS 中监视 SPI 寄存器(使用持续刷新)的同时使用"Step Into"和"Step Over"调试按钮进行调试、以验证您的程序运行情况-请告诉我结果/任何发现。

    此致、

    Allison

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

    谢谢您的建议。

    我已查看此示例、

    基于 Driverlib 的示例: C:\ti\c2000\C2000Ware_5_02_00_00\driverlib\f2837xd\examples\cpu1\spi


    中断的环回示例正常工作。 因此、我尝试了针对与以前相同的设置重写它。 即两个28379d 相互通信。

    主机的代码

    #include "F28x_Project.h"
    
    volatile Uint16 sdata[2];     // Send data buffer
    Uint16 rdata[2];     // Receive data buffer
    Uint16 rdata_point;  // Keep track of where we are
    volatile Uint16 send1 = 520;
    volatile Uint16 send2 = 550;
    void delay_loop(void);
    void spi_fifo_init(void);
    void error();
    
    void main(void)
    {
       Uint16 i;
    
       InitSysCtrl();
    
       InitSpiaGpio();
    
       DINT;
       IER = 0x0000;
       IFR = 0x0000;
    
       InitPieCtrl();
    
       InitPieVectTable();
    
       spi_fifo_init();   // Initialize the SPI only
    
       for(i=0; i<2; i++)
       {
          sdata[i] = i;
       }
       rdata_point = 0;
    
       IER=0x20;                              // Enable CPU INT6
       EINT;
       while(1){
    
    
           for(i=0;i<2;i++)
           {
              SpiaRegs.SPITXBUF=sdata[i];      // Send data
           }
    
           sdata[0] = send1;
           sdata[1] = send2;
    //       }
    
           if(SpiaRegs.SPIFFRX.bit.RXFFST != 0){
               for(i=0; i<2; i++)
               {
                   rdata[i]=SpiaRegs.SPIRXBUF;     // Read data
               }
           }
    
       }
    }
    
    void delay_loop()
    {
        long i;
        for (i = 0; i < 1000000; i++) {}
    }
    
    void error(void)
    {
        asm("     ESTOP0");  //Test failed!! Stop!
        for (;;);
    }
    
    void spi_fifo_init()
    {
        SpiaRegs.SPIFFTX.all = 0xC022;    // Enable FIFOs, set TX FIFO level to 2
        SpiaRegs.SPIFFRX.all = 0x0022;    // Set RX FIFO level to 2
        SpiaRegs.SPIFFCT.all = 0x00;
    
        SpiaRegs.SPIFFTX.bit.TXFIFO=1;
        SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
    
        InitSpi();
    }
    

    主设备的设置

    #include "F2837xD_device.h"
    #include "F2837xD_Examples.h"
    
    #if CPU_FRQ_200MHZ
    #define SPI_BRR        ((200E6 / 4) / 500E3) - 1
    #endif
    
    #if CPU_FRQ_150MHZ
    #define SPI_BRR        ((150E6 / 4) / 500E3) - 1
    #endif
    
    #if CPU_FRQ_120MHZ
    #define SPI_BRR        ((120E6 / 4) / 500E3) - 1
    #endif
    
    //
    // InitSPI - This function initializes the SPI to a known state
    //
    void InitSpi(void)
    {
        SpiaRegs.SPICCR.bit.SPISWRESET = 0;
        SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
        SpiaRegs.SPICCR.bit.SPICHAR = (16-1);
        SpiaRegs.SPICCR.bit.SPILBK = 0;
    
        SpiaRegs.SPICTL.bit.SPIINTENA = 1;
        SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
        SpiaRegs.SPICTL.bit.TALK = 1;
        SpiaRegs.SPICTL.bit.CLK_PHASE = 0;
    
        SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;
    
        SpiaRegs.SPICCR.all =0x00CF; // Relinquish SPI from Reset
        SpiaRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission
    }
    
    //
    void InitSpiGpio()
    {
       InitSpiaGpio();
    }
    
    void InitSpiaGpio()
    {
       EALLOW;
    
        GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;
        GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;
        GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;
        GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;
    
        GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;
        GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;
        GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;
        GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;
    
        GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;
        GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;
        GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;
        GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3;
    
        GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;
        GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;
        GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;
        GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 3;
    
    
        EDIS;
    }
    

     从属方的代码

    #include "F28x_Project.h"
    
    Uint16 sdata[2];     // Send data buffer
    Uint16 rdata[2];     // Receive data buffer
    Uint16 rdata_point;  // Keep track of where we are
                         // in the data stream to check received data
    volatile Uint16 send1 = 420;
    volatile Uint16 send2 = 450;
    void delay_loop(void);
    void spi_fifo_init(void);
    void error();
    
    void main(void)
    {
       Uint16 i;
    
       InitSysCtrl();
    
       InitSpiaGpio();
    
       DINT;
       IER = 0x0000;
       IFR = 0x0000;
    
       InitPieCtrl();
    
       InitPieVectTable();
    
       spi_fifo_init();   // Initialize the SPI only
    
       for(i=0; i<2; i++)
       {
          sdata[i] = i;
       }
       rdata_point = 0;
    
       IER=0x20;                              // Enable CPU INT6
       EINT;                                  // Enable Global Interrupts
    
        while(1){
    
            if(SpiaRegs.SPIFFRX.bit.RXFFST != 0){
                for(i=0; i<2; i++)
                {
                    rdata[i]=SpiaRegs.SPIRXBUF;     // Read data
                }
            }
    
            for(i=0; i<2; i++)
            {
                SpiaRegs.SPITXBUF=sdata[i];     // Read data
            }
            sdata[0]=send1;
            sdata[1]=send2;
        }
    }
    
    void delay_loop()
    {
        long i;
        for (i = 0; i < 1000000; i++) {}
    }
    
    void error(void)
    {
        asm("     ESTOP0");  //Test failed!! Stop!
        for (;;);
    }
    
    void spi_fifo_init()
    {
    
        SpiaRegs.SPIFFTX.all = 0xC022;    // Enable FIFOs, set TX FIFO level to 2
        SpiaRegs.SPIFFRX.all = 0x0022;    // Set RX FIFO level to 2
        SpiaRegs.SPIFFCT.all = 0x00;
    
        SpiaRegs.SPIFFTX.bit.TXFIFO=1;
        SpiaRegs.SPIFFRX.bit.RXFIFORESET=1;
    
        InitSpi();
    }


    以介绍从设备的设置

    #include "F2837xD_device.h"
    #include "F2837xD_Examples.h"
    
    #if CPU_FRQ_200MHZ
    #define SPI_BRR        ((200E6 / 4) / 500E3) - 1
    #endif
    
    #if CPU_FRQ_150MHZ
    #define SPI_BRR        ((150E6 / 4) / 500E3) - 1
    #endif
    
    #if CPU_FRQ_120MHZ
    #define SPI_BRR        ((120E6 / 4) / 500E3) - 1
    #endif
    
    void InitSpi(void)
    {
        SpiaRegs.SPICCR.bit.SPISWRESET = 0;
        SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;
        SpiaRegs.SPICCR.bit.SPICHAR = (16-1);
        SpiaRegs.SPICCR.bit.SPILBK = 0;
    
        SpiaRegs.SPICTL.bit.SPIINTENA = 1;
        SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0;
        SpiaRegs.SPICTL.bit.TALK = 1;
        SpiaRegs.SPICTL.bit.CLK_PHASE = 0;
    
        SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;
    
        SpiaRegs.SPICCR.all = 0x00CF;
        SpiaRegs.SPIPRI.bit.FREE = 1;
    }
    
    void InitSpiGpio()
    {
       InitSpiaGpio();
    }
    
    void InitSpiaGpio()
    {
       EALLOW;
    
        GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;
        GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;
        GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;
        GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;
    
        GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3;
        GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3;
        GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3;
        GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3;
    
        GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3;
        GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3;
        GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3;
        GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3;
    
        GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3;
        GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3;
        GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3;
        GpioCtrlRegs.GPBGMUX2.bit.GPIO61 = 3;
    
        EDIS;
    }
    

    问题

    现在的问题是、主器件和从器件都接收随机值

      

    时钟选择线也有一些峰值。
    此外、在这些情况下、时钟信号也会产生干扰

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

    您好!

    很抱歉耽误了一些时间、但请再给我1-2天时间来查看这些信息。 感谢您的耐心!

    此致、

    Allison

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

    您好!

    我想询问是否存在硬件连接/定制 PCB 方面的问题? 我觉得、在图像中指定范围的信号看起来不干净。 另外、您能否标记这些线、以便我知道哪一个是? 我们应该清楚地看到通信期间芯片选择变为低电平、时钟脉冲以及在每条线上传输的干净数据。

    您在示波器上看到的结果与在寄存器中看到的结果是否一致? 还是您说在线路上发送了正确的数据、但在软件中接收到了错误的数据?

    此致、

    Allison

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

    您好!

    我已根据您的建议查看了我的连接、并且我意识到这两个 DSP 电路板应该共享一个公共地。 这解决了我的噪声信号问题。 至于片选问题、在主控 DSP 中、数据传输时强制 GIPO61为低电平、数据传输完成后强制为高电平。
    此外、我使用 while 循环来监控 FF 寄存器和设置(SpiaRegs.SPIFFRX.bit.RXFFST!= 2. )因为我一次发送两个数据。

    我现在唯一不明白的部分是为什么 当 GIPO61 (时钟选择、黄色)为高电平时 SPISOMIA (蓝色)中有一些信号。 但它不会影响数据传输、所以我可以说我的问题已经解决!

    感谢您的帮助!

    此致、

    Bijen Mali.

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

    很高兴听到它得到了解决! 我将继续、关闭该主题。 如果您遇到问题、可以随时打开新问题。

    此致、

    Allison