(九)arm裸机开发---高精度延时实验

本节介绍另外一个定时器,GPT定时器。通过GPT定时led灯的亮灭,可以输出到示波器上观察精度。

一、GPT定时器

    GPT(General Purpose Timer)定时器和EPIT相比,GPT功能更加强大,有俩个捕获通道,三个输出比较通道,可以生成捕获中断,比较中断,和溢出中断。GPT定时器是向上计数的。

GTP有俩种运行模式:
1.restart模式:GPT1_CR[9] = 0。只适合与通道一。向上计数到比较事件发生,清零,重新计数。我们使用restart模式。
2.free-run模式:GPT1_CR[9] = 1。适合所有通道。即是比较事件发生,依旧向上继续计数。

GPT1_CR寄存器具体的设置:
1.GPT1_CR[15]=1软复位。
2.GPT1_CR[10]=0 不使用24M时钟。
3.GPT1_CR[9] = 0。使用restart模式。
4.GPT1_CR[8:6] = 001 使用ipg_clk时钟。66M。
5.GPT1_CR[0]=1。时钟使能位。

GPT1_PR寄存器具体的设置:
1.GPT1_PR[11:0]=000~fff。代表1到4096分频。我们设置为66分频,即0x41。

GPT1_OCR1寄存器具体的设置:
1.用于设置通道1的比较寄存器的值的。当定时器累加到这个数时,就会产生比较中断。本例程中我们不使用输出比较中断,所以将其设置为最大。

GPT1_CNT:只读寄存器,用于记录当前的计数值。

二、代码实现

1.高精度延时的原理

我们使用的是66M的时钟,使用的是66的分频,所以每秒1M个计数,通过统计GPT1_CNT计数的个数就可以知道延时的时间的长短。

2.具体代码

#include "bsp_delay.h"

void delay_short(volatile unsigned int n){
   
    while (n--) {
   }
}

//大约n ms的延时
void delay(int n){
   
    while (n--){
   
        delay_short(0x7ff)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值