您好的团队:
目前、我正在研究 f28375与电源管理芯片 TPS65381之间的 SPI 通信。 我无法读取 TPS65381寄存器的数据。 我的代码是否有任何问题?
SPI 配置:
void InitSpicGpio()
{
EALLOW;
/*为所选引脚启用内部上拉*/
//用户可以启用或禁用上拉。
//这将启用指定引脚的上拉电阻。
//注释掉其他不需要的行。
GpioCtrlRegs.GPCPUD.bit.GPIO69 = 0;//启用 GPIO69上拉电阻器(SPISIMOC)
// GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;//启用 GPIO5上拉电阻器(SPISIMOA)
GpioCtrlRegs.GPCPUD.bit.GPIO70 = 0;//启用 GPIO70 (SPISOMIC)上的上拉
电阻// GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0;//启用 GPIO3上的上拉电阻(SPISOMIA)
GpioCtrlRegs.GPCPUD.bit.GPIO71 = 0;//启用 GPIO71上的上拉电阻器(***)
GpioCtrlRegs.GPCPUD.bit.GPIO72=0;//启用 GPIO72 (SPISTEC)上的上拉电阻
器//将所选引脚的限定条件设置为仅异步*//
这将为所选引脚选择异步(无限定条件)。
//注释掉其他不需要的行。
GpioCtrlRegs.GPCQSEL1.bit.GPIO69 = 3;//异步输入 GPIO69 (SPISIMOC)
// GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3;//异步输入 GPIO5 (SPISIMOA)
GpioCtrlRegs.GPCQSEL1.bit.GPIO70 = 3;//异步输入 GPIO70 (SPISOMIC)
// GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 3;//异步输入 GPIO3 (SPISOMIA)
GpioCtrlRegs.GPCQSEL1.bit.GPIO71 = 3;//异步输入 GPIO71 (***)
GpioCtrlRegs.GPCQSEL1.bit.GPIO72 = 3;//异步输入 GPIO72 (SPISTEC)
//使用 GPIO 寄存器配置 SPI-A 引脚*/
//这指定可能的 GPIO 引脚中的哪一个是 SPI 功能引脚。
//注释掉其他不需要的行。
GpioCtrlRegs.GPCMUX1.bit.GPIO69=1;//将 GPIO69配置为 SPISIMOC
// GpioCtrlRegs.GPAMUX1.bit.GPIO5=2;//将 GPIO5配置为 SPISIMOA
GpioCtrlRegs.GPCMUX1.bit.GPIO70=1;//将 GPIO70配置为 SPISOMIC
// GpioCtrlRegs.GPAMUX1.bit.GPIO3=2;//将 GPIO3配置为 SPISOMIA
GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 1;//将 GPIO71配置为***
GpioCtrlRegs.GPCMUX1.bit.GPIO72=1;//将 GPIO72配置为 SPISTEC
EDIS;
}
void InitTPS65381ASpi (void) { GPIO_SetupPinMux (68、0、0); // reset_power GPIO_SetupPinOptions (68、1、0); GpioDataRegs.GPCCLEAR.bit.GPIO68=0; GPIO_SetupPinMux (69、0、6); // SDI、SIMO GPIO_SetupPinOptions (69、1、GPIO_异 步| GPIO_PULLUP); //GpioDataRegs.GPCCLEAR.bit.GPIO70=1; GPIO_SetupPinMux (70、0、6); // SDO、SOMI GPIO_SetupPinOptions (70、0、GPIO_异 步| GPIO_PULLUP); GPIO_SetupPinMux (71、0、6); // SCLK、CLK GPIO_SetupPinOptions (71、1、GPIO_异 步| GPIO_PULLUP); GPIO_SetupPinMux (72、0、6); // nCS、CS GPIO_SetupPinOptions (72、1、GPIO_异 步| GPIO_PULLUP); EALLOW; ***.***.all =0x004F; //复位打开、上升沿、16位字符位 ***.***.all =0x0006; //启用主控模式、正常相位、 ***.SPIBRR.ALL =39;//24;/0x0009; //***= 200m / 4/(7)= 7.14M,***最大值为8M ***.SPISTS.ALL = 0x0000; //重置所有状态信息 ***.SPIPRI.ALL = 0x0010; //设置断点以使断点不会干扰 xmission ///***.***.bit.SPILBK = 1; /*重置两个 FIFO */ ***.SPIFFTX.bit.TXFIFO = 0; ***.SPIFFRX.bit.RXFIFORESET = 0;/*并在配置期间将它们保持在复位状态*/ /*配置 FIFO */ ***.SPIFFTX.ALL = 0x4041;/*启用 FIFO,请勿使用中断*/ ***.SPIFFRX.ALL = 0x4041;//设置 RX FIFO,不要使用中断*/ ***.SPIFFCT.ALL = 0x0000;/* FIFO 和 TXBUF 之间无延迟*/ /*从复位中释放 FIFO */ ***.SPIFFTX.bit.TXFIFO = 1;/*启用 TX * ***.SPIFFRX.bit.RXFIFORESET = 1;/*启用 Rx * ***.***.bit.SPISWRESET = 1; EDIS; }
读取寄存器:
UINT16 ReadRegsTPS65381 (uint16 RegAddr) { UINT16 Rx = 0x0; #if 0 EALLOW; GpioDataRegs.GPCDAT.bit.GPIO72=0; EDIS; #endif RX |=((RegAddr << 8)& 0xFFFF); ***.SPITXBUF = Rx; /*等待传输完成*/ while (***.SPIFFRX.bit.RXFFST < 1) {} //Rx =***.SPIRXBUF & 0xff; RX =***.SPIRXBUF; #IF 0 EALLOW; GpioDataRegs.GPCDAT.bit.GPIO72=1; EDIS; #endif 返回(Rx); }
此致