打印
[LOOK]

系统定时器(SysTick)求解

[复制链接]
2694|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hongcky|  楼主 | 2011-11-1 14:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hongcky 于 2011-11-1 14:42 编辑


LOOK系统时钟配置如上图。

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





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

LOOK中
 __OPT_INLINE__ look::systick_t::systick_t(uintptr_t reload, uint8_t priority)
{
  vector_t::table[0].attach(this);
  *reinterpret_cast<volatile uintptr_t*>(0xe000e014) = reload;
  *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测试
void task_LOOK_RTC_t::routine()
{ uint_fast8_t n = 8;
do {
  if (rtc.Init())
   break;
} while (--n);
while (true) {
  // TODO: 在此编写 task_LOOK_RTC_t 例程的内容
  if (sem.wait())
  {
   uart0.puts(rtc.GetRTCString());//串口显示
   rtc.OutSendSecond();//LED显示
  }
  delay(10*LOOK_TICKS_PER_SEC  );
}
}
添加了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 编辑

找到问题所在了。
用在线调试,运行到下面这段代码。
 
__INLINE__ look::systick_t::systick_t(uintptr_t reload, uint_fast8_t priority)
{
vector_t::table[0].attach(this);
*reinterpret_cast<volatile uint8_t*>(0xe000ed23) = priority;
volatile uintptr_t* scs = reinterpret_cast<volatile uintptr_t*>(0xe000e000);
__asm__ __volatile__("" : "+r" (scs));
scs[5] = reload;
scs[4] = 7;
}
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

粉丝