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.
问题: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 (***)
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 (***)
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 ***
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3; // Configure GPIO19 as SPISTEA
SPI配置
SpiaRegs.***.all =0x004F; //CLKPOLARITY=1,16bit
SpiaRegs.***.all =0x0006; //CLK_PHASE=0,master
SpiaRegs.SPIBRR.all =0x001F;
SpiaRegs.***.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);
}
}
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是没用的
eallow写了保护,没粘过来(抱歉)!你说的高速SPI口,不是可以通过HS_MODE = 0不使能高速SPI模式,我已经配置成不使用高速SPI模式!能不能说具体点为什么设置内部input qualification没有用。这个问题调了几天了,非常感谢。
NOTE: High-speed SPI and AUXCLKIN use a different signal path that does not support inversion or
qualification. For more details on high-speed SPI pins, see Section 6.6.
TRM的GPIO那一章有这句话,就是只要这四个GPIO mux成SPI就没有input qualification功能,不管你是不是禁止了HS _MODE
你可以用这四个GPIO作为SPI口用,但是和其他GPIO有区别的是,这四个是高速SPI口,所以只要你mux成SPI,和普通SPI口不同的是,gpio input qualification就会无效,但是SPI功能是正常的
您好,我也遇到了SPI没有反应的问题,我用的是SPIB口,配置如下:
GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; // Enable pull-up on GPIO16 (SPISIMOA)
GpioCtrlRegs.GPCPUD.bit.GPIO64 = 0; // Enable pull-up on GPIO17 (SPISOMIA)
GpioCtrlRegs.GPCPUD.bit.GPIO65 = 0; // Enable pull-up on GPIO18 (SPICLKA)
GpioCtrlRegs.GPCPUD.bit.GPIO66 = 0; // Enable pull-up on GPIO19 (SPISTEA)
GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3; // Asynch input GPIO16 (SPISIMOA)
GpioCtrlRegs.GPCQSEL1.bit.GPIO64 = 3; // Asynch input GPIO17 (SPISOMIA)
GpioCtrlRegs.GPCQSEL1.bit.GPIO65 = 3; // Asynch input GPIO18 (SPICLKA)
GpioCtrlRegs.GPCQSEL1.bit.GPIO66 = 3; // Asynch input GPIO19 (SPISTEA)
GpioCtrlRegs.GPBGMUX2.bit.GPIO63 = 3;
GpioCtrlRegs.GPCGMUX1.bit.GPIO64 = 3;
GpioCtrlRegs.GPCGMUX1.bit.GPIO65 = 3;
GpioCtrlRegs.GPCGMUX1.bit.GPIO66 = 3;
GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 3;
GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 3;
GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 3;
GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 3;
发送数据是没有反应,使用命令职位SC端 GpioDataRegs.GPCCLEAR.bit.GPIO66 = 1,观察寄存器时发现也没有变化,目前还不知是怎么回事,非常感谢您的帮助。
破案了
要加一排寄存器的配置
如下: