主题中讨论的其他器件: ADS8688、 MSPM0G3507
工具/软件:
我当前正在使用 MSPM0G3507-Q1芯片的 SPI 功能;下面是我的功能简介、我将 MSPM0G3507-Q1设置为主机、将 ADS8688设置为从器件、主机发送命令代码(0x00000000、0xA0000000)、数据从从从从器件收集并返回到主机。 这是我预期的过程、但在使用期间、我无法接收机器返回的数据(确切地说、我在程序中设置了接收中断、并在中断中添加了断点验证、进入中断是正常的、但我无法读取 RxData 寄存器中的数据、检测到 RXFIFO 的状态、无法读取 RXDATA 寄存器中的数据。 它显示为非空)。 我使用了从机器中的示波器 PICO、POCI、CLK、CS 引脚来显示波形是否正确。 原因是什么? 如何应对?
下面是我的程序代码和示波器图片的一部分
//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; }

