Part Number:TMS320C6748
选用的是SPI0硬件,但是一直配置不成功,下面是相关函数,希望有人帮帮我
UINT32 TEST_spi_flash(void)
{
// UINT32 rtn;
// UINT32 i;
// 管脚复用配置
// RK6748_lpscTransition(PSC0, DOMAIN0, LPSC_SPI0, PSC_ENABLE);
PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_SPI0, PSC_POWERDOMAIN_ALWAYS_ON,
PSC_MDCTL_NEXT_ENABLE);
GPIOBankPinMuxSet();
// DSP 中断初始化
InterruptInit();
// SPI 初始化
SPIInit();
GPIOINIT();//用gpio模拟了reset
}
void SPIInit(void)
{
unsigned char cs = 0x08;
unsigned char dcs = 0x08;
unsigned int val = SIMO_SOMI_CLK_CS;
SPIReset(SOC_SPI_0_REGS);
SPIOutOfReset(SOC_SPI_0_REGS);
SPIModeConfigure(SOC_SPI_0_REGS, SPI_MASTER_MODE);
SPIClkConfigure(SOC_SPI_0_REGS, 228000000, 1500000, SPI_DATA_FORMAT0);
SPIPinControl(SOC_SPI_0_REGS, 0, 0, &val);
SPIDefaultCSSet(SOC_SPI_0_REGS, dcs);
// 配置 SPI 数据格式
SPIDataFormatConfig(SPI_DATA_FORMAT0);
// 配置 SPI 数据格式及片选信号
SPIDat1Config(SOC_SPI_0_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), cs);
// 映射中断到 INT1
SPIIntLevelSet(SOC_SPI_0_REGS, SPI_RECV_INTLVL | SPI_TRANSMIT_INTLVL);
// 使能 SPI
SPIEnable(SOC_SPI_0_REGS);
}
//我的数据收发函数
uint8_t SPI_ReadWriteByte(uint8_t txData)
{
// while (SPI_I2S_GetFlagStatus(WIZ_SPIx, SPI_I2S_FLAG_TXE) == RESET);
while( HWREG(SOC_SPI_0_REGS + SPI_SPIBUF) & (0x20000000));
SPITransmitData1(SOC_SPI_0_REGS,txData);
while( HWREG(SOC_SPI_0_REGS + SPI_SPIBUF) & (0x80000000));
return SPIDataReceive(SOC_SPI_0_REGS);
}
Shine:
可以先使用SPI内部自环loopback模式,看SPI寄存器的配置有没有问题?
,
q q:
请问自环模式怎么用,我这方面没什么技术经验
,
Shine:
SPIGCR1寄存器里有个LOOPBACK位。可以看一下SPI手册上的2.11.1 SPI Internal Loopback Test Mode (Master Only) https://www.ti.com/lit/ug/sprugp2a/sprugp2a.pdf
,
q q:
配置没有问题了,但是收发函数有问题,怎么写都不能读到W5500正确回码
,
Shine:
请问有量过时序么?看一下时序上是否匹配?
,
q q:
量过了,配置正确了,但是收发函数不对,而且在sendto判断ok里面死循环了
,
Shine:
如果SPI通信这块没问题的话,那要问问W5500厂家是不是芯片的配置问题。
,
q q:
我的读写函数怎么写都不正确,所以会导致死循环,W5500的数据读取也不正确,持续好几天了没有进展,您方便加一下我的联系方式帮我看看代码指导一下嘛
,
Shine:
抱歉,我对W5500这款芯片不熟,所以只能从dsp的角度来回答。
首先,看一下DSP有没有正确地把数据写到W5500里,这些数据是不是能正确地配置W5500并让其正确地工作?
然后看一下W5500给DSP的数据是否正确,DSP这边是否能正确接收?
,
q q:
DSP无法正确写进去也读不出来,读写函数的配置有问题。我之前用的是把发送数据放到SPIDAT1,结束数据放到SPIBUF,但是在接受时常在判断RXEMPTY时死循环,读写出来全是一样的错误信息,后来我用了封装的读写函数,也不正确
,
Shine:
收和发分开来调试,DSP先发,如果时序是正确的,但W5500收不到数据话,要查W5500那边读的时序是否和DSP发的时序匹配。