1.首先确定PLL输入时钟源

lpc2300系列有三个可供选择的时钟源,分别为:内部RC振荡器、主振荡器和RTC振荡器。

2.然后确定系统时钟频率

PLL频率参数

参数 描述 LPC23XX CAN波特率的计算 PLL输入时钟的频率(时钟源频率) LPC23XX CAN波特率的计算 系统时钟频率 N

PLLCFG寄存器的NSEL位的PLL预分频器值(PLLCFG NSEL字段+1)

M

PLLCFG寄存器中MSEL位的PLL倍频器值(PLLCFG 

MSEL字段+1)

LPC23XX CAN波特率的计算 PLL内部参考频率,LPC23XX CAN波特率的计算被N分频。LPC23XX CAN波特率的计算

         LPC23XX CAN波特率的计算       

例如LPC2300.S文件中有如下配置:

LPC23XX CAN波特率的计算

则可确定PLL时钟源为主振荡器,N为1,M为12。比如主振荡器的频率为12MHZ,根据上边公式可计算出系统时钟频率为:

LPC23XX CAN波特率的计算

3.确定CPU时钟频率

系统时钟必须要经过分频才能提供给CPU使用,CPU的时钟频率最大值为72MHZ,LPC2300系列ARM可以通过设置CCLKSEL来降低CPU的操作频率。

上图中可以看到.s文件中CCLKSEL字段设置为6,则说明CPU时钟为系统时钟的6分频。

LPC23XX CAN波特率的计算

4.确定外设时钟频率

例如LPC2300.S中配置如下:

LPC23XX CAN波特率的计算

从图中可看出CAN1和CAN2的时钟为CPU时钟的2分频,则可确定CAN的时钟频率为:LPC23XX CAN波特率的计算

5.计算波特率

CAN总线时序寄存器(CANxBTR)位描述
符号 功能 复位值 RM置位
9:0 BRP   波特率预分频。分频APB时钟来产生CAN时钟,分频值为(该字段的值+1) 0 x
13:10     保留    
15:14 SJW   同步跳转宽度是(该字段的值+1)个CAN时钟 0 x
19:16 TESG1   从指定同步点到采样的延时是(该字段的值+1)个CAN时钟 1100 x
22:20 TESG2   从采样点到下个指定同步点的延时是(该字段的值+1)个CAN时钟。规定的CAN位时间是(该字段的值+TESG1的值+3)个CAN时钟 001 x
23 SAM   采样 0 x
0 总线被采样1次
1 总线被采样3次
31:24 -   保留    

LPC23XX CAN波特率的计算

例如CAN1BTR寄存器的值为0x1c0002,则根据上表可明确:TESG1=12;TESG2=1;BRP=2

根据上式可计算出:LPC23XX CAN波特率的计算

/*  Fpclk=24MHZ 时 CAN标准波特率值

#define BPS_1000K    0x140002

#define BPS_800K    0x160002

#define BPS_500K    0x1C0002

#define BPS_250K    0x1C0005

#define BPS_125K    0x1C000B

#define BPS_100K    0x1C000E

#define BPS_50K    0x1C001D

#define BPS_20K    0x1C004A

#define BPS_10K    0x1C0095

相关文章: