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.

TM4C123GH6PM SSI配置问题



您好,

        我现在调试SD卡,用Tiva的SSI模块 配置3线SPI模式 ,按照SD_CARD例程初始化来进行的,区别是我用的SSI3 。

硬件是用5529调试过的,绝对没问题,但是用M4老是初始化不成功,用示波器观察控制管脚,CLK输出正常,SOMI管脚

一直被拉高,没有反映(估计是因为SIMO管脚工作不正常,发不出命令导致)。SIMO管脚每次初始化,从低电平升高后,

又缓慢降下来,类似电容放电。感觉还是管脚配置问题。下面是我的初始化代码,使能控制我用的是PB1:


ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);
ROM_SysCtlPeripheralEnable(GPIO_PORTB_BASE);

MAP_GPIOPinConfigure(GPIO_PB4_SSI2CLK);
MAP_GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4);


MAP_GPIOPinConfigure(GPIO_PB7_SSI2TX);
MAP_GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_7);

MAP_GPIOPinConfigure(GPIO_PB6_SSI2RX);
MAP_GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_6);

ROM_GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_1);

ROM_SSIConfigSetExpClk(SSI2_BASE, ROM_SysCtlClockGet(),
SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 400000, 8);
ROM_SSIEnable(SSI2_BASE);

        期待您的回复!

  • 单看端口和SSI初始化这一块问题不大。看起来用的是SSI2,不是SSI3.

    建议参考SD_CARD例程先接到SSI0上,验证一切OK了再移到SSI2上。

  • 你好,请问能给我发一份配置SSI2的代码吗?

    SSI0的初始化是正常的,但是SSI2一直配置不成功。

  • #define SSI2CSH GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, GPIO_PIN_5);
    #define SSI2CSL GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, 0);

    void InitSSI2(void)

    {
    uint32_t pui32DataRx[16];

    SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); //Enable SSI1
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //Enable GPIOF

    GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_5); //CS 
    SSI2CSH;
    GPIOPinConfigure(GPIO_PB4_SSI2CLK);
    GPIOPinConfigure(GPIO_PB6_SSI2RX);
    GPIOPinConfigure(GPIO_PB7_SSI2TX);

    //GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_5);
    GPIOPinTypeSSI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_6 | GPIO_PIN_7);
    SSIConfigSetExpClk(SSI2_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000, 16);
    SSIEnable(SSI2_BASE);

    while(SSIDataGetNonBlocking(SSI2_BASE, &pui32DataRx[0]))
    {
    }
    }

    void SSI2WRDat(uint32_t len)
    {

    uint32_t i;

    SSI2CSL;
    for(i = 0; i< len;i ++)
    {
    SSIDataPut(SSI2_BASE, SS2TxBuf[i]);
    while(SSIBusy(SSI2_BASE))
    {
    }
    SSIDataGet(SSI2_BASE, &SS2RxBuf[i]);
    }

    SSI2CSH;

    }

    驱动的LED Driver,客户产品量产了的代码。

    仅供参考