芯片手册上说,当SSI从模式时,系统时钟至少是SSICLK的12倍。
我的问题是,这句话中,这个系统时钟与API函数SSIConfigSetExpClk()中的第二个参数是什么关系?
举例说,我的系统时钟设置为40MHz,SSIConfigSetExpClk()的第二个参数取40MHz/20=2MHz,
那么,我的SSICLK是不能大于40/12MHz呢 还是2/12MHz ?
芯片手册上说,当SSI从模式时,系统时钟至少是SSICLK的12倍。
我的问题是,这句话中,这个系统时钟与API函数SSIConfigSetExpClk()中的第二个参数是什么关系?
举例说,我的系统时钟设置为40MHz,SSIConfigSetExpClk()的第二个参数取40MHz/20=2MHz,
那么,我的SSICLK是不能大于40/12MHz呢 还是2/12MHz ?
我没能很清楚的理解你的问题。
在SSI.C中:
ulMaxBitRate = ulSSIClk(第二个参数) / ulBitRate(第5个参数,也就是设定的SSIClk);
ulPreDiv = 0;
do
{
ulPreDiv += 2;
ulSCR = (ulMaxBitRate / ulPreDiv) - 1;
}
while(ulSCR > 255);
上面通过计算,得到合适的ulPreDiv 和ulSCR值,也就是之后赋给SSICPSR和SSICR0[SCR]的值。
如果第二个参数给了一个不是系统时钟的值,那么得到的结果就没有意义。
SSI的时钟计算公式:
SSIClk = SysClk / (CPSDVSR * (1 + SCR))
SSIConfigSetExpClk()中第二个参数提供MCU中送到SSI模块的时钟的速度。有了SSI时钟速度,就可以计算出寄存器应该配置成多少才能获得你所需的波特率(ulBitRate参数)。之所以要提供这个参数是因为SSIConfigSetExpClk函数无法获得当前MCU系统时钟(即SSI模块时钟)的速度,所以需要用户提供。若系统时钟为40MHz该参数就应该为40,000,000;若系统时钟为80MHz,该参数就为80,000,000。也可以用SysCtlClockGet()函数获得系统的速度传入。
“SSI从模式时,系统时钟至少是SSICLK的12倍”,也就是说从模式下,当系统时钟为40MHz时,SSI模块最高的速率只能配置为3.333333MHz (40MHz / 12)。即ulBitRate参数(SSIConfigSetExpClk中第五个参数)最多只能配置为3,333,333。