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.
你好!请教一下关于F280049 SPI_B引脚用寄存器配置的问题,硬件 SIMO:GPIO56 SOMI:GPIO25 CLK:GPIO26 STE:GPIO27 通过测试发现是引脚配置出了问题,找不到问题出在哪里,请指点。以下是引脚配置,谢谢,
试一下将GpioCtrlRegs.GPAPUD.bit.gpio27 = 0;
另外,你的其他3路信号都正常吗?你是怎么判断是GPIO配置导致通信问题的
你好!将GpioCtrlRegs.GPAPUD.bit.gpio27 = 0;也不行,我验证的方法是通过库函数配置SPISIMO,SPISOMI,***。其他配置不变,如图所示,请帮忙分析一下原因,谢谢!
试了,还不行,工程传不了,只能把配置敲上,有空帮忙看看,盼回复,谢谢!
//说明 F280049 SPIB 配置说明 // SIMO---GPIO56 SOMI---GPIO25 CLK---GPIO26 SET----GPIO27 // void InitSoib(void) { EALLOW; //初始化引脚 SpibinitPin(); //使能SPI-B时钟 CpuSysRegs.PCLKCR8.bit.SPI_B = 1; //SPI复位设置 SpibRegs.***.bit.SPISWRESET = =0; DELAY_US(10); //设置收发模式 SpibRegs.***.bit.CLKPOLARITY = 0; SpibRegs.***.bit.CLK_PHASE = 1; //设置收数据位数 SpibRegs.***.bit.*** = (8 - 1); //溢出中断禁止信号延时半周期使能,主动模式,使能发送,禁止SPI中断 SpibRegs.***.bit.OVERRUNINTENA = 0;//溢出中断禁止 SpibRegs.***.bit.MASTER_SLAVE = 1; //主动模式 SpibRegs.***.bit.TALK = 1;//使能发送 SpibRegs.***.bit.SPIINTENA = 0;//禁止SPI中断 //设置波特率 SpibRegs.SPIBRR.bit.SPI_BIT_RATE = ((100E6 / 4) / 500E3) - 1; //SPI自由运行状态 SpibRegs.SPIPRI.all = 0x10; //接受溢出使能。默认值1111 SpibRegs.SPIFFCT.all = 0x204F; //无延时 SpibRegs.SPIFFCT.all = 0x0; //完成复位 SpibRegs.***.bit.SPISWRESET = 1; EDIS; } //GPIO配置 void SpibinitPin(void) { //SPISIMO GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 1;//设置为SPI模式 GpioCtrlRegs.GPBDIR.bit.GPIO56 = 1; // 输出 GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0; // 使能上拉电阻 //SPISOMI GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1;//设置为SPI模式 GpioCtrlRegs.GPADIR.bit.GPIO25 = 0; // 输入 GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3; // 异步输入 GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // 使能上拉电阻 //CLK GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 1;//设置为SPI模式 GpioCtrlRegs.GPADIR.bit.GPIO26 = 1; // 输出 GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; // 使能上拉电阻 //使能 GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 1;//设置为SPI模式 GpioCtrlRegs.GPADIR.bit.GPIO27 = 1; // 输出 GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0; // 使能上拉电阻 }
有可能是SpibinitPin() 中的 pinmux 配置不完整。 例如,对于 GPIO56,配置为SPIB_SIMO 模式的话要选择模式 9(1001b)。 写入 GPBGMUX2.GPIO56 = 10b 和 GPBMUX2.GPIO56 = 01b。
对于SPI 配置,你可以参考C2000ware 中的 SPI 配置示例:C:\ti\c2000\C2000Ware_3_04_00_00\device_support\f28004x\examples\spi
//GPIO配置 void SpibinitPin(void) { //SPISIMO GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 9;//SPISIMO GpioCtrlRegs.GPBPUD.bit.GPIO56 = 0; // 使能上拉电阻 //SPISOMI GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 6;//SPISOMI GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3; // 异步 GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0; // 使能上拉电阻 //CLK GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 6;//CLK GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; // 使能上拉电阻 //使能 GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0;//设置为数字IO GpioCtrlRegs.GPADIR.bit.GPIO27 = 1; // 输出 GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0; // 使能上拉电阻 GpioCtrlRegs.GPACLEAR.bit.GPIO27 = 1;//片选 使能 }
F280049C_Template.zip你好!这是我工程,目前SPI通过寄存配置还是都不到数据,请帮忙再看看我的配置哪里出了问题?谢谢!通过库函数配置验证过硬件是没有问题,请帮忙看看,谢谢!盼回复
MUX 寄存器有 2 个 :你需要配置MUX 和 GMUX。 这些字段有 2bit长。 mux 值的高 2 位应在 GMUX 寄存器中配置,低 2 位应在 MUX 寄存器中配置
例如,为 GPIO56 配置 mux 选项 9 (b1001)。
GpioCtrlRegs.GPBGMUX2.bit.GPIO56 = 0x2; GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0x1;
建议你还可以使用 SysConfig 工具进行 pinmux 和基本外设初始化。 通过 GUI 完成的配置可以直接自动生成初始化代码。但是生成的代码是使用 driverlib 函数而不是位域寄存器的
非常感谢,您的支持按照
GpioCtrlRegs.GPBGMUX2.bit.GPIO56 = 0x2; GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0x1;