發表文章

EC - Watchdog

圖片
Watchdog Watchdog  是用來偵測  Firmware  是否有正常的工作,沒有因為中斷佔用或者 Dead Loop 而被停止運作,在啟動 Watchdog 之後,Firmware 也需配合修改,在 Watchdog Timeout 之前,定時的 Touch Watchdog (Clear Watchdog Timer).若沒有定時 Touch Watdog 造成  Watchdog Timeout,EC 就會被 Watchdog  Reset , 核心處理器被重置,Firmware 由程式的起始點開始執行。 Watchdog 的方塊圖如下: Watchdog Module  是由  EC  系統外掛或內含的  32KHz  或更低頻的振盪器做為   Module  的基本工作頻率,經由一 5 個位元的計時器  Timer 0 ,做為 Firmware 1.0ms 的計時器,產生中斷,提供給 Firmware  週期性偵察裝置或事件的工作時間,Timer0 的輸出訊號,再經由 16 位元的計時器由  T0OUT  傳送到  ICU  由  Firmware 的中斷服務程式來完成  T0OUT  中斷的要求。最後由  Watchdog  計數器  WDCNT 可選擇使用 Timer 0 或 T0OUT 來當計數訊號, 計數 Timeout 後,產生硬體中斷,硬體中斷路徑可以分為 Warm Reset  和  Cold Rest 。 Warm Reset –  清除核心處理器及狀態暫存器和 Power Manager Controller Module 。 Cold Reset – Reset  整個晶片 當系統要填寫 ESCD 或更新 BIOS 時,需要停止 Watchdog 的計數,避免 Watchdog 持續計數,產生 Reset 。停止 Watchdog 計數的方法,以 nuvoton EC 來說明 Watchdog Configuration, 先把 TWCFG 的 WDSDME 位元設為 HIGH , 0x87,0x61,0x63 填入 WDSDM 暫存器即可中斷 Watchdog 的計數。重新啟動計數只要填入 0x87,0x61,0x63 填入 WDSDM 暫存器即可。 TWCFG (Timer and Watchdog Configura

EC - MIWU

圖片
Multi-Input Wake-Up(MIWU) MIWU模組用於把  EC 由 Idle  mode 中  Wake up 到 Active mode 。在 Active Mode 下,Wake up 事件成為ICU的中斷訊號,完成Wake up 的要求工作。 MIMU 的 Wake up 事件 的 觸發 來源 可分為內部模組和外部可 Wake up 群組,總共 32 個觸發事件來源 。 MIWU 察覺任何有效的輸入觸發訊號,若有觸發訊號進來則會產生 wake-up 事件 的需求,這時 wake-up 事件 會通知 Power Management module(PMC) 讓系統離開 Idle mode 回復 Active mode 。 下圖為 Wake-up 事件 的流程圖 在 wake-up 事件 的流程,由觸發訊號產生開始,經  WKEDGn  會先確認中斷是否符合要求(可以設定要求為 Falling Edge/ Rasing Edge/ Any Edge),當符合要求就把 WKPNDn 的相對位元設為 1 ,表示有 wake up 事件產生,再經由  WKENn  確認wake up 事件是否為 Enable ,確認為 enable 後,把事件傳送到  Power Management Control Unit [PMC] 去通知核心處理器離開  Idle mode。同時,也把 事件傳送 給  ICU 在 EC 回到 Active 時,處理中斷任務 。 MIWU Register Edge Detection Register (WKEDG) 這個 register 設為 0 時,觸發方式為 Low to High ,設為 1 時,觸發方式為 High – to – Low 。 WKEDGE1 bit 0 ~ bit 7 控制 WUI 10 ~ WUI 17 。 WKEDGE2 bit 1 ~ bit 7 控制 WUI 20 ~ WUI 27 。 WKEDGE3 bit 2 ~ bit 7 控制 WUI 30 ~ WUI 37 。 WKEDGE4 bit 3 ~ bit 7 控制 WUI 40 ~ WUI 47 。 Pending Register(WKPND) 這個 register 控制是否鎖住發生選擇觸發的狀態與輸入信訊。設為 1 時,參考輸入的觸

EC - ICU

圖片
ICU ( Interrupt Control Unit) 本章節在於說明  EC  本身的  Interrupt ,只有在   Active  的狀態才有  Interrupt  的功能,本章節的內容會介紹  Interrupt  的優先權、來源、觸發的方式。本章所舉的例子為當  EC Active  mode  後,PS2 鍵盤按下任何一個鍵,經由 PS2模組產生 中斷訊號 ,EC 會設定 中斷的  Pending Flag 然後進入中斷服務程式 ,若還有非需立即要完成的事件,就需設定 Service Flag 後 ,然後清除 Pending Flag 回到主程式, 主程式發現在Sericee Flag 就先完成非立即完成事件,再處理其他 Task 。   由  ICU 管理 所有的中斷方式,每一個中斷訊號都有不同的權限,編號愈高的中斷權限愈高,依照不同的中斷  source  可知道  INTn  是外部還是內部或是由  MULIT-INPUT WAKE-UP  的功能 I/O。在 中斷發生時 ,相對映的 Pending Flag 就會被設為 1 ,若中斷是Enable的,Processor 就會產生中斷,並執行中斷服務程式。在中斷服務程式完成需清除  Pending Flag 。 ICU 有  31  個  INT ,其來源大致分為內部及外部中斷,內部中斷為  EC 模組中斷如 MFT 、 SMBus….. 等,而 Power Button 是GPIO為外部中斷的方式。 Non-Maskable Interrupt(NMI) - 全部為  edge-triggered NMI ,一般為晶片在執行時發生的硬體問題會造成核心處理器停止運作,需要 Reset 。 ex: External Power Fail(PFAIL) interrupt source 。 Maskable Interrupt - 31 個  high-level  和  edge-triggered 中斷來源,可 enable / disable 每一個中斷來源。 Maskable Interrupts ICU 可以接收 31 個 Level 或 edge-triggered 中斷需求和當有需要時產生中斷 CR16x 。優先權由高到低則是 INT31~INT1 。 ICU Register

EC :UART

圖片
UART Module UART (Universal Asynchronous Receiver-Transmitter)  主要是利用 RS232 的串列傳輸,經由 Tx/Rx 把資料傳送給 Remote System 或接收從 Remote System 傳送的資料。所以設定和系統相的的傳輸封包為格式為 EC 的主要工作。 一般 UART 的應用是在工廠模式,經由 Remote System 的指令來查詢系統是否出問題或做出廠前的檢測,或者是出廠後出問題,回廠維修時,把系統的狀態傳給維修人員,讓機器在出問題時,可以在最短的時間找出問題,並把它修好。   UART 的方塊圖 Baud Rate Generator – 設定 UART 的傳輸的封包格式 Transmitter – 傳送到 Remote System 的緩衝區 Receiver – 接收 Remote System 的緩衝區 UART Transmitter  緩衝器 Transmit Data Buffer (UTBUF) - Hold the data byte to be tramitteed. UART Receiver 緩衝器 Receive Data Buffer (URBUF) - Holds the received data byte.  Baud Rate Generator – 設定 RS-232 的封包格式 UFRS PEN B[6]  – 是否設定同位元。 0 – Disable ; 1- Enable 。 PSEL B[5:4]   – 設定同位元。 0x00 – 奇同位 ; 0x01 – 偶同位。 STP B[2]   – 停止位元的數目。 0 – 1 個停止位元 ; 1 – 2 個停止位 元。 CHAR B[1:0]   – 資料位元的數目。 0x00 – 8 個位元資料 ; 0x01 – 7 個位元資料; 0x10 – 9 個位元資料。 URAUD/UPSR B aud rate = Core Clock / ( 16 * UDIV * UPSC ) UDIV (Baud Rate Divisor) UPSC (Baud Rate Prescaler) UPSC 對應的除頻值如下表: 建議的 Baud Rate 的設定數值 Core Cloc

EC : PWM Module

圖片
PWM Module PWM (Pulse Width Modulator)  是利用不同的脈波寬度來控制相關裝置做出不同的變化,( ex: 電腦螢幕的亮度調整)。因為 PWM 的製作成本遠低於數位轉類比的線路,市場上有愈來愈多使用 PWM 的裝置,如何控制這些裝置將會在這 章節裡說明清楚。 PWM Module 的方塊圖 PWM Module 的方塊圖可分為幾個部分: 計數用的輸入時脈訊號 – PWM 是做用 Core Clock ( 核心處理器的工作頻率) 除頻器 – PWM 採用 16 位元的除頻器,除頻範圍為 1-32768 ,除頻後的脈波傳送給週期計數器做為計數用。 週期計數器 – 把基本脈波除頻來取得脈波寬度。當下數到 0x0000 後,經 RS 正反器的 SET ,輸出轉為 HIGH 。 脈波寬度計數器 – 把脈波寬度的值和週期計數器的值比較,當兩個值相同時,經 RS 正反器的 RESET ,輸出轉為 LOW 。 輸出選擇器 – 選擇由 Q 或 Q# 為輸出訊號。 簡化後的流程圖: PWM 的相關暫存器有: Clock Prescaler Register – 設定除頻器的除頻值 Cycle Time Register – 設定 PWM 週期時間 PWM的頻率為  Core Clock / (( PRSCn +1 )*(CTRn+1)) Duty Cycle Register – 設定 PWM 的脈波寬波 PWM Control Register – PWM 的控制暫存器 PWR[7] – 指示 PWM Module 的工作模式。 0 表示在 Low Power ; 1 表示在 Normal Power 。 INVP[1:0] – 0 表示選擇 Q 為輸出端, 1 表示由 Q# 為輸出端。 範例 : 使用 PWM 去調整亮度 依據 inventor 的規格,亮度調整 PWM 的 Burst 工作頻率為 250Hz ,相關暫存器如下表設定,即可輸出 250Hz 來調整系統亮度。 Core Clock = 20M Hz PWM REG VALUE PRSC 799 CTR 99 PWMCTRLn

EC : MFT16 Module

圖片
 MFT16 Module MFT16 [Multi-Function 16-BIT Timer] Module 是 EC Chip 提供的計數器 / 計時器, EC 透過這些計數器 / 計時器組合提供多種工作模式給 Firmware 應用。 MFT16 的主要結構方塊圖: MFT16 的結構主要可以分為二大部分,第一部分是 Clock Source Unit 主要是選擇計時 / 計數用的基本脈波及對基本脈波除頻來取得各種工作模式所需要的不同的計時 / 計數的脈波;第二部分由計時 / 計數 / 比較器 / 中斷組合成五種工作模式來供使用者做各種類的應用。 MFT16 Clock Source Unit 的結構方塊圖 :   MFT16 計數 / 計時的脈波來源可分為四類: EC CHIP 的工作頻率 [Core Clock] EC CHIP 外加的固定 32KHz[LFCLK] 外部輸入的頻率,由 TBn 腳輸入 EC CHIP 的工作脈波經過除頻器再和 TBn 輸入的外加脈波混合而成的脈波。 下圖為兩脈波混合的動作及結果。 Clock Unit Control Register [TnCKC] 用來選擇使用那個輸入脈波來源當做計時 / 計數的基本脈波。 Clock Source Unit 還包含了一個 5 個位元的除頻器,除頻數值為 0-31 ,除頻器的數值存在 TnPRSC 。 計時 / 計數 / 比較 / 中斷組合而成的五個工作模式: Timer 1 做為 PWM 的由 TAn 輸出, Timer 2 做為系統計時器, TBn 為外 部輸入脈波。 TAn 和 TBn 配合 Timer 1 用來偵測輸入脈波寬度, Timer 2 做為系統計時器。 TAn 配合 Timer 1 用來偵測輸入脈波寬度, Timer 2 做為系統計時器, TBn 為外部輸入脈波。 TAn 配合 Timer 1 做為系統計時器且可由 TAn 輸出, TBn 配合 Timer 2 用來偵測輸入脈波寬度。 TAn 配合 Timer 1 用來偵測輸入脈波寬度, TBn 配合 Timer 2 用來偵測輸入脈波寬度。 工作模式一: PWM and Counter Timer 1 做為計數的基頻,依據 TnCRA/TnCRB 的值來產生 PWM 的輸出 Timer 2 做為系統計時器 TBn 做為