高精度延時

2022-09-09 12:18:15 字數 2201 閱讀 3933

gptx_cr暫存器

gptx_sr暫存器

gptx_pr暫存器分頻

1、設定 gpt1 定時器

首先設定 gpt1_cr 暫存器的 swr(bit15)位來復位暫存器 gpt1。復位完成以後設定寄存

器 gpt1_cr 暫存器的 clksrc(bit8:6)位,選擇 gpt1 的時鐘源為 ipg_clk。設定定時器 gpt1

的工作模式,

2、設定 gpt1 的分頻值

設定暫存器 gpt1_pr 暫存器的 prescalar(bit111:0)位,設定分頻值。

3、設定 gpt1 的比較值

如果要使用 gpt1 的輸出比較中斷,那麼 gpt1 的輸出比較暫存器 gpt1_ocr1 的值可以

根據所需的中斷時間來設定。本章例程不使用比較輸出中斷,所以將 gpt1_ocr1 設定為最大

值,即:0xffffffff。 4、使能 gpt1 定時器

設定好 gpt1 定時器以後就可以使能了,設定 gpt1_cr 的 en(bit0)位為 1 來使能 gpt1 定

時器。5、編寫延時函式

gpt1定時器已經開始執行了,可以根據前面介紹的高精度延時函式原理來編寫延時函式,

針對 us 和 ms 延時分別編寫兩個延時函式。

bsp_delay.h

#ifndef __bsp_delay_h

#define __bsp_delay_h

#include "imx6ul.h"

/* 函式宣告 */

void delay_init(void);

void delayus(unsigned int usdelay);

void delayms(unsigned int msdelay);

void delay(volatile unsigned int n);

void gpt1_irqhandler(void);

#endif

bsp_delay.c

#include "bsp_delay.h"

/** @description : 延時有關硬體初始化,主要是 gpt 定時器

gpt 定時器時鐘源選擇 ipg_clk=66mhz

* @param : 無 7 * @return : 無 8 */

void delay_init(void)

#if 0

/* 中斷處理函式 */

void gpt1_irqhandler(void)

gpt1->sr |= 1<<0; /* 清除中斷標誌位 */

}#endif

/** @description : 微秒(us)級延時

* @param – usdelay : 需要延時的 us 數,最大延時 0xffffffffus

* @return : 無

*/void delayus(unsigned int usdelay) }}

/** @description : 毫秒(ms)級延時

* @param - msdelay : 需要延時的 ms 數

* @return : 無

*/void delayms(unsigned int msdelay)}/*

* @description : 短時間延時函式

* @param - n : 要延時迴圈次數(空操作迴圈次數,模式延時)

* @return : 無

*/void delay_short(volatile unsigned int n)

}void delay(volatile unsigned int n)

}

vxworks高精度延時

如果支援timestamp,bsp應提供以下函式 systimestampconnect 連線時間戳中斷 systimestampenable 使能時間戳 systimestampdisable 禁止時間戳 systimestampfreq 取得時間戳的頻率 systimestampperiod 取...

C C C 高精度時間及其延時

在分析演算法的效能時,我們通過演算法的時間複雜度可以從理論上分析出演算法的大致高階,但是當我們想具體比較一下演算法真正的效能時,往往希望在機器上測試並記錄其執行的真實時間,那麼就要用到c c 中一些高精度時間函式。微秒 include struct timeval 獲取時間的函式 int getti...

32延時us暫存器 高精度延時函式

在後續我們對講解多個感測器,這幾個感測器對時序的要求都比較高,比如溫濕度感測器dh11,檢視晶元手冊時序,至少就需要微秒級的延時函式。延時函式的方式一般有兩種 使用for迴圈的方式,可能會因為硬體的差異,導致延時函式不准,因此這裡我們使用定時器的方式。開啟之前的timers.c檔案,修改timer ...