1.首先确定PLL输入时钟源
lpc2300系列有三个可供选择的时钟源,分别为:内部RC振荡器、主振荡器和RTC振荡器。
2.然后确定系统时钟频率
PLL频率参数
参数 描述PLLCFG寄存器的NSEL位的PLL预分频器值(PLLCFG NSEL字段+1)
MPLLCFG寄存器中MSEL位的PLL倍频器值(PLLCFG
MSEL字段+1)
例如LPC2300.S文件中有如下配置:
则可确定PLL时钟源为主振荡器,N为1,M为12。比如主振荡器的频率为12MHZ,根据上边公式可计算出系统时钟频率为:
3.确定CPU时钟频率
系统时钟必须要经过分频才能提供给CPU使用,CPU的时钟频率最大值为72MHZ,LPC2300系列ARM可以通过设置CCLKSEL来降低CPU的操作频率。
上图中可以看到.s文件中CCLKSEL字段设置为6,则说明CPU时钟为系统时钟的6分频。
4.确定外设时钟频率
例如LPC2300.S中配置如下:
从图中可看出CAN1和CAN2的时钟为CPU时钟的2分频,则可确定CAN的时钟频率为:
5.计算波特率
| 位 | 符号 | 值 | 功能 | 复位值 | 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 | - | 保留 |
例如CAN1BTR寄存器的值为0x1c0002,则根据上表可明确:TESG1=12;TESG2=1;BRP=2
根据上式可计算出:
/* 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