龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 2303|回复: 4

Loongson 2F的Count/Compare是不是有点问题

[复制链接]
发表于 2010-9-12 14:21:13 | 显示全部楼层 |阅读模式
本帖最后由 zt52952 于 2010-9-13 21:36 编辑

我使用CP0_SetCompare(CP0_GetCompare() + 0x3cce68)重设Compare产生中断。
(其中0x3cce68为10ms内Count在797MHz下的增加数)
在断中服务程序中每产生100次中断,即1s打印一次。

结果Count值常常读错。
发表于 2010-9-12 19:45:01 | 显示全部楼层
内核就是用这个的,应该灭有问题的。读错是什么意思?你设置的时候要考虑溢出的。
发表于 2010-9-13 02:32:22 | 显示全部楼层
就像锅巴说的,你考虑溢出了吗?

还有,现在的内核是没有用到Count/Compare的,一个原因是cpu的频率是变化的,所以计数是个大麻烦。
 楼主| 发表于 2010-9-13 21:44:41 | 显示全部楼层
应该不需要考虑溢出,Count同样也会溢出。
发表于 2010-9-14 00:24:21 | 显示全部楼层
应该不需要考虑溢出,Count同样也会溢出。
zt52952 发表于 2010-9-13 21:44


你说得对。从另一个角度,这也要取决于中断产生是如何定义的。这是cevt-r4k中的定义:

  1. static int mips_next_event(unsigned long delta,
  2.                            struct clock_event_device *evt)
  3. {
  4.         unsigned int cnt;
  5.         int res;

  6.         cnt = read_c0_count();
  7.         cnt += delta;
  8.         write_c0_compare(cnt);
  9.         res = ((int)(read_c0_count() - cnt) > 0) ? -ETIME : 0;
  10.         return res;
  11. }
复制代码
他们好像确实考虑了溢出。你在看看。。。

本版积分规则

Archiver|手机版|小黑屋|Lemote Inc.

GMT+8, 2020-10-22 14:27 , Processed in 0.137406 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表