TI中文支持网
TI专业的中文技术问题搜集分享网站

28377s 的SPI 例程GPIO使用自发自收,未使用GPIO,是否配置有误?另外配置SPI和GPIO使用查询发送数据,示波器没有数据且无时钟信号。

问题:28377的例程中SPI的GPIO使用为GPIO16 GPIO17 GPIO18 GPIO19 ,但是实际上SPI使用的都是这几个。调试过程中我使用了SPIA,设置GPIO58 、59、60、61。使用的是查询方式发送数据,SPITXBUF寄存器的值为我设定的值,但是使用示波器没有时钟信号和数据信号。

    GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;   // Enable pull-up on GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;   // Enable pull-up on GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;   // Enable pull-up on GPIO18 (SPICLKA)
    GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;   // Enable pull-up on GPIO19 (SPISTEA)

    GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // Asynch input GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // Asynch input GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3; // Asynch input GPIO18 (SPICLKA)
    GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3; // Asynch input GPIO19 (SPISTEA)

    GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3; // Configure GPIO16 as SPISIMOA
    GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3; // Configure GPIO17 as SPISOMIA
    GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3; // Configure GPIO18 as SPICLKA
    GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3; // Configure GPIO19 as SPISTEA

SPI配置

SpiaRegs.SPICCR.all =0x004F;   //CLKPOLARITY=1,16bit           

 SpiaRegs.SPICTL.all =0x0006;    //CLK_PHASE=0,master       

  SpiaRegs.SPIBRR.all =0x001F;
    SpiaRegs.SPICCR.all =0x00CF;     //CLKPOLARITY=1,Reset,16bit     

    SpiaRegs.SPIPRI.bit.FREE = 1;       

主函数

void main(void)
{
   Uint16 sdata;  // send data
   Uint16 rdata;  // received data

   InitSysCtrl();

   InitSpiaGpio();

   DINT;

   InitPieCtrl();

   IER = 0x0000;
   IFR = 0x0000;
   
   InitPieVectTable();
 
   spi_init();    // init SPI

   sdata = 0x1011;
   for(;;)
   {    
     spi_xmit(sdata);
     DELAY_US(100000L);
   }
}  

Jason Wu4:

GPIO16 GPIO17 GPIO18 GPIO19关于SPI的配置屏蔽了么?

Smith John2:

回复 Jason Wu4:

我使用修改后是屏蔽了的。能不能看出来哪里有问题。

囧:

    GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // Asynch input GPIO16 (SPISIMOA)    GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // Asynch input GPIO17 (SPISOMIA)    GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3; // Asynch input GPIO18 (SPICLKA)    GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3; // Asynch input GPIO19 (SPISTEA)

    GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3; // Configure GPIO16 as SPISIMOA    GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3; // Configure GPIO17 as SPISOMIA    GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3; // Configure GPIO18 as SPICLKA    GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3; // Configure GPIO19 as SPISTEA

你的mux和滤波设置有做eallow保护吗?另外GPIO58到GPIO61是高速SPI口,你设置内部input qualification是没用的

Smith John2:

回复 囧:

eallow写了保护,没粘过来(抱歉)!你说的高速SPI口,不是可以通过HS_MODE = 0不使能高速SPI模式,我已经配置成不使用高速SPI模式!能不能说具体点为什么设置内部input qualification没有用。这个问题调了几天了,非常感谢。

囧:

回复 Smith John2:

NOTE: High-speed SPI and AUXCLKIN use a different signal path that does not support inversion orqualification. For more details on high-speed SPI pins, see Section 6.6.

TRM的GPIO那一章有这句话,就是只要这四个GPIO mux成SPI就没有input qualification功能,不管你是不是禁止了HS _MODE

Smith John2:

回复 囧:

那我需要使用这个gpio该怎么使用呢?

囧:

回复 Smith John2:

你是要把这四个GPIO变成SPI还是只是GPIO功能?没有太明白你的意思

Smith John2:

回复 囧:

spi功能

囧:

回复 Smith John2:

你可以用这四个GPIO作为SPI口用,但是和其他GPIO有区别的是,这四个是高速SPI口,所以只要你mux成SPI,和普通SPI口不同的是,gpio input qualification就会无效,但是SPI功能是正常的

wenlin zhou:

我遇到了相同的问题,请教一下后来怎么解决的?

赞(0)
未经允许不得转载:TI中文支持网 » 28377s 的SPI 例程GPIO使用自发自收,未使用GPIO,是否配置有误?另外配置SPI和GPIO使用查询发送数据,示波器没有数据且无时钟信号。
分享到: 更多 (0)