LM4F232H5QD的SSI时钟问题



1、SPI的发送时钟能配置到最大的频率是多少,应该怎么配置?

2、配置系统时钟ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ)后通过SPI接口发送数据后,接收的数据正确;但是ROM_SysCtlClockSet(SYSCTL_SYSDIV_3 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ)配置后,发送的数据和接收到的数据不一致,也就是接收数据错误,这是怎么回事?是时钟频率的问题吗?怎么将SPI的发送频率配置到最大,并且接收数据正确?

 

  • 你好:

    1 关于SSI的时钟频率:

     参见LM4F232H5QD数据手册第15章SSI模块15.3.1节中关于Bit Rate Generation中的说明。

     当为主机模式时,最大时钟不超过25MHZ,同时,若连接的从机设备时钟不超25MHZ,则最大不能超过从机的时钟。

     若为从机模式时,最大时钟不能超过系统时钟的1/6

    2 按你的第一种设置,主频为16MHZ,是可以的

     第二种设置,应该是超过了手册所描述的主频,所以出错了

  • 你好,

    设置SPI的发送比特率是通过配置SSICPSR寄存器的CPSDVSR域和SSICR0寄存器的SCR寄存器就可以了吗?

    麻烦给个配置SPI频率在10M以上的配置范例! 多谢

  • conghu zhu :

    SSIConfigSetExpClk()函数就可以配置SSI的工作模式。

    你说的SPI频率是指什么?主频10M以上的话用ROM_SysCtlClockSet()就可以了。

     ROM_SysCtlClockSet( SYSCTL_SYSDIV_1 |         // 设置系统时钟工作在16M;
                        SYSCTL_USE_OSC  |
                 SYSCTL_OSC_MAIN |
                        SYSCTL_XTAL_16MHZ);

  • 你这配置的是系统时钟是16MHz,根据ROM的文档,利用函数ROM_SSIConfigSetExpClk(unsigned long ulBase, unsigned long ulSSIClk, unsigned long ulProtocol, unsigned long ulMode, unsigned long ulBitRate, unsigned long ulDataWidth)配置SSI的Bit Rate,文档上说

    “The ulBitRate parameter defines the bit rate for the SSI. This bit rate must satisfy the following clock ratio critera:

    FSSI>=2*bit rate (master mode)

    FSSI>=2*bit rate (slave modes)

    where FSSI is the frequency of the clock supplied to the SSI module.”

    现在我在master mode下要配置Bit Rate为10M以上,就需要配置FSSI,如何配置FSSI到最大,这个最大值能到多大?

    给个配置范例!!多谢

  • SSI 模块内置可编程的位速率时钟分频器以及预分频器,通过分频产生串行输出时钟。SSI

    模块支持2MHz 或更高的位速率,实际使用时最高位速率通常由片外器件的性能决定。

    串行位速率是由输入时钟(SysClk)分频后得到的。输入时钟首先须进行预分频,预分频

    系数是2 到254 范围内的偶数,由SSI 时钟预分频寄存器(SSICPSR)的

    CPSDVSR 位域确定。预分频后的时钟还能继续分频,分频系数是1 到256 范围内的整数1 +

    SCR,其中SCR 是SSI 控制寄存器0(SSICR0)中的位域。因此输出时钟

    SSIClk 的频率为:

    SSICLK = SysClk / (CPSDVSR * (1 + SCR))

    注:当工作于主机模式时,应确保系统时钟至少2 倍于SSIClk,且SSIClk 不得超过25MHz;

    当工作于从机模式时,应确保系统时钟至少12 倍于SSIClk。

    where FSSI is the frequency of the clock supplied to the SSI module.

    SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,

       SSI_MODE_MASTER, 10000000, 8);

  • conghu zhu:

     如azhiking 所说。建议结合芯片数据手册看函数库