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.

[参考译文] TMS320F280049:SPIB 引脚配置问题

Guru**** 2526700 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1019302/tms320f280049-spib-pin-configuration-problem

器件型号:TMS320F280049
主题中讨论的其他器件:C2000WARESysConfig

尊敬的团队:

我的一位客户希望将 SPIB 配置为 SPI 通信端口、但他遇到了以寄存器形式配置的 GPIO 问题、因为以库函数形式配置的 GPIO 可以正常通信。 您能否检查以下配置是否存在任何问题?

//说明 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\c2000Ware_3_04_00_00\device_support\f28004x\examples\SPI

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gus:

    感谢你的答复。

    我的客户更新了 GPxMUX2配置、但它似乎不起作用。 你有其他建议吗?  

    //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;//片选 使能
    	
    
    }

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    绿色环保、

    您需要配置2个 MUX 寄存器:MUX 和 GMUX。 这些字段的长度为2位。 多路复用器值的高2位应在 GMUX 寄存器中配置、低2位应在 MUX 寄存器中配置

    例如、为 GPIO56配置多路复用器选项9 (b1001)。  

    GpioCtrlRegs.GPBGMUX2.bit.GPIO56 = 0x2;

    GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 0x1;

    我强烈建议您使用 SysConfig 工具进行引脚多路复用和基本外设初始化。 它从 用户通过 GUI 完成的配置中自动生成初始化代码。 生成的代码使用 driverlib 函数、而不是 位域寄存器。

    此致、

    Veena