可編程定時計數器8253/8254 - 8253入門

時鐘-給設備打拍子

概述

在計算機系統中,為了使所有設備之間的通信井然有序,各通信設備間必須有統一的節奏,不能各干各的,這個節奏就被稱為定時或時鐘

時鐘并不是計算機處理速度的衡量,而是一種使設備間相互配合而避免發生沖突的節拍。時鐘只是一種時間的度量,只是一種節奏,其時間長度并不統一,各種設備都有自己的時鐘,也就是有自己的工作節拍

  • 比如處理器的時鐘和外部設備的時鐘肯定不是一個數量級
  • 讓處理器這種高速設備以外部設備低速時鐘工作,處理器肯定會覺得很閑
  • 而讓低速的外部設備以處理器的時鐘節拍工作,外部設備也許急得不知所措

時鐘信號并不是專指處理器的時鐘,也并不特指IRQ0上的時鐘,表達的意思僅僅是設備自己的工作節拍、頻率

時鐘的分類

內部時鐘

內部時鐘是指處理器中內部元件,如運算器、控制器的工作時序,主要用于控制、同步內部工作過程的步調

內部時鐘是由晶體振蕩器產生的,簡稱晶振,它位于主板上,其頻率經過分頻之后就是主板的外頻,處理器和南北橋之間的通信就基于外頻

Intel處理器將此外頻乘以某個倍數(也稱為倍頻)之后便稱為主頻

處理器取指令、執行指令中所消耗的時鐘周期,都是基于主頻的。內部時鐘是由處理器固件結構決定的

外部器內部元件的工作速度是最快的,所有內部時鐘的時間單位粒度比較精細,通常都是納秒(ns)級

外部時鐘

外部時鐘是指處理器與外部設備或外部設備之間通信采用的一種時序,比如IO接口和處理器之間在A/D轉換時的工作時序、兩個串口設備之間進行數據傳輸時也要事先同步時鐘等

外部設備的速度對于處理器來說就很慢了,所以其時鐘的時間單位粒度較大,一般是毫秒(ms)級或秒(s)級

如何保證運行在不同時鐘節拍下的設備能夠同步通信?

應以處理器的內部時鐘為依據來設計外部設備的時鐘,既要符合處理器內部運行時序的規定,又要滿足外部設備工作時序的要求

定時計數器就是用來解決時序配合問題的

已知處理器的內部時鐘信號有晶振產生,故計時精準穩定。但晶振產生的信號頻率過高,因此必須將其送到定時計數器分頻,這才能產生所需要的各種定時信號

外部定時

軟件實現

int cycle_cnt = 90000;
while (cycle_cnt --> 0)

讓處理器執行9萬次空循環,通過這種延遲方式達到一定的定時作用

但這種空兜處理器的代價是白白消耗時鐘周期,處理器的資源是很寶貴的

硬件實現

這一類硬件稱為定時器

計時器的功能就是定時發信號。當到達了所計數的時間,計數器可以自動發一個輸出信號,可以用該信號向處理器發出中斷,這樣處理器可以執行相應的中斷處理程序。或者用該信號直接啟動某些外部設備

硬件定時器是獨立的,可以同處理器并行工作,所以用硬件定時器定時的好處是節省處理器時間

可編程定時計數器

常用可編程定時計數器有 Intel 8253/8254/82C54。8253用的是倒計時的方式

如何修改計數值?

正計時

每一次時鐘脈沖發生時,將當前計數值加1,直到與設定的目標終止值相等時,提示時間已到,典型的例子就是鬧鐘

倒計時

先設定好計數器的值,每一次時鐘脈沖發生時將計數值減1,直到為0時提示時間已到,典型的例子就是電風扇的定時

8253入門

在這里插入圖片描述

8253結構

在8253內部有3個獨立的計數器,圖7-45的右側的3個計數器,分別是計數器0計數器2,它們的端口分別是0x400x42

計數器又稱為通道,每個計數器都完全相同,都是16位大小

它們是獨立的,也就是這三個計數器的工作是不依賴的,可以同時工作,各干各的。原因是各個計數器都有自己的一套寄存器資源,工作時自己用自己的,互不干涉

寄存器資源包括一個16位的計數初值寄存器、一個計數器執行部件和一個輸出鎖存器。其中,計數器執行部件是計數器中真正進行計數工作的元器件,其本質是個減法計數器

計數器的三個引角: CLK、GATE、OUT

CLK

CLK 表示時鐘輸入信號,即計數器自己工作的節拍,也就是計數器自己的時鐘頻率

每當此引腳收到一個時鐘信號,減法計數器就將計數值減1

連接到此引腳的脈沖頻率最高位10MHz, 8253為2MHz

GATE

GATE表示門控輸入信號,在某些工作方式下用于控制計數器是否可以開始計數,在不同工作方式下GATE的作用不同,到時候同工作方式一同介紹

OUT

OUT表示計數器輸出信號。當定時工作結束,也就是計數值為0時,根據計數器的工作方式,會在OUT引腳上輸出相應的信號

此信號用來通知處理器或某個設備:定時完成

這樣處理器或外部設備便可以執行相應的行為動作

計數流程

計數開始之前的計數初值保存在計數初值寄存器中,計數器執行部件(減去計數器)將此初值載入后,計數器的CLK引腳每收到一個脈沖信號,計數器執行部件(減法計數器)便將計數值減1,同時將當前計數值保存在輸出鎖存器

當計數值減到0時,表示定時工作結束,此時將通過OUT引腳發出信號,此信號可以用來向處理器發出中斷請求,也可以直接啟動某個設備工作

計數器內部各個結構的功能

計數初值寄存器、計數器執行部件和輸出鎖存器都是16位寬度的寄存器,所有高8位和低8位都可以單獨訪問

計數初值寄存器

計數初值寄存器用來保存計數器的初始值,它是16位寬度,對8253初始化時寫入的計數初始值就保存在計數計數初值寄存器

它的作用是為計數器執行部件準備初始計數值,之后的計數過程與它無關。當計數器選擇了某種重復計數的工作方式后,比如工作方式2和工作方式3,還需要將此計數初值重新裝載到計數器執行部件中

計數器執行部件是計數器中真正“計數”的部件,計數的工作是由計數器執行部件完成的,所以它才是真正實際的計數器

減法計數器

8283是個倒計時計數器,原因是計數器執行部件是個16位的減法計數器,它從初值寄存器中拿到起始值,載入到自己的寄存器后便開始遞減計數(注意:計數過程中不斷變化的值稱為當前計數值,它保存在執行部件自己的寄存器中,初值寄存器中的值不受影響)

輸出鎖存器

輸出鎖存器也稱為當前計數值鎖存器,用于把當前減去計數器中的計數值保存下來,其目的就是為了讓外界可以隨時獲取當前計數器

計數器中的計數值是不斷變化的,處理器無法直接從計數器中獲取當前計數值

原因是這樣的

  • 計數器的使命就是通過計數的方式實現定時功能,必須要求精準,所有絕不能為了獲取計數值而停止計數

為了獲取任意時刻的計數值,8253只有將它送到輸出寄存器,此鎖存器起到暫存寄存器的作用。這樣處理器便能從輸出鎖存器中獲取瞬時計數值

8253 計數器

在這里插入圖片描述

計數器0的作用是產生時鐘信號,這個時鐘是指連接到主片IRQ0引腳上的那個時鐘,也就是計數器0決定時鐘中斷信號的發生頻率

參考資料

  • 可編程定時計數器8253/8254
  • 8253(8254)計時/計數器簡介

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37320.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37320.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【2024-06-21】網易互娛秋招實習筆試三道編程題解

恭喜發現寶藏!搜索公眾號【TechGuide】回復公司名,解鎖更多新鮮好文和互聯網大廠的筆經面經。 作者@TechGuide【全網同名】 訂閱專欄: 【專享版】2024最新大廠筆試真題解析,錯過必后悔的寶藏資源! 第一題:陰陽師斗技 題目描述 小蓋正在參加陰陽師的斗技。已知斗技的規…

Linux 磁盤掛載與分區

Linux 磁盤掛載與分區 vda1: 其中vd表示虛擬磁盤,a表示第一塊磁盤,b表示第二塊磁盤,1表示第一塊磁盤的第一分區(顯然兩塊磁盤都只有一個分區)圖中可以看到,vda1磁盤只有一個分區,且全部掛載到根…

vue3使用vant4的列表vant-list點擊進入詳情自動滾動到對應位置,踩坑日記(一天半的踩坑經歷)

1.路由添加keepAlive <!-- Vue3緩存組件&#xff0c;寫法和Vue2不一樣--><router-view v-slot"{ Component }"><keep-alive><component :is"Component" v-if"$route.meta.keepAlive"/></keep-alive><component…

如何在MySQL中按字符串中的數字排序

在管理數據庫時&#xff0c;我們經常遇到需要按嵌入在字符串中的數字進行排序的情況。這在實際應用中尤為常見&#xff0c;比如文件名、代碼版本號等字段中通常包含數字&#xff0c;而這些數字往往是排序的關鍵。本文將詳細介紹如何在MySQL中利用正則表達式提取字符串中的數字并…

LiteDB - 一個單數據文件 .NET NoSQL 文檔存儲

LiteDB 一個小巧、快速、輕量級的 NoSQL 嵌入式數據庫。 Serverless NoSQL 文檔存儲類似于 MongoDB 的簡單 API100% C# 代碼,支持 .NET 3.5 / .NET 4.0 / NETStandard 1.3 / NETStandard 2.0,單 DLL (小于 300 kb)支持線程和進程安全支持文檔/操作級別的 ACID支持寫失敗后的數…

Google 發布最新開放大語言模型 Gemma 2,現已登陸 Hugging Face Hub

Google 發布了最新的開放大語言模型 Gemma 2&#xff0c;我們非常高興與 Google 合作&#xff0c;確保其在 Hugging Face 生態系統中的最佳集成。你可以在 Hub 上找到 4 個開源模型 (2 個基礎模型和 2 個微調模型) 。發布的功能和集成包括&#xff1a; Hub 上的模型https://hf.…

Java家教系統小程序APP公眾號h5源碼

讓學習更高效&#xff0c;更便捷 &#x1f31f; 引言&#xff1a;家教新選擇&#xff0c;小程序來助力 在快節奏的現代生活中&#xff0c;家長們越來越注重孩子的教育問題。然而&#xff0c;如何為孩子找到一位合適的家教老師&#xff0c;成為了許多家長頭疼的問題。現在&…

交叉編譯中的 --build、 --host和 --target

在交叉編譯中比較常見的一些參數就是build、host和target了,正確的理解這三者的含義對于交叉編譯是非常重要的,下面就此進行解釋   --build=編譯該軟件所使用的平臺   --host=該軟件將運行在哪個平臺   --target=該軟件所處理的目標平臺 我們經常會看到如下代碼:   …

谷歌個人號,20人連續封測14天所需設備該怎么解決?

現在&#xff0c;在Google Play上架應用&#xff0c;對于大部分開發者來說&#xff0c;真的是不小的挑戰&#xff0c;因為目前谷歌上架政策越來越嚴格了。特別是從2023年11月13日起&#xff0c;新政策要求個人開發者賬號的應用必須經過20個獨立用戶連續14天的封閉測試&#xff…

【C語言】--分支和循環(1)

&#x1f37f;個人主頁: 起名字真南 &#x1f9c7;個人專欄:【數據結構初階】 【C語言】 目錄 前言1 if 語句1.1 if1.2 else1.3 嵌套if1.4 懸空else 前言 C語言是結構化的程序設計語言&#xff0c;這里的結構指的是順序結構、選擇結構、循環結構。 我們可以用if、switch實現分支…

vue2實例實現一個初步的vuex

vue2實例實現一個初步的vuex 實現源碼&#xff1a;vue2-review 1.App.vue 2.store目錄下的index.js 3.效果 微信公眾號&#xff1a;刺頭拾年

MATLAB的.m文件與Python的.py文件:比較與互參

simulink MATLAB的.m文件與Python的.py文件&#xff1a;比較與互參相似之處**1. 基本結構****2. 執行邏輯****3. 可讀性和維護性** 差異性**1. 語法特性****2. 性能和應用****3. 開發環境** 互相學習的可能性結論 MATLAB的.m文件與Python的.py文件&#xff1a;比較與互參 在編…

擴展閱讀:什么是中斷

如果用一句話概括操作系統的原理,那就是:整個操作系統就是一個中斷驅動的死循環,用最簡單的代碼解釋如下: while(true){doNothing(); } 其他所有事情都是由操作系統提前注冊的中斷機制和其對應的中斷處理函數完成的。我們點擊一下鼠標,敲擊一下鍵盤,執行一個程序,…

重生之我要學后端100--計算機網絡部分概念(持續更新)

TCP/IP、DNS、負載均衡器等等 前言一、TCP/IP&#xff08;傳輸控制協議/互聯網協議&#xff09;二、DNS&#xff08;域名系統&#xff09;三、負載均衡器其他網絡概念 前言 了解網絡基礎知識對于后端開發者至關重要&#xff0c;因為這些知識有助于理解應用程序是如何在更廣闊的…

中英雙語介紹美國的州:麻省,馬塞諸塞州(Massachusetts)

中文版 馬薩諸塞州&#xff08;Massachusetts&#xff09;位于美國東北部的新英格蘭地區&#xff0c;是美國歷史最悠久、文化最豐富的州之一。以下是對馬薩諸塞州各方面的詳細介紹&#xff1a; 人口 截至2020年&#xff0c;美國人口普查數據顯示&#xff0c;馬薩諸塞州的人口…

C++ 之運算符

作用&#xff1a;用于執行代碼的運算 主要的運算符類型&#xff1a; 運算符類型作用算術運算符用于處理四則運算賦值運算符用于將表達式的值賦給變量比較運算符用于表達式的比較&#xff0c;并返回一個真值或假植邏輯運算符用于根據表達式的值返回真值或假植 1 算術運算符 …

Spring MVC中的DispatcherServlet、HandlerMapping和ViewResolver的作用

在Spring MVC框架中&#xff0c;DispatcherServlet、HandlerMapping和ViewResolver是核心組件&#xff0c;它們各自承擔著不同的角色和任務&#xff1a; 1.DispatcherServlet&#xff1a;它是Spring MVC生命周期中的前端控制器&#xff0c;負責接收HTTP請求并將它們分發給相應的…

5.x86游戲實戰-CE定位基地址

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 本次游戲沒法給 內容參考于&#xff1a;微塵網絡安全 上一個內容&#xff1a;4.x86游戲實戰-人物狀態標志位 上一個內容通過CE未知的初始值、未變動的數值、…

機器學習SVR 隨機森林 RBF神經網絡做回歸預測的MATLAB代碼

SVR 參考這篇文章 Libsvm使用筆記【matlab】 close all; clc clear %% 下載數據 load(p_train.mat); load(p_test.mat); load(t_train.mat); load(t_test.mat); %% 數據歸一化 %輸入樣本歸一化 [pn_train,ps1] mapminmax(p_train); pn_train pn_train; pn_test mapminma…

設置用戶訪問hdfs

如果hadoop沒有啟Kerberos或者從Kerberos獲取的用戶為null&#xff0c;那么獲取HADOOP_USER_NAME環境變量&#xff0c;并將它的值作為Hadoop執行用戶。如果我們沒有設置HADOOP_USER_NAME環境變量&#xff0c;那么程序將調用whoami來獲取當前用戶&#xff0c;并用groups來獲取用…