前面討論了SCT的全部寄存器結構及其功能,現在就具體來看一下LPC824中這個充滿特色的SCTimer/PWM,首先看一下它的簡介。
狀態可配置定時器(SCTimer/PWM) 是恩智浦半導體特有的一種外設,它不僅可像大多數傳統定時器一樣工作,而且還添加了狀態機,從而可提供更高水平的可配置性和控制度。它允許將SCT配置為多個PWM、帶死區控制的PWM、帶重置功能的PWM以及傳統計時器無法複製的多種其他配置。除非使能了需要內核來服務的SCTimer/PWM中斷,否則配置好SCTimer/PWM後就可以自主從微控制器內核運行。它可在最少或無CPU干預的情況下控制操作。
在單向或雙向模式中,SCT可以當做單個32位計數器使用,或者當做兩個單獨的16位計數器使用。與大部分定時器一樣,SCT支持一系列匹配寄存器(與計數數值進行比對),以及捕獲寄存器(在檢測到某些預限定條件時可記錄當前的計數數值)。
“事件”概念是SCT多功能中的一項追加功能。SCT模塊支持多個獨立事件,用户可基於某些參數組合(包括其中一個匹配寄存器上的匹配、和/或其中一個SCT輸入或輸出上的轉換、計數方向及其他因素)來定義這些事件。
SCT模塊執行的每種操作都是對其中某個用户定義事件的直接響應,而且不需要任何軟件開銷。任何事件都能夠被使能,以便執行以下操作:
•開始、停止或掛起計數器。
•限制計數器:在單向模式中清除計數器,或在雙向模式中改變其方向。
•置位、清除或切換任何SCT輸出。
•強制進入任何捕獲寄存器捕獲計數數值。
•生成一個DMA請求中斷。
對於狀態,可能包含一些如下這樣的情況:
SCT允許用户分組或/和過濾事件,因此可選擇一些事件,並在其他事件被禁用的情況下同時使能這些事件。一組已使能和已禁用的事件即可被稱為狀態,允許存在多種具備不同已使能和已禁用事件組合的狀態。從一種狀態變為另一種狀態屬於事件驅動型變化,因此可在無軟件干預的情況下發生。通過定義這些狀態,SCTimer/PWM能夠按照執行復雜波形和定時任務所需的複雜程度,提供在硬件中運行這個狀態機的方法。
在簡單系統(例如具備捕獲和匹配功能的典型定時器/計數器)中,能使得定時器捕獲定時器數據或切換匹配輸出的所有事件均被使能,並在計數器運行時始終保持使能。在這種情況下,不會過濾事件,且會採用不變狀態描述系統。這是SCT的默認設置。
在較為複雜的系統中,可能設置兩種狀態,這些狀態使得某些事件可存在於一種狀態中,但不存在於另外一種狀態。在兩種狀態下使能的事件可用於從一種狀態移動至另一種狀態或者返回,並同時在任一狀態下過濾事件。在這種具備兩種狀態的系統中,可根據事件歷史在SCT輸出上創建不同的波形。狀態變更是一種事件驅動型變更,會在無CPU干預的情況下發生。
SCTimer/PWM可正式地被編程成為狀態機發生器。SCT具備在不同事件組之間切換的能力,這賦予了SCT一項獨特功能:被用作高度複雜的狀態機引擎。對於可以確保狀態變更並確定下一個移動狀態的條件,在其發生時,時間會進行確認。因此除了通用I/O之後,還提供了一個功能極為強大的控制工具,尤其是在SCT輸入和輸出連接至其他片上資源(比較器、ADC觸發器、其他定時器等)時。
除了事件和狀態,SCTimer/PWM還提供如下的增強功能:
•包含完全異步模式的4種替代時鐘模式。
•選擇將SCT輸入作為時鐘源或時鐘門控。
•可以選擇“大於或等於”匹配條件,以生成事件的能力。
在NXP的LPC系列芯片中,不同型號所擁有的SCTimer/PWM資源也不盡相同,下面是LPC824的SCTimer/PWM所具備的一些特性。
•SCTimer/PWM支持:
–8個匹配/捕獲寄存器。
–8個事件。
–8個狀態。
–通過多路複用模塊的具有多種連接選項的4個輸入。
–6路輸出。
•計數器/定時器特性:
–每一個SCTimer都可配置為2個16位計數器或1個32位計數器。
–由系統時鐘或所選輸入計時的計數器。
–可配置為上行計數器或可逆計數器。
–數量可配置的匹配寄存器和捕獲寄存器。總共5個匹配和捕獲寄存器。
–匹配和/或輸入或輸出轉換時觸發以下事件:中斷;停止、限制、掛起定時器或改變計數方向;切換輸出;改變狀態。
–計數器值可以載入捕獲寄存器,由匹配或輸入/輸出切換觸發。
•PWM特性:
–計數器可以與匹配寄存器一同使用,以便切換輸出,並創建與時間成比例的PWM信號。
–最多6個單邊沿或雙邊沿PWM輸出,具有獨立的佔空比和相同的PWM週期長度。
•事件創建特性:
–以下條件定義了一次事件:計數器匹配條件、輸入(或輸出)條件(如上升沿或下降沿或電平)、匹配和/或輸入/輸出條件組合。
–所選事件可以限制、掛起、啓動或停止計數器操作,或者改變其方向。
–事件觸發狀態改變、輸出切換、中斷和DMA事務。
–匹配寄存器0可用作自動限值。
–在雙向模式中,事件可以根據計數方向使能。
–可以保持匹配事件,直至發生另一個符合條件的事件。
•狀態控制特性:
–狀態由計數器運行時的事件狀態決定。
–事件的發生導致狀態改變。
–每一個事件都能分配至一個或多個狀態。
–狀態變量可以對多個計數器週期進行排序。
下圖表明瞭SCT的連接情況。
下表給出了SCT的引腳説明。
下圖給出了SCT的結構框架。
下圖給出了SCT的計數器和選擇邏輯。
大多數SCT寄存器或者為計數器和輸出的特定操作配置事件,或者選擇事件,下圖給出了可配置用於每個事件的寄存器和寄存位。
寄存器功能分組如下:
1、計數器配置和控制寄存器
SCT包含兩個寄存器,用於配置SCT並利用軟件監控其操作。
•配置寄存器(CONFIG)在單32位計數器模式或雙16位計數器模式下配置SCT,配置計時和時鐘同步、自動限值以及重新加載寄存器的用法。
•控制寄存器(CTRL)允許監控和置位計數器方向,清除、開始、停止或終止32位計數器或雙計數器模式中的每個16位獨立計數器。
2、事件配置寄存器
每個事件都關聯兩個寄存器:
•每個事件一個EVn_CTRL寄存器,以定義觸發事件的因素。
•每個事件一個EVn_STATE寄存器,以使能事件。
3、匹配和捕獲寄存器
SCT包含一組寄存器,以存儲SCT的匹配或捕獲數值。每個匹配寄存器都關聯一個匹配重新加載寄存器,此重新加載寄存器會在每個計數器週期開始時自動重新加載匹配寄存器。寄存器組包括以下寄存器:
•每個匹配/捕獲寄存器配備一個REGMODE寄存器,以配置每個匹配/捕獲寄存器,用於存儲匹配數值或捕獲數值。
•根據REGMODE的設置,每個寄存器配備一組匹配/捕獲寄存器,以存儲匹配數值或計數器數值。
•每個匹配寄存器配備一個重新加載寄存器。
4、計數器操作使用的事件選擇寄存器
該組包含一些寄存器,這些寄存器選擇的事件會對計數器構成影響。計數器操作即為限制、終止、開始或停止,適用於統一計數器或兩個16位計數器。也包含計數器寄存器,該寄存器具備計數器數值,或雙計數器設置值。寄存器組包括以下寄存器:
•LIMIT選擇會限制計數器的事件。
•START和STOP選擇會啓動或停止計數器的事件。
•HALT選擇會終止計數器的事件:HALT
•COUNT包含計數器數值。
對於LIMIT、START、STOP和HALT寄存器,它們每個都包含針對每個事件選擇的比特位,無論事件是否會限制、停止、啓動或終止計數器或雙計數器模式中的計數器。
在雙計數器模式中,可單獨為每個計數器選擇事件。
5、用於置位或清除輸出的事件選擇寄存器
該組包含一些寄存器,這些寄存器選擇的事件會對每個SCT輸出的等級構成影響。也包含管理衝突(在事件試圖置位或清除相同的輸出時發生)的寄存器。寄存器組包括以下寄存器:
•一個OUTn_SET寄存器,供每個輸出選擇置位輸出的事件。
•一個OUTn_CLR寄存器,供每個輸出選擇清除輸出的事件。
•衝突解決寄存器,當多個事件試圖同時控制輸出時限制操作。
•衝突標誌和衝突中斷使能寄存器,用於監控來自輸出置位和清除衝突的中斷。
•輸出方向控制寄存器,用於交換置位和清除雙方向模式中的事件引發的輸出操作。
OUTn_SET和OUTn_CLR寄存器的每個事件都包含一個位,可選擇事件是否改變給定輸出n的狀態。
在雙計數器模式中,可單獨為每個輸出選擇事件。
6、用於捕捉計數器數值的事件選擇計數器
該組包含選擇事件的寄存器,用於捕獲計數器數值並將其保存在其中一個CAP寄存器中。每個捕獲寄存器m都配有一個關聯CAPCTRLm寄存器,它會選擇事件,以捕獲計數器數值。
7、用於初始化DMA傳輸的事件選擇寄存器
為每兩個DMA請求提供一個寄存器,以選擇可以觸發DMA請求的事件。
DMAREQn寄存器包含針對每個事件的位,可選擇該時間是否觸發DMA請求。重新加載匹配寄存器時,一個額外的位會使能DMA觸發器。
8、中斷處理寄存器
以下寄存器提供由事件置位的標誌,並選擇在其發生時請求中斷的事件。
•該事件標誌寄存器為每個事件(在事件發生時置位)提供一個標誌。
•事件標誌中斷使能寄存器為每個針對SCT中斷使能的事件提供一個位。
9、用於控制SCT輸入和輸出(通過軟件)的寄存器
提供兩個寄存器,允許軟件(與事件相對)置位SCT的輸入和輸出:
•用於讀取任何SCT輸入的狀態的SCT輸入寄存器。
•用於置位或清除任何SCT輸出或讀取輸出狀態的SCT輸出寄存器。