国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

linuxARM裸機(jī)學(xué)習(xí)筆記(5)----定時(shí)器按鍵消抖和高精度延時(shí)實(shí)驗(yàn)

這篇具有很好參考價(jià)值的文章主要介紹了linuxARM裸機(jī)學(xué)習(xí)筆記(5)----定時(shí)器按鍵消抖和高精度延時(shí)實(shí)驗(yàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

定時(shí)器按鍵消抖

之前的延時(shí)消抖,是直接借助delay函數(shù)進(jìn)行的,但是這樣會(huì)浪費(fèi)CPU的性能。我們采用延時(shí)函數(shù)的方式實(shí)現(xiàn),可以實(shí)現(xiàn)快進(jìn)快出。

linuxARM裸機(jī)學(xué)習(xí)筆記(5)----定時(shí)器按鍵消抖和高精度延時(shí)實(shí)驗(yàn),Linux,學(xué)習(xí),筆記

?定時(shí)器消抖,必須是在t3的時(shí)間點(diǎn)才可以,當(dāng)在t1,t2的時(shí)間點(diǎn)每次進(jìn)入中斷函數(shù)都要重新開啟定時(shí)器的計(jì)時(shí)

linuxARM裸機(jī)學(xué)習(xí)筆記(5)----定時(shí)器按鍵消抖和高精度延時(shí)實(shí)驗(yàn),Linux,學(xué)習(xí),筆記

但是,這兩個(gè)時(shí)間點(diǎn)的時(shí)間小于定時(shí)器設(shè)定的10ms,所以不會(huì)產(chǎn)生定時(shí)器中斷,也會(huì)避免這種情況的發(fā)生。只有在t3的時(shí)刻開啟,才會(huì)產(chǎn)生定時(shí)器中斷【時(shí)間夠長(zhǎng)】,這便是定時(shí)器的消抖原理。

void filtertimer_init(unsigned int value)
{
	EPIT1->CR = 0;	//先清零
	
	/*
     * CR寄存器:
     * bit25:24 01 時(shí)鐘源選擇Peripheral clock=66MHz
     * bit15:4  0  1分頻
     * bit3:	1  當(dāng)計(jì)數(shù)器到0的話從LR重新加載數(shù)值
     * bit2:	1  比較中斷使能
     * bit1:    1  初始計(jì)數(shù)值來(lái)源于LR寄存器值
     * bit0:    0  先關(guān)閉EPIT1
     */
	EPIT1->CR = (1<<24 | 1<<3 | 1<<2 | 1<<1);

	/* 計(jì)數(shù)值    */
	EPIT1->LR = value;
	
	/* 比較寄存器,當(dāng)計(jì)數(shù)器值和此寄存器值相等的話就會(huì)產(chǎn)生中斷 */
	EPIT1->CMPR	= 0;	
	
	GIC_EnableIRQ(EPIT1_IRQn);	/* 使能GIC中對(duì)應(yīng)的中斷 */
	
	/* 注冊(cè)中斷服務(wù)函數(shù)		    */
	system_register_irqhandler(EPIT1_IRQn, (system_irq_handler_t)filtertimer_irqhandler, NULL);	
}

?對(duì)定時(shí)器進(jìn)行設(shè)置,上一章節(jié)已經(jīng)詳細(xì)說(shuō)明了,不多贅述。核心其實(shí)計(jì)時(shí)定時(shí)器設(shè)定了10ms開啟定時(shí)器中斷。因?yàn)檫x擇時(shí)鐘主頻是66MHZ【計(jì)一個(gè)數(shù)=1/66000000s】,所以倒計(jì)時(shí)的時(shí)間是time = (66000000/100/66000000 = 10ms)。

高精度延時(shí)實(shí)驗(yàn)

GPT定時(shí)器

GPT是一個(gè)32位的向上定時(shí)器【0X00000000】,也可以和一個(gè)數(shù)值進(jìn)行比較,當(dāng)計(jì)數(shù)值和這個(gè)數(shù)值相等的話就會(huì)發(fā)生比較事件,產(chǎn)生比較中斷,也存在一個(gè)12位的分頻器【1-4096】。

存在三個(gè)輸出比較寄存器,三個(gè)是輸出比較中斷

兩種模式:

重新啟動(dòng)(restart)模式:

當(dāng) GPTx_CR(x=1 , 2) 寄存器的 FRR 位清零的時(shí)候 GPT 工作在此
模式。在此模式下,當(dāng)計(jì)數(shù)值和比較寄存器中的值相等的話計(jì)數(shù)值就會(huì)清零,然后重新從
0X00000000 開始向上計(jì)數(shù),只有比較通道 1 才有此模式!向比較通道 1 的比較寄存器寫入任何
數(shù)據(jù)都會(huì)復(fù)位 GPT 計(jì)數(shù)器。對(duì)于其他兩路比較通道(通道 2 3 ),當(dāng)發(fā)生比較事件以后不會(huì)
復(fù)位計(jì)數(shù)器

自由運(yùn)行(free-run)模式

當(dāng) GPTx_CR(x=1 , 2) 寄存器的 FRR 位置 1 時(shí)候 GPT 工作在此模
式下,此模式適用于所有三個(gè)比較通道,當(dāng)比較事件發(fā)生以后并不會(huì)復(fù)位計(jì)數(shù)器,而是繼續(xù)計(jì)
數(shù),直到計(jì)數(shù)值為 0XFFFFFFFF ,然后重新回滾到 0X00000000 。
linuxARM裸機(jī)學(xué)習(xí)筆記(5)----定時(shí)器按鍵消抖和高精度延時(shí)實(shí)驗(yàn),Linux,學(xué)習(xí),筆記

SWR(bit15):向此位寫 1 就可以復(fù)位 GPT 定時(shí)器,當(dāng) GPT 復(fù)位完成以 后此為會(huì)自動(dòng)清零

FRR(bit9):當(dāng)此位為 0 的時(shí)候比較通道 1 工作在重新啟動(dòng)(restart)模式。當(dāng)此位為 1 的時(shí)候所有的三個(gè)比較通道均工作在自由運(yùn)行模式(free-run)
CLKSRC(bit8:6)
GPT 定時(shí)器時(shí)鐘源選擇位,為 0 的時(shí)候關(guān)閉時(shí)鐘源;為 1 的時(shí)候選擇 ipg_clk 作為時(shí)鐘源;為 2 的時(shí)候選擇 ipg_clk_highfreq 為時(shí)鐘源;為 3 的時(shí)候選擇外部時(shí)鐘為 時(shí)鐘源;為 4 的時(shí)候選擇 ipg_clk_32k 為時(shí)鐘源;為 5 的時(shí)候選擇 ip_clk_24M 為時(shí)鐘源。
ENMOD(bit1) GPT 使能模式,此位為 0 的時(shí)候如果關(guān)閉 GPT 定時(shí)器,計(jì)數(shù)器寄存器保
存定時(shí)器關(guān)閉時(shí)候的計(jì)數(shù)值。此位為 1 的時(shí)候如果關(guān)閉 GPT 定時(shí)器,計(jì)數(shù)器寄存器就會(huì)清零。
EN(bit) GPT 使能位,為 1 的時(shí)候使能 GPT 定時(shí)器,為 0 的時(shí)候關(guān)閉 GPT 定時(shí)器

?linuxARM裸機(jī)學(xué)習(xí)筆記(5)----定時(shí)器按鍵消抖和高精度延時(shí)實(shí)驗(yàn),Linux,學(xué)習(xí),筆記

PRESCALER(bit11:0) 這就是 12 位分頻值, 可設(shè)置 0~4095 ,分別對(duì)應(yīng) 1~4096 分頻

?linuxARM裸機(jī)學(xué)習(xí)筆記(5)----定時(shí)器按鍵消抖和高精度延時(shí)實(shí)驗(yàn),Linux,學(xué)習(xí),筆記文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-629847.html

ROV(bit5) 回滾標(biāo)志位,當(dāng)計(jì)數(shù)值從 0XFFFFFFFF 回滾到 0X00000000 的時(shí)候此位置 1 。
IF2~IF1(bit4:3) 輸入捕獲標(biāo)志位,當(dāng)輸入捕獲事件發(fā)生以后此位置 1 ,一共有兩路輸入捕
獲通道。如果使用輸入捕獲中斷的話需要在中斷處理函數(shù)中清除此位。
OF3~OF1(bit2:0) :輸出比較中斷標(biāo)志位,當(dāng)輸出比較事件發(fā)生以后此位置 1 ,一共有三路
輸出比較通道。如果使用輸出比較中斷的話需要在中斷處理函數(shù)中清除此位

高精度延時(shí)的原理:

才開始選擇的是66MHZ的頻率,然后66進(jìn)行分頻,所以時(shí)鐘頻率為1MHZ,也就是計(jì)一個(gè)數(shù)字為1us,這樣我們就可以進(jìn)行精確計(jì)時(shí)了,當(dāng)GPTx_CNT為最大值的時(shí)候【0XFFFFFFFFus = 4294967296us = 4295s = 71.5min】。
void delayus(unsigned    int usdelay)
{
	unsigned long oldcnt,newcnt;
	unsigned long tcntvalue = 0;	/* 走過(guò)的總時(shí)間  */

	oldcnt = GPT1->CNT;
	while(1)
	{
		newcnt = GPT1->CNT;
		if(newcnt != oldcnt)
		{
			if(newcnt > oldcnt)		/* GPT是向上計(jì)數(shù)器,并且沒有溢出 */
				tcntvalue += newcnt - oldcnt;
			else  					/* 發(fā)生溢出    */
				tcntvalue += 0XFFFFFFFF-oldcnt + newcnt;
			oldcnt = newcnt;
			if(tcntvalue >= usdelay)/* 延時(shí)時(shí)間到了 */
			break;			 		/*  跳出 */
		}
	}
}

/*
 * @description		: 毫秒(ms)級(jí)延時(shí)
 * @param - msdelay	: 需要延時(shí)的ms數(shù)
 * @return 			: 無(wú)
 */
void delayms(unsigned	 int msdelay)
{
	int i = 0;
	for(i=0; i<msdelay; i++)
	{
		delayus(1000);
	}
}

到了這里,關(guān)于linuxARM裸機(jī)學(xué)習(xí)筆記(5)----定時(shí)器按鍵消抖和高精度延時(shí)實(shí)驗(yàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【裸機(jī)開發(fā)】GPT 定時(shí)器(一) —— GPT的功能、寄存器解析

    【裸機(jī)開發(fā)】GPT 定時(shí)器(一) —— GPT的功能、寄存器解析

    后續(xù)需要使用 GPT 計(jì)數(shù)器實(shí)現(xiàn)中斷以及延時(shí),這里我們需要先了解一下GPT的功能以及相關(guān)寄存器。 目錄 一、GPT 定時(shí)器的功能 1、計(jì)數(shù)器 2、輸入捕獲 3、輸出比較(GPT的兩種工作模式) 二、寄存器解析 1、GPTx_CR 2、GPTx_PR 3、GPTx_SR 4、GPTx_IR 5、GPTx_OCRn 6、GPTx_ICRn 7、GPTx_CNT gpt 定時(shí)

    2024年02月12日
    瀏覽(25)
  • 【筆記】6位數(shù)碼管顯示定時(shí)器定時(shí)的時(shí)分秒,通過(guò)按鍵控制時(shí)間,自定義串口通信協(xié)議,根據(jù)單片機(jī)接收到的指令控制數(shù)碼管顯示

    【筆記】6位數(shù)碼管顯示定時(shí)器定時(shí)的時(shí)分秒,通過(guò)按鍵控制時(shí)間,自定義串口通信協(xié)議,根據(jù)單片機(jī)接收到的指令控制數(shù)碼管顯示

    ??????????目的:利用PROTUES仿真軟件、串口調(diào)試助手、虛擬串口,搭建單片機(jī)與PC通信仿真平臺(tái),熟悉單片機(jī)串口的配置及與PC機(jī)的通信方法;嘗試制定通信協(xié)議(含開始碼、指令、數(shù)據(jù)、停止碼),單片機(jī)根據(jù)通信協(xié)議解析接收到的內(nèi)容,并根據(jù)接收的指令執(zhí)行相應(yīng)的操

    2024年02月05日
    瀏覽(92)
  • 【STM32】STM32學(xué)習(xí)筆記-定時(shí)器定時(shí)中斷 定時(shí)器外部時(shí)鐘(14)

    【STM32】STM32學(xué)習(xí)筆記-定時(shí)器定時(shí)中斷 定時(shí)器外部時(shí)鐘(14)

    1.1 TIM_InternalClockConfig 1.2 TIM_TimeBaseInit 1.3 TIM_TimeBaseInitTypeDef 1.4 TIM_ClearFlag 1.5 TIM_ITConfig 1.6 TIM_Cmd 1.7 中斷服務(wù)函數(shù) 參考程序 1.8 TIM_ETRClockMode2Config timer.h timer.c main.c timer.h timer.c main.c 09-定時(shí)器定時(shí)中斷.rar 10-定時(shí)器外部時(shí)鐘.rar 參考: 【STM32】江科大STM32學(xué)習(xí)筆記匯總

    2024年02月03日
    瀏覽(97)
  • 51-定時(shí)器與按鍵控制LED流水燈模式&定時(shí)器時(shí)鐘

    51-定時(shí)器與按鍵控制LED流水燈模式&定時(shí)器時(shí)鐘

    按鍵(以獨(dú)立按鍵為例)控制LED流水燈模式: 在按鍵控制LED流水燈模式中,如果僅僅簡(jiǎn)單的把獨(dú)立按鍵與LED流水燈拼接起來(lái),則會(huì)出現(xiàn)一些問(wèn)題:在LED流水燈的代碼中會(huì)有長(zhǎng)時(shí)間的Delay,此時(shí)按鍵檢測(cè)就會(huì)很不靈敏:按下時(shí)不靈敏,需要一些時(shí)間才能被檢測(cè)到,按下后再松手時(shí)

    2024年02月08日
    瀏覽(19)
  • DSP28335學(xué)習(xí)筆記:定時(shí)器中斷

    DSP28335學(xué)習(xí)筆記:定時(shí)器中斷

    F28335的CPU定時(shí)器有3個(gè)且均為32位,分別是Timer0、Timer1、Timer2, 其中 Timer2 是為操作系統(tǒng) DSP/BIOS 保留的,當(dāng)未移植操作系統(tǒng)時(shí),可用來(lái)做普 通的定時(shí)器。這三個(gè)定時(shí)器的中斷信號(hào)分別為 TINT0,TINT1,TINT2,分別對(duì)應(yīng)于中斷向量 INT1,INT13,INT14。 一、F28335定時(shí)器介紹(CPU定時(shí)器)

    2024年04月10日
    瀏覽(24)
  • 定時(shí)器搭配GPIO做定時(shí)掃描按鍵 -- STM32

    定時(shí)器搭配GPIO做定時(shí)掃描按鍵 -- STM32

    在STM32F103系列的單片機(jī)應(yīng)用中,定時(shí)器(TIM)和通用輸入/輸出(GPIO)是常用的模塊之一。這兩個(gè)模塊結(jié)合起來(lái),可以實(shí)現(xiàn)非常多的實(shí)際應(yīng)用,其中,定時(shí)器可以用來(lái)實(shí)現(xiàn)定時(shí)掃描按鍵,而GPIO可以用來(lái)控制LED等設(shè)備。 本文將介紹,在STM32F103系列的單片機(jī)中如何通過(guò)定時(shí)器和

    2024年02月07日
    瀏覽(19)
  • C51單片機(jī)按鍵控制流水燈模式(定時(shí)器版本)以及定時(shí)器時(shí)鐘

    C51單片機(jī)按鍵控制流水燈模式(定時(shí)器版本)以及定時(shí)器時(shí)鐘

    ? 上篇文章我們學(xué)了關(guān)于定時(shí)器的三大組成部分及許多寄存器的概念問(wèn)題,這篇文章我們就要開始講解實(shí)操部分。 首先,我們先來(lái)看看本文最后寫成的代碼: ? ? ?以上三張是代碼的主函數(shù),此外,代碼中還需用到的獨(dú)立按鍵檢測(cè)代碼在下面: ?注意:頭文件中#ifndef和#def

    2023年04月17日
    瀏覽(26)
  • 【STM32】學(xué)習(xí)筆記(TIM定時(shí)器)

    【STM32】學(xué)習(xí)筆記(TIM定時(shí)器)

    定時(shí)器可以對(duì)輸入的時(shí)鐘進(jìn)行計(jì)數(shù),并在計(jì)數(shù)值達(dá)到設(shè)定值時(shí)觸發(fā)中斷 16位計(jì)數(shù)器、預(yù)分頻器、自動(dòng)重裝寄存器的時(shí)基單元,在72MHz計(jì)數(shù)時(shí)鐘下可以實(shí)現(xiàn)最大59.65s的定時(shí) 不僅具備基本的定時(shí)中斷功能,而且還包含內(nèi)外時(shí)鐘源選擇、輸入捕獲、輸出比較、編碼器接口、主從觸發(fā)

    2024年02月09日
    瀏覽(25)
  • stm32——hal庫(kù)學(xué)習(xí)筆記(定時(shí)器)

    stm32——hal庫(kù)學(xué)習(xí)筆記(定時(shí)器)

    使用純軟件(CPU死等)的方式實(shí)現(xiàn)定時(shí)(延時(shí))功能 使用精準(zhǔn)的時(shí)基,通過(guò)硬件的方式,實(shí)現(xiàn)定時(shí)功能 遞增計(jì)數(shù)模式實(shí)例說(shuō)明 中心對(duì)齊模式實(shí)例說(shuō)明 TIM6 和TIM7 控制寄存器 1(TIMx_CR1) TIM6 和TIM7 DMA/中斷使能寄存器(TIMx_DIER) TIM6 和TIM7 狀態(tài)寄存器(TIMx_SR) TIM6 和TIM7 計(jì)數(shù)器(TIMx_CNT)

    2024年02月21日
    瀏覽(30)
  • stm32學(xué)習(xí)筆記-6TIM定時(shí)器

    stm32學(xué)習(xí)筆記-6TIM定時(shí)器

    注:筆記主要參考B站 江科大自化協(xié) 教學(xué)視頻“STM32入門教程-2023持續(xù)更新中”。 注:工程及代碼文件放在了本人的Github倉(cāng)庫(kù)。 定時(shí)器是STM32中功能最強(qiáng)大、結(jié)構(gòu)最復(fù)雜的一個(gè)外設(shè)。定時(shí)器將包括四部分8小節(jié): 第一部分主要講定時(shí)器基本定時(shí)的功能,也就是指定一個(gè)時(shí)間,讓

    2024年02月15日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包