[LOOK] 系统定时器(SysTick)求解

[复制链接]
3222|3
 楼主| hongcky 发表于 2011-11-1 14:39 | 显示全部楼层 |阅读模式
本帖最后由 hongcky 于 2011-11-1 14:42 编辑


LOOK系统时钟配置如上图。

即FOUT12*48/3/4=48MHz
CPUCLK48MHz





systick.cpp 中
  1. instantiate::systick<systick_t> systick(F_CPU / LOOK_TICKS_PER_SEC);

LOOK中
  1. __OPT_INLINE__ look::systick_t::systick_t(uintptr_t reload, uint8_t priority)
  2. {
  3.   vector_t::table[0].attach(this);
  4.   *reinterpret_cast<volatile uintptr_t*>(0xe000e014) = reload;
  5.   *reinterpret_cast<volatile uint8_t*>(0xe000ed23) = priority;00579 }


SYST_RVR (0xE000_E014)=48000
Systick 频率为 12MHz(外部时钟源)/48000000/1000=250Hz

一个系统节拍是4ms用最新版LOOK程序包及例程包汇编(2011.7.24)中的LOOK_RTC测试
  1. void task_LOOK_RTC_t::routine()
  2. { uint_fast8_t n = 8;
  3. do {
  4.   if (rtc.Init())
  5.    break;
  6. } while (--n);
  7. while (true) {
  8.   // TODO: 在此编写 task_LOOK_RTC_t 例程的内容
  9.   if (sem.wait())
  10.   {
  11.    uart0.puts(rtc.GetRTCString());//串口显示
  12.    rtc.OutSendSecond();//LED显示
  13.   }
  14.   delay(10*LOOK_TICKS_PER_SEC  );
  15. }
  16. }
添加了delay(10*LOOK_TICKS_PER_SEC  );


串口软件中可看到,每10秒中打印一次。

我的理解:一个系统节拍是4ms10*LOOK_TICKS_PER_SEC =10*1000*系统节拍=40s即每40s钟打印一次出来,跟实际结果不同,我想请教大家我哪个地方理解错了?



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| hongcky 发表于 2011-11-3 15:40 | 显示全部楼层
本帖最后由 hongcky 于 2011-11-3 15:41 编辑

找到问题所在了。
用在线调试,运行到下面这段代码。

  1. __INLINE__ look::systick_t::systick_t(uintptr_t reload, uint_fast8_t priority)
  2. {
  3. vector_t::table[0].attach(this);
  4. *reinterpret_cast<volatile uint8_t*>(0xe000ed23) = priority;
  5. volatile uintptr_t* scs = reinterpret_cast<volatile uintptr_t*>(0xe000e000);
  6. __asm__ __volatile__("" : "+r" (scs));
  7. scs[5] = reload;
  8. scs[4] = 7;
  9. }
SCS[4]地址是0xE000E010,即SYST_CSR=7,第2位为1。  


系统节拍使用的时钟为内核时钟


这里选择的时钟不起作用了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
john_lee 发表于 2011-11-7 12:32 | 显示全部楼层
是的,LOOK的systick设置为了简单起见,直接使用了CPU的时钟。

我不清楚systick使用CPU时钟和外部参考时钟之间,有没有什么很明显的区别,如果没有,我将在初始化配置(init_config.h)中去掉systick部分,如果有,请给出比较权威的说明,那么我将修改LOOK的systick初始化,允许使用外部时钟。
 楼主| hongcky 发表于 2011-11-12 18:23 | 显示全部楼层
谢谢李老师的回复。
systick使用CPU时钟和外部参考时钟有什么区别我也不知道。
只允许使用CPU时钟的话,我建议init_config.h去掉systick部分。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部