4337|13

284

帖子

2

TA的资源

纯净的硅(高级)

楼主
 

关于PIC32延时程序的问题 [复制链接]

 
各位大神老师好:
请教一个问题。据说PIC32单片机的延时,据说可以用内核定时器进行延时。延时1ms,可以,但是,如果我延时2us,示波器显示是40us。示波器用的是虚拟示波器。系统时钟是40Mhz
下面的程序,在网上下的,但是不是很理解。哪位大神,帮忙讲解下。我想延时2us,我应该做,才能达到呢?试了半天,都停留在40us上。



  1. #define SYSCLK_FREQUENCY       40000000     //* 200MHz,修改成你自己的系统时钟
  2. #define PBCLK7_FREQUENCY        SYSCLK_FREQUENCY
  3. #define CORE_TIMER_FREQUENCY        (PBCLK7_FREQUENCY / 2)
  4. #define CORE_TIMER_MILLISECONDS     (CORE_TIMER_FREQUENCY / 100)
  5. #define CORE_TIMER_MICROSECONDS     (CORE_TIMER_FREQUENCY / 10000)

  6. unsigned int __attribute__((nomips16)) ReadCoreTimer(void)
  7. {
  8.     unsigned int timer;

  9.     asm volatile("mfc0   %0, $9" : "=r"(timer));

  10.     return timer;
  11. }

  12. void delay_us(unsigned int delayUs)
  13. {
  14.     unsigned int delayStart;

  15.     delayStart = ReadCoreTimer();
  16.     while ((ReadCoreTimer() - delayStart) < (delayUs * CORE_TIMER_MICROSECONDS));
  17. }

  18. void delay_ms(unsigned int delayUs)
  19. {
  20.     unsigned int delayStart;

  21.     delayStart = ReadCoreTimer();
  22.     while ((ReadCoreTimer() - delayStart) < (delayUs * CORE_TIMER_MILLISECONDS));
  23. }
复制代码


最新回复

学习学习!!!!!!!!!!!!!!!!!!!!!!  详情 回复 发表于 2018-1-5 16:03
点赞 关注
 

回复
举报

638

帖子

2

TA的资源

版主

沙发
 
目前应用32位PIC的网友还很少,至少我只接触,不在用,暂时帮不上你.

点评

谢谢版主指点。  详情 回复 发表于 2017-10-8 19:11
 
 
 

回复

714

帖子

2

TA的资源

一粒金砂(高级)

板凳
 
将分频系数#define CORE_TIMER_FREQUENCY        (PBCLK7_FREQUENCY / 2)改成/40看看呢,是不是你设置的时钟分频跟你找的不同。不过我也没用过这个单片机你可以试试看

点评

谢谢指教。 我是先延时1ms的,用示波器查看,高电平时间是1.02ms,然后,我在这个基础上除以1000,理应能达到1us,但结果是40us左右  详情 回复 发表于 2017-10-8 19:13
 
个人签名Hello astroturfers
 
 

回复

2774

帖子

8

TA的资源

版主

4
 
本帖最后由 strong161 于 2017-10-7 14:43 编辑

2us 的定时,本身要求时钟比较高, 40Mhz 下 2us 能跑80条 nop,别的指令就更加慢了,可以试试 延时 20us, 40us,80us,100us,如果 40us以上都是准的,那肯定就是 速度慢了,没有办法到这个精度,都是猜的,我也没用过,但是这个小的定时会存在这种问题。 还有你的 /100与 /10000 没有太明白

点评

谢谢版主指教。 我是先延时1ms的,用示波器查看,高电平时间是1.02ms,然后,我在这个基础上除以1000,理应能达到1us,但结果是40us左右  详情 回复 发表于 2017-10-8 19:16
 
 
 

回复

721

帖子

1

TA的资源

一粒金砂(高级)

5
 
40MHz需要你自己配置pll。

点评

谢谢指教 配置方面,我自己已经配置好了。 我延时1ms的话,示波器显示在1.02ms,那么,在这个基础上,我在除以1000,理应是1us,结果是40us  详情 回复 发表于 2017-10-8 19:18
 
 
 

回复

284

帖子

2

TA的资源

纯净的硅(高级)

6
 
dingzy_2002 发表于 2017-10-7 14:22
目前应用32位PIC的网友还很少,至少我只接触,不在用,暂时帮不上你.

谢谢版主指点。
 
 
 

回复

284

帖子

2

TA的资源

纯净的硅(高级)

7
 
y909334873 发表于 2017-10-7 14:31
将分频系数#define CORE_TIMER_FREQUENCY        (PBCLK7_FREQUENCY / 2)改成/40看看呢,是不是你设置的时 ...

谢谢指教。
我是先延时1ms的,用示波器查看,高电平时间是1.02ms,然后,我在这个基础上除以1000,理应能达到1us,但结果是40us左右
 
 
 

回复

284

帖子

2

TA的资源

纯净的硅(高级)

8
 
strong161 发表于 2017-10-7 14:39
2us 的定时,本身要求时钟比较高, 40Mhz 下 2us 能跑80条 nop,别的指令就更加慢了,可以试试 延时 20us ...

谢谢版主指教。
我是先延时1ms的,用示波器查看,高电平时间是1.02ms,然后,我在这个基础上除以1000,理应能达到1us,但结果是40us左右
 
 
 

回复

284

帖子

2

TA的资源

纯净的硅(高级)

9
 
电子微创意 发表于 2017-10-7 16:07
40MHz需要你自己配置pll。

谢谢指教
配置方面,我自己已经配置好了。
我延时1ms的话,示波器显示在1.02ms,那么,在这个基础上,我在除以1000,理应是1us,结果是40us

点评

四楼正解,内核定时器一个周期增1,40M的话40个指令周期就是1us,但是你的代码可能超出了80个指令,因此计时已经超出了。  详情 回复 发表于 2017-10-9 21:23
你看看手册有没有相关参数设置的说明,你要知道当前配置下,极限是多少。超过极限,就设不出来。  详情 回复 发表于 2017-10-9 09:59
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

10
 
cawyai23 发表于 2017-10-8 19:18
谢谢指教
配置方面,我自己已经配置好了。
我延时1ms的话,示波器显示在1.02ms,那么,在这个基础上, ...

你看看手册有没有相关参数设置的说明,你要知道当前配置下,极限是多少。超过极限,就设不出来。
 
 
 

回复

419

帖子

1

TA的资源

一粒金砂(中级)

11
 
试试一个NOP指令延时多少,如果都比你这个时间大,那就没得玩了,努力倍频,之后还不行的话,那就说明达不到你这个小小延时
 
 
 

回复

721

帖子

1

TA的资源

一粒金砂(高级)

12
 
cawyai23 发表于 2017-10-8 19:18
谢谢指教
配置方面,我自己已经配置好了。
我延时1ms的话,示波器显示在1.02ms,那么,在这个基础上, ...

四楼正解,内核定时器一个周期增1,40M的话40个指令周期就是1us,但是你的代码可能超出了80个指令,因此计时已经超出了。
 
 
 

回复

721

帖子

1

TA的资源

一粒金砂(高级)

13
 
这段代码的原理就是读MIPS的协处理器的Count寄存器,然后根据主频来计算延时。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
学习学习!!!!!!!!!!!!!!!!!!!!!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表