最近在用Freescale KE04片子做设计,其中要用到定时中断,同时要考虑系统功耗。所以研究了下在Freescale芯片中实现定时中断的方法
1. 定时中断对ARM来说最简单的方法是使用 SysTick,比较通用。但是查阅KE04的reference manual 发现KE04 的Systick 时钟来源是 Core clock 或者 Core clock/16. 当进入Stop 省电模式后 Core clock会被关断。 因此在Systick 不能在低功耗模式产生定时中断
2. 使用内部时钟源做RTC中断,使用RTC做定时中断有四个时钟源可选择:外部时钟,内部的1K低功耗实时时钟,内部参考时钟和总线时钟
A. 最推荐的方式是使用内部1K低功耗实时时钟,这个时钟是一直存在的。但是用这个时钟做为时钟源有个问题,最低只能到10Hz,如果要求更快频率的定时中断,无法使用此时钟源
B. 可以使用内部参考时钟做为中断源。 该时钟在出厂时会做校准,校准的频率为37.5KHz (这样才可以通过FLL的倍频得到KE系列的最大工作频率48M = 1280x37.5) 内部时钟源可以设置为STOP模式下保持工作,如果要实现ms级别的定时中断,这个时钟源可以利用。我的板子需要1ms中断一次,是使用分频系数37 将 37.5KHz 分频为 1.0135 KHz 来实现的。误差<2% 为可接受范围,如果需要精度更高,可以通过调整ICS Trim值来实现,我就没继续研究了
C. 使用总线时钟和Systick没区别,还不如直接用Systick
D. 使用外部时钟唯一的好处是定时更精确 |