Other Parts Discussed in Thread: C2000WARE
最近在使用spi方式与w5500外设芯片进行通信时发现通信速度非常慢,以下是我的spi配置程序:
GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; // Enable pull-up on (SPISIMOA)
GpioCtrlRegs.GPCPUD.bit.GPIO64 = 0; // Enable pull-up on (SPISOMIA)
GpioCtrlRegs.GPCPUD.bit.GPIO65 = 0; // Enable pull-up on (SPICLKA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3; // Asynch input GPIO (SPISIMOA)
GpioCtrlRegs.GPCQSEL1.bit.GPIO64 = 3; // Asynch input GPIO (SPISOMIA)
GpioCtrlRegs.GPCQSEL1.bit.GPIO65 = 3; // Asynch input GPIO (SPICLKA)
GpioCtrlRegs.GPBGMUX2.bit.GPIO63 = 3;
GpioCtrlRegs.GPCGMUX1.bit.GPIO64 = 3;
GpioCtrlRegs.GPCGMUX1.bit.GPIO65 = 3;
GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 3; // Configure GPIO63 as SPISIMOA
GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 3; // Configure GPIO64 as SPISOMIA
GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 3; // Configure GPIO65 as SPICLKA
DevCfgRegs.CPUSEL6.bit.SPI_B = 0x1;//配置spi为CPU2所有
ClkCfgRegs.LOSPCP.bit.LSPCLKDIV = 0x0;//设置低速外设时钟为200mhz
EDIS;
GPIO_SetupPinMux(66, GPIO_MUX_CPU2, 0);
GPIO_SetupPinOptions(66, GPIO_OUTPUT, GPIO_PULLUP);//配置SCSN为普通io口
void spi_init()
{
SpibRegs.SPICCR.all =0x0067; // 先复位
SpibRegs.SPICTL.all =0x0006; // Enable master mode, normal phase,
// enable talk, and SPI int disabled.
SpibRegs.SPIBRR.all =0x3;
SpibRegs.SPICCR.all =0x00E7; // 使能 高速模式 下降沿输出 8位字符长度
SpibRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission
}
我查询了ti官方给的器件手册,理论上来说spi的波特率应该能达到最高50mhz,后来发现不能超过gpio口的切换速率也就是25mhz,经过我自己的计算如果是25mhz整个发送流程下来应该在17us左右,而用示波器测量发现需要30us。而且最让我疑惑的一点是如果波特率上限为25mhz,当我将lspclk分别设置为200mhz和100mhz,分频后对应波特率50mhz和25mhz,两者最终需要的时间为30us和42us,也就是说我设置波特率为25mhz跟50mhz应该是差不了多少的(因为波特率上限为25mhz),结果却与我所想的相差很多,希望有前辈能解答疑惑。