如何将系统内部的16M时钟源作为ssi的时钟源?

Other Parts Discussed in Thread: TM4C1233E6PM

这个问题,绞尽脑汁也不知道问题出在哪请求各位大神能帮我解决一下,若能解决在下这个问题,为了表示感谢只能充点电话费聊表心意了,希望不要嫌少。

芯片型号:TM4C1233E6PM;       程序用途:采用SSI读写EEPROM(25LC1024,支持的最大时钟速度为10M )   系统时钟因其他方面需要设置为80M

这样的话这个就没法玩了啊,所以我想在不改变系统时钟的情况下,将内部精准16M时钟源供给SSI模块,按照手册的设置步骤,经设置之后没有效果。

上面是主时钟树和SSI模块结构框图。

按照这个思路 我的程序如下:

void SSI_init(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1); //为SSI提供时钟
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //为GPIOF端口提供时钟

    HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY_DD;//解锁GPIOF管脚复用功能
    HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = 0x1; //写1确认解锁

    SSIDisable(SSI1_BASE); //禁能SSI1模块

    //HWREG(SSI1_BASE + SSI_O_CR1) = 0X0; //sse位置0,禁能SSI1模块,这个跟上面一句是同样的效果


     //SSIClockSourceSet(SSI1_BASE,SSI_CLOCK_PIOSC);//API设置ssi时钟源
     //设置SPI为主机模式0,8位数据宽度,1M的波特率//
     // SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER, 1000000, 8);

     下面的三个函数其实就是把SSIConfigSetExpClk()拆开来实现的!(寄存器操作部分)

      HWREG(SSI1_BASE + SSI_O_CC) = 0x5; //时钟源选择,该处选中PIOSC(假设这个地方设置成功,ssi模块时钟位16M)
      HWREG(SSI1_BASE + SSI_O_CPSR)= 0x4;//时钟预分频,2-254之间的偶数(在上述基础上根据手册上公式SSINCLK设置其他的参数
      HWREG(SSI1_BASE + SSI_O_CR0)=0x307; //设置SCR,极性,相位,模式,位宽度

     //HWREG(SSI1_BASE + SSI_O_CR1) = 0X2;//sse位置1使能SSI
     SSIEnable(SSI1_BASE); //使能SSI,这个跟上面一句是同样的效果

    GPIOPinConfigure(GPIO_PF3_SSI1FSS); //SSI功能复用配置
    GPIOPinConfigure(GPIO_PF2_SSI1CLK);
    GPIOPinConfigure(GPIO_PF1_SSI1TX);
    GPIOPinConfigure(GPIO_PF0_SSI1RX);
    GPIOPinTypeSSI(GPIO_PORTF_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

 //  配置片选管脚为输出
    GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_3, GPIO_DIR_MODE_OUT);
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_3,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
}

问题1:帮我解释一下SSI框架图中红色和蓝色两条时钟线的各自作用?

问题2:我要将内部16M作为SSI模块时钟源,怎么设置寄存器部分?

问题3:上述初始化程序是否有问题,尤其是对寄存器操作的部分?

问题4:系统时钟80M,但是外设EEPROM最大支持20M,有什么办法在不改变系统时钟的情况下能够正常读写外设?

  • 纠正,支持的最大时钟速度为 20M   !!!

  • 1.蓝色是SSI的时钟信号,很好理解。至于红色的,手册中是这么说的,接收 FIFO 设有 32 SSInClk 时钟周期(不管此时 SSInClk 是否激活)的超时周期,并且只要接
    FIFO 从空状态变为非空状态即会启动。假如接收FIFO在接下来的32SSIClk周期内再次变为空,所以FIFO也需要一个时钟信号。

    2.SSI 时钟配置寄存器(SSICC),直接设置这个寄存器就可以设置PIOSC为SSI的模块时钟源

    3.SSI部分的初始化可以参考TIVAWARE中的SSI例程

    4。这样是不可以的,这款芯片的SSI最大速率只支持2MHZ的