void InitPeripheralClocks(void)
{
EALLOW;
// HISPCP/LOSPCP prescale register settings, normally it will be set to default values
SysCtrlRegs.HISPCP.all = 0x0001;
SysCtrlRegs.LOSPCP.all = 0x0002;//默认配置,37.5M,假设值记为n
……
}
void spi_init()
{
InitSpiaGpio();
SpiaRegs.SPICCR.all =0x0007;
SpiaRegs.SPICTL.all =0x000E;
SpiaRegs.SPIBRR =0x0005; //假设值记为x
//波特率 =LSPCLK/(SPIBRR+1)
如果想配置波特率为4.5M,就应该有150M/2^n)/(x+1)=4.5M;
但是好像求不出来同时为整数的n和x。
……
}
一般遇到这种情况,首先看下能不能将150M调整到一个合适的值,能调整到合适的值当然是最好的。如果调整不了也没关系,这时就只能找一个最近的整数了,这个时候信号会存在一点误差,像你这里的话,误差在1%以内
,即便正常通讯是没有问题的,直接用就是了