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.

[参考译文] MSPM0G3507-Q1:SPI 通信无法读取 RXDATA 寄存器

Guru**** 2391825 points
Other Parts Discussed in Thread: MSPM0G3507-Q1, ADS8688

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1493466/mspm0g3507-q1-the-spi-communication-cannot-read-the-rxdata-register

器件型号:MSPM0G3507-Q1
主题中讨论的其他器件: ADS8688

工具与软件:

你好:μ A

我现在正在使用 MSPM0G3507-Q1功能 SPI 芯片的;下面是我的函数介绍、我设置 MSPM0G3507-Q1为 ADS8688、主机发送命令代码(从设备)、数据从0x00000000、0xA0000000机器收集并返回给主机。以上就是我预期的过程、但是在使用过程中、我无法收到机器返回的数据(准确地说、我在程序中设置了接收中断、并在中断中添加了断点验证、进入中断是正常的、但是我无法读取从设备为主机、设 RxData 寄存器中的数据、我检测到 RXFIFO 的状态、它显示为非空)。我在从机中使用示波器 PICO 引脚显示波形是否正确。造成这种情况的原因是什么?如何处理呢?POCI、CLK、CS、
下面是我的程序代码和示波器图片的一部分 μ A

//Initial configuration of SPI
void SPI0_INIT()
{
    //设置时钟源和分频
    mySPI0->CLKSEL.bit.SYSCLK_SEL=1;
    mySPI0->CLKDIV.bit.RATIO=0;

    mySPI0->CTL0.bit.CSSEL=1;    //CS线的选择
    mySPI0->CTL0.bit.DSS=0xF;    //数据尺寸
    mySPI0->CTL0.bit.SPH=1;      //极性相位
    mySPI0->CTL0.bit.SPO=0;
    mySPI0->CTL0.bit.FRF=1;      //传输帧格式,
    mySPI0->CTL1.bit.PES=0;      //偶数奇偶校验模式
    mySPI0->CTL1.bit.CP=1;       //控制器或外设模式选择
    mySPI0->CTL1.bit.PTEN=0;     //发送奇偶校验
    mySPI0->CTL1.bit.PREN=0;     //接收奇偶校验
    mySPI0->CTL1.bit.MSB=1;      //传输的开始端,高位优先

    //串行时钟分频器:用于产生SPI的发送和接收比特率
    mySPI0->CLKCTL.bit.SCR=0xE;

    //设置RX和TX FIFO中断阈值级别
    mySPI0->IFLS.bit.RXIFLSEL=0x2;
    mySPI0->IFLS.bit.TXIFLSEL=0x2;

    //使能接收中断
    //mySPI0->C_IMASK.reg=0xFF;
    //mySPI0->C_IMASK.bit.TXEMPTY=1;
    mySPI0->C_IMASK.bit.IDLE=1;
    mySPI0->C_IMASK.bit.RX=1;
    //mySPI0->C_IMASK.bit.RXFULL=1;
    //mySPI0->C_IMASK.bit.DMA_DONE_RX=1;

    //使能
    mySPI0->CTL1.bit.ENABLE=1;
}


//Interrupt part
switch (mySPI0->C_IIDX.bit.STAT)
    {
        case 0x4:                                    //接收中断
        {
            ALLFC.P01.FC[10]++;//mySPI0->C_IMASK.reg;
            SPI.RxCount--;
            SPI.RxDataW[SPI.RxCount]=mySPI0->RXDATA;
            if(SPI.RxCount==0)
            {
                ALLFC.P01.FC[11]++;
                SPI.TimeOut=0;
                SPI_RX();
            }
            break;
        }
        
        
        
//Sending part
void    SPI_TX32(Uint32 _Data)              //SPI发送函数
{
    if(SPI.Busy) return;
    SPI.TxD32=_Data;
    SPI.TxCount=2;
    SPI.RxCount=2;

    mySPI0->TXDATA = SPI.TxDataW[1];
    mySPI0->TXDATA = SPI.TxDataW[0];
    SPI.Busy=5;
}