各位大神老师好:
请教一个问题。据说PIC32
单片机的延时,据说可以用内核定时器进行延时。延时1ms,可以,但是,如果我延时2us,示波器显示是40us。示波器用的是虚拟示波器。系统时钟是40Mhz
下面的程序,在网上下的,但是不是很理解。哪位大神,帮忙讲解下。我想延时2us,我应该做,才能达到呢?试了半天,都停留在40us上。
- #define SYSCLK_FREQUENCY 40000000 //* 200MHz,修改成你自己的系统时钟
- #define PBCLK7_FREQUENCY SYSCLK_FREQUENCY
- #define CORE_TIMER_FREQUENCY (PBCLK7_FREQUENCY / 2)
- #define CORE_TIMER_MILLISECONDS (CORE_TIMER_FREQUENCY / 100)
- #define CORE_TIMER_MICROSECONDS (CORE_TIMER_FREQUENCY / 10000)
- unsigned int __attribute__((nomips16)) ReadCoreTimer(void)
- {
- unsigned int timer;
- asm volatile("mfc0 %0, $9" : "=r"(timer));
- return timer;
- }
- void delay_us(unsigned int delayUs)
- {
- unsigned int delayStart;
- delayStart = ReadCoreTimer();
- while ((ReadCoreTimer() - delayStart) < (delayUs * CORE_TIMER_MICROSECONDS));
- }
- void delay_ms(unsigned int delayUs)
- {
- unsigned int delayStart;
- delayStart = ReadCoreTimer();
- while ((ReadCoreTimer() - delayStart) < (delayUs * CORE_TIMER_MILLISECONDS));
- }
复制代码
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2us 的定时,本身要求时钟比较高, 40Mhz 下 2us 能跑80条 nop,别的指令就更加慢了,可以试试 延时 20us, 40us,80us,100us,如果 40us以上都是准的,那肯定就是 速度慢了,没有办法到这个精度,都是猜的,我也没用过,但是这个小的定时会存在这种问题。 还有你的 /100与 /10000 没有太明白
谢谢版主指点。
谢谢指教。
我是先延时1ms的,用示波器查看,高电平时间是1.02ms,然后,我在这个基础上除以1000,理应能达到1us,但结果是40us左右
一周热门 更多>