Chinaunix首页 | 论坛 | 博客
  • 博客访问: 116410
  • 博文数量: 32
  • 博客积分: 2015
  • 博客等级: 大尉
  • 技术积分: 475
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-01 14:29
文章分类

全部博文(32)

文章存档

2011年(1)

2009年(12)

2008年(19)

我的朋友

分类:

2008-12-17 12:55:21

Billux OS项目的进程中不断的出现各种问题,这次是一个看门狗问题,打算用看门狗定时器作为系统的tick源,但是,问题如下:
FCLK=192MHZ (1:2:4)
PCLK=48MHZ(通过uart 波特率的计算可以验证)
看门狗WTCON寄存器的配置如下:
prescaler value = 2
watchdog timer = 1
clock select = 00 (16)
interrupt = 1
WTDAT= WTCNT = 10000
按照计算公式,(PCLK / ((prescaler + 1)*16))* WTDAT算出来的定时中断频率应该是100HZ, 但是实际中测下来频率似乎是200hz,不知到有什么问题。在21ic论坛上发了帖子,不知道有没有人有类似的经历?
阅读(1332) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

killercyp2009-01-06 11:32:59

太谢谢您了!看了您上面的回复,我豁然开朗!真是一语惊醒梦中人呀! 我用的是ads+hjtag+s3c2410。我是刚开始学,不借助硬件仿真不行呀,好多东西我是看着代码一步步执行才明白的。而且我还发现,软件仿真和硬件仿真并不一定完全一致,有关对于硬件进行操作的代码还是直接用硬件仿真比较接近真实情况。还有就是单步调试时,每次的消耗的系统时钟数量似乎不定,只有在全速运行下才比较合适!太谢谢您了,在您的帮助下,这个难题总算解决了!再次向您致谢!

killercyp2009-01-04 21:52:31

这位大哥您好!非常奇怪,一样的程序,什么都没变。今天晚上我随意跑了一下。I 终于不为0了。但是我单步调试时,却又发现 I 的变化无任何规律。如果选取pclk=50M的话。 rWTCON = ((PCLK/1000000-1)<<8)|(2<<3)由这个设置可知看门狗的时钟周期为1/64M。那么400*200个pclk周期就相当于 25个看门狗周期。那么 I=25.不知我的理解对不。还望大哥多多指教!小弟感激不尽!

killercyp2008-12-30 12:27:53

我想请教您一个有关应用看门狗来实现100us的延时校准程序。程序源码如下: static int delayLoopCount = 400; void Delay(int time) { // time=0: adjust the Delay function by WatchDog timer. // time>0: the number of loop time // resolution of time is 100us. int i,adjust=0; if(time==0) { time = 200; adjust = 1; delayLoopCount = 400; //PCLK/1M,Watch-dog disable,1/64,interrupt disable,reset disable rWTCON = ((PCLK/1000000-1)<<8)|(2<<3);