• 沒有找到結果。

第一章 緒論

1.4 論文內容概述

一開始敘述研究背景動機與目的且說明系統架構,而下幾章分別介紹各系統 中的模組與元件,分別有第二章微控制器整體架構,MC9S12 EVM 做控制的主體 其記憶體管理、周邊資源管理(Peripheral Management),任務排程(Task Scheduler) 與應用程式介面(API)規劃,其控制PWM(調DUTY) 、A/D。第三章LED元件運用 考慮到的因素,COTCO發光元件LED將64 PCS LED 串並聯組成一模組,其配合前 一項研究做最大範圍內電壓電流溫度的驅動。第四章LED驅動設計考慮到的因素 Macroblock公司的MBI1816 固定電流LED 驅動IC,設計組合三個驅動IC固定電流 R=31mA、G=48mA、B=25mA,使三色LED元件混合發白光。第五章顏色與溫度 感測模組特別驗證了光電轉換的準確性與溫度準確性。第六章整合背光模組系統 驗證陣列式LED發各顏色光與光回授的功能,最後是結論與未來的研究方向。

第 二 章

MCU控制單元

2.1 軟體發展環境規劃

2.1.1 軟體發展工具

本文規劃軟體發展環境如圖 2.1 所示。表 2.1 為軟體工具項目列表。由於各項 功能在發展階段,為縮短軟體發展時程,快速驗證周邊特性是否可實現於 EVM Board 上,與 RTW Embedded Coder。作業系統及通訊程式…等與硬體底層相關程式 仍以手寫 C 語言方式進行。

在 Backlight Unit 尚未釋出前,軟體開發採用內嵌微控制器,MC9S12DG128,的 M68KIT912DG128 Evaluation Board,。MC9S12DG128 在 D-Family 裡算是一顆功能 相當完備之晶片,其內建 128K Bytes Flash 與 8K Bytes RAM,龐大的記憶體很適合 當發展用之微控制器。

P&E Inc.之 USB HCS12 Multi-link 為 Evaluation Board 與 PC 端連接界面,其具 有自動頻率偵測功能,簡化與 Evaluation Board 的連接,亦提供與 MC9S12 相容的 Background Debug Mode,可中斷 CPU 的執行,進行軟體偵錯。透過 Multi-link 可從 PC 端快速下載程式至微控制器,進行 Real Time In-circuit Debugging,並可從中讀取 微控制器記憶體資料,以進行軟體除錯或驗證。

程式編輯器選用頗受好評的IDM UltraEdit。跨平台編譯器與除錯器採用Motorola 3rd Party,Cosmic Inc.,所出品的套裝程式。除錯器有兩個,分別為Cosmic ZAP-ICD12 與Cosmic ZAP-SIM12。ZAP-SIM12可算是Host/PC端的模擬器,可進行軟體計算、偵 錯與驗證,無法進行跨平臺遠端除錯。ZAP-ICD12可與Evaluation Board及USB HCS12 Multi-link搭配,進行跨平臺Real-Time、In-circuit驗證與偵錯,亦內建Flash/EEPROM 的燒錄功能,提供使用者下載程式至EVM Board內。

表 2.1 軟體發展工具表

Name Description

1 Host PC IBM PC, WinXP Prof. , Intel P3/P4, 256 MB 2 Target Board Motorola M68KIT912DG128 with DG128 soldered 3 Editor IDM UltraEdit Ver 10.10

4 Cross Compiler Cosmic HCS12 Cross Compiler 4.5L 5 Debugger Cosmic ZAP-SIM12/ZAP-ICD12 3.72E 6 Flash Programming Cable P&E USB HCS12 Multi-link

7 Digital Oscilloscope YOKOGAWA DL708E 8 Multimeter Pro’sKit 903-150N-B

圖 2.1 軟體發展環境示意

2.1.2 編譯器設定規劃

並非每臺主機都有相同的IDE工具與環境,為求程式專案跨PC之移植性高及管 理方便,編譯器的Make File透過MS-DOS之Bat File實現。此Bat File建議置於專案 之根目錄下,以利程式發展時方便進行編譯動作。圖 2.2為Make File程式流程圖,

以下條列式說明編譯流程。

(1) 先建立一暫存目錄於專案根目錄下,取名為_temp_dir_。

(2) 將Source Files、Header Files、Link Command Files複製至_temp_dir_。

(3) 執行Cosmic之編譯與組譯程式,cx6812.exe,編譯與組譯Source Codes。請 注意, -ab、+nowiden為目前控制程式所必需之編譯參數,欲知其意義請 參照【1】。

(4) 經由Link Command File的記憶體設定,執行鏈結程式,clnk.exe,可產生 Executable File, H12 File。

(5) 承 (4) , 本 文 規 劃 程 式 記 憶 體 配 置 採 用 HCS12 之 分 頁 機 制 (Paged Mechanism),所以鏈結程式之『-bs14』需被設定,一來啟動Bank Switching 機制,二來可說明每頁之大小為2**14 = 16384 bytes。細節請參照【1】。

(6) 執行chex.exe,轉換Executable File的格式成Motorola的S19 Format。

(7) 執行clabs.exe產生Absolutely List Files。

(8) 複製執行此Bat File後所產出的檔案至相對應的目錄,並砍掉_temp_dir_。

圖 2.2 編譯器之Make File 流程

2.2 MC9S12核心與數學函式庫

2.2.1 概述

本章提供可存取或可設定MC9S12核心暫存器的函式庫,以供Blackliht Unit應 用層程式使用。亦提供多個定點數學(Fixed-point operation)與查表(Look-up Table) 函式庫,應付嚴苛的運算需求。為深入微控制器核心底層,與追求快速執行效率,

這些函式庫皆以HCS12指令集,即HCS12組合語言撰寫而成,以下分別敘述之。關 於HCS12核心暫存器與指令集,請參考【2】。

2.2.2 MC9S12核心函式

本文提供了六個設定或存取MC9S12底層核心的函式,其函式名稱如表 2.2所 示。

表 2.2 MC9S12核心函式名稱

名 稱 1 SEI()

2 CLI() 3 NOP() 4 GET_CCR() 5 UPDATE_CCR() 6 KickWatchdog()

2.2.3 定點數學運算函式

表 2.3為本文所提供的6個定點數學函式列表,均為利用組合語言寫成之全域 函數,可供需快速運算的中斷服務程式或前景程式使用。

表 2.3 整數數學函式表

函數原型 1 U8 mul8x8sr7(U8 arg1, U8 arg2)

2 U8 mul8x8x8sr16(U8 arg1,U8 arg2,U8 arg3) 3 U16 mul16x8sr8(U16 arg1, U8 arg2) 4 U16 mul16x8sr7(U16 arg1, U8 arg2) 5 U16 mul16x16sr16(U16 arg1, U16 arg2) 6 U16 d_16x8_by16(U16 arg1,U8 arg2,U16 arg3) 7 U16 lagfilt(U8 q, U8 input, U16 filtered)

2.2.4 查表函式

為了簡化計算,許多控制參數須靠查表而得。為了增進程式的運算效率,本 文提供以MC9S12之『tbl』指令【2】撰寫而成的2D/3D查表函式,其函數原型如表 2.4所示。

表 2.4 查表函式原型表

函數原型

1 U8 LKUP9_2D(U8 *Table_Addr , U8 Input_X) 2 U8 LKUP17_2D(U8 *Table_Addr , U8 Input_X) 3 U8 LKUP33_2D(U8 *Table_Addr , U8 Input_X) 4 U8 VarStepLKUP33_2D(U8 *Table_Addr , U8 Input_X) 5 U16 U16LKUP17_2D(U16 *Table_Addr , U16 Input_X) 6 U8 LKUP5_3D(U8 *Table_Addr ,U8 col_arg ,U8 row_arg) 7 U8 LKUP9_3D(U8 *Table_Addr ,U8 col_arg ,U8 row_arg) 8 U8 LKUP17_3D(U8 *Table_Addr ,U8 col_arg ,U8 row_arg) 9 U8 LKUP33_3D(U8 *Table_Addr ,U8 col_arg ,U16 row_arg)

2.3 記憶體與周邊資源管理

2.3.1 概述

本章敘述MC9S12DG128微控制器的記憶體分配與軟體的記憶體管理原則,陳 述MC9S12時脈規劃與各裝置的初始化設定,並提供A/D與PWM模組驅動程式範 例,以供未來軟體設計之應用。

2.3.2 記憶體分配規劃

MC9S12DG128內建有8K RAM,2K EEPROM,128K Flash ROM。為善用 MC9S12DG128微控制器的Flash記憶體空間,軟體的記憶體配置採用MC9S12所提 供的『分頁機制(Page Mechanism)』原則【4】【5】【6】。

圖2.3與圖2.4為記憶體分配圖(Memory MAP)。圖2.3左邊為微處理器重置(Reset) 後之I/O Registers、RAM與EEPROM記憶體分配圖,而右邊為參考資料【4】所建 議之I/O Registers、RAM與EEPROM記憶體規劃,其中Stack Pointer的起始點為 0x4000。圖2.4為Flash ROM的記憶體分頁示意圖,其中也顯示軟體之記憶體分配 概念。以下敘述其概念原則。

• 通訊程式、常數、調校參數與初始化變數的ROM備份區,配置於位置較低 的固定頁(Lower Unpaged Memory, Page $3E)。

• 開機與初使化設定程式、MC9S12硬體模組設定與控制、函式庫(Standard Cosmic Libraries、Math Routines、Look-up Routines …, etc.)、中斷服務程式(ISRs)、

前 景 程 式 (Foreground Program) 等 , 均 置 於 位 置 較 高 的 固 定 頁 (Upper Unpaged Memory, Page $3F)。

• 其餘程式置於分頁中(Paged Memory)。

請注意,為了避免跨頁函數呼叫(Inter-Page Function Call)引起的錯誤,強烈建 議 所 有 原 始 檔 須 明 確 定 義 函 數 為 區 域 函 數(Local Function)或全域函數(Global

『static』修飾子(Qualifier)。為求程式維護性的簡便,置於分頁中的全域函數均需 加修飾子,『@far』,以通知編譯器特別為此作跨頁呼叫的處理【1】。

程式編譯完成後會產生目的檔(Object Files),接著進行目的檔鏈結程序(Linking Process)。鏈結主要是將各Object Files重新記憶體分配並鏈結成執行檔(Executable File),記憶體分配規劃由鏈結命令檔(Link Command File)設定。根據圖2.3與圖2.4 所建構的Link Command File設定碼。經由此設定,可決定程式之記憶體配置。關 於Link Command File的設定說明,請參考【1】。

圖 2.3 MC9S12DG128之I/O Register、EEPROM與RAM之記憶體分配

圖 2.4 MC9S12DG128之Flash ROM記憶體分配

16K Lower Fixed Paged Memory

(Page $3E)

$38 $39 $3A $3B $3C $3D $3E $3F

16K Paged Memory

16K Higher Fixed Paged Memory

(Page $3F)

MCU Address (Logical Address)

Ext. Address (Physical Address)

$F8000

$FBFFF

PPAGE register (Base+$30)

$FFFF $FFFFF

$FC000

PPAGE Value Physical Address Range

Block 1

$38 $E0000~$E3FFF

$39 $E4000~$E7FFF

$3A $E8000~$EBFFF

$3B $EC000~$EFFFF

Block 0

$3C $F0000~$F3FFF

$3D $F4000~$F7FFF

$3E $F8000~$FBFFF

$3F $FC000~$FFFFF

(1) Constants (2) Calibration data

(3) RS232 or CAN Communication

Background Tasks Section

(1) Interrupt vector table, (2) Start-up program(crts.s), (3) main.c (including VarInit() ) (4) Peripheral H/W module (A/D …) (5) Library (cosmic lib. , math, flash …) (6) ISRs

(7) Foreground 5000 Hz Tasks

Block 1 Block 0

2.3.3 記憶體管理原則

為 簡 化 作 業 系 統 的 設 計 , 本 文 任 意 存 取 記 憶 體 (RAM)管理採用『Simple Method』,亦即不提供任何的記憶體管理機制。不管理也算是一種管理,由應用 程式設計師自行維護記憶體空間與Stack Pointer。本文不建議程式設計師使用Heap Management於Software中,以減少記憶體使用錯誤的風險。根據2.3.2節,本文規劃 Stack Pointer初始點為0x4000,Static RAM Memory之起始點為0x2000,RAM Size 為8K Bytes。

2.3.4 微控制器各內建模組時脈規劃

2.3.4.1 振盪器時脈(Oscillator Clock)

為了避免Controller Area Network(CAN)之來源頻率不穩(Jitter Consideration),

CAN的時脈來源將會選擇由振盪器(Oscillator)提供【7】。CAN之Bit Rate一般為500 kbps或250 kbps,且MC9S12之CAN Baud Rate Prescaler Register(CANBTR0)為1 ~ 64

【7】,所以為了保留未來CAN之應用彈性,振盪器的時脈最好為整數,以方便除 頻。根據參考資料【8】有Motorola Inc.提供之4 MHz振盪器計算PLL所需之電容範 例,且4 MHz符合整數的特性,故本文以下採用4 MHz振盪器規劃微處理器各模組 時脈。

2.3.4.2 系統時脈(System Clock)

為發揮MC9S12高速的運算效率,本文採用相位閉鎖迴路(Phase Locked Loop, PLL) 為 系 統 時 脈 產 生 迴 路。系統時脈亦為控制器核心運算頻率 (Core Clock, fcore),MC9S12最高之System Clock為50MHz【8】,本文選用略低之48MHz,以 方便後續各模組時脈的除頻。系統時脈的暫存器設定公式如圖2.5所示,其中fosc = 4 MHz,則SYNR = 5,REFDV = 0可符合fcore = 48 MHz。

圖 2.5 振盪器頻率、系統時脈與匯流排時脈之關係式

2.3.4.3 匯流排時脈(Bus Clock)

由參考資料【9】可知匯流排頻率(fbus )為系統頻率的一半,所以本文規劃之 微控制器Bus Clock為24 MHz。

2.3.4.4 計時器解析度(Timer Count Resolution)

選擇計時器最大除頻值128【10】,雖然解析度較粗糙,但是更適合較長時間 之量測(Input Capture)或控制(Output Compare)。且Timer的Source Clock選擇微控制 器內部之Bus Clock,所以Timer的解析度為如下所示。

24MHz / 128 = 187.5 KHz => 1TCNT = 5.33 us

2.3.4.5 倒數計時器解析度

根據系統需求,有兩個主要的Time-Based Tasks,其中一個Time Step為200 us,

另一Time Step為10 ms。本文規劃MC9S12之Modulus Down Counter模組為這兩項任 務計時。Modulus Down Counter除頻值選擇16,其Source Clock為Bus Clock【10】,

則Down Counter的解析度如下式。

24MHz / 16 = 1.5 MHz => 0.67 us

Modulus Down Counter Register可設定為300,當其倒數至0時,即會產生中斷 要求,並通知CPU將資源交給該處的中斷服務程式(Interrupt Service Routine, ISR)。

如此一來,亦即每 300 * 0.67 = 200 us 產生一次中斷,可符合200 us Time-Based Task 的執行周期。至於10 ms Time-Based Task的執行周期,可利用軟體計數實現。更詳 細的多工排程機制敘述。

2.3.4.6 序列通訊(SCI)Baud Rate

由【11】可知 SCI Baud Rate = Source Clock / (16 * SCIBR),以下列舉兩種可 能頻率以供選用。

SCIBR = 78 => 19231 bps => error% = (19231 – 19200) / 19200 * 100% = 0.16%

SCIBR = 39 => 38462 bps => error% = (38462 – 38400) / 38400 * 100% = 0.16%

2.3.4.7 序列周邊通訊界面(SPI) Baud Rate

由【12】可知SPI Baud Rate = Source Clock / ((SPPR+1) * 2^(SPR+1)),以下列 舉兩種可能頻率以供選用。

SPIBR = 0x47 => 18750 bps SPIBR = 0x46 => 37500 bps

2.3.4.8 IIC Baud Rate

由【13】可知IIC Baud Rate = Source Clock / IBFD ( Max. = 100 Kbps),以下列 舉兩種可能頻率以供選用。

IBFD = 0x35 => SCL Divider = 1280 => 24MHz / 1280 = 18750 bps IBFD = 0x30 => SCL Divider = 640 => 24MHz / 640 = 37500 bps

2.3.4.9 看門狗周期(COP Watchdog Time-out Period)

Watchdog Timer的Source Clock為振盪器頻率(4 MHz),本文選擇Time-Out Cycles為2^18【9】,則Time-Out Period = 2^18 / (4*10^3(KHz)) = 65.536 ms。

2.3.4.10 類比轉數位模組時脈(ATD Clock)

類比轉數位模組(ATD Module)的Source Clock為Bus Clock,且ATD Clock = Source Clock / (PRS+1),以下為根據參考資料【14】所作之ATD Clock之設計檢查。

• 選擇除頻值7,檢查bus clock是否符合, 8MHz < fbus = 24 MHz < 32 MHz,

Check OK!

• ATD Clock = 24 MHz / (7 + 1) * 0.5 = 1.5 MHz,Check ATD Clock =>

0.5 MHz < 1.5 MHz < 2 MHz,Check OK!

• HCS12 Conversion Time = Min. 14 ATDCLK Cycles = 14 / 1.5 = 9.33 us Max. 28 ATDCLK Cycles = 28 / 1.5 = 16.67 us

2.3.4.11 Flash/EEPROM時脈(For Erase/Program)

Flash與EEPROM的時脈設定皆相同【15】【16】,此時脈用於Flash/EEPROM 的清除與燒寫(Erasing and Reprogramming)。以下根據參考資料【15】,以Flash為 例,說明Flash Clock的設計程序。

• fbus = 24 MHz > 12.8 MHz => PRDCLK = fosc = 4 MHz

• FDIV[5:0] = INT(4*(5+1/24(MHz))) = 20

• FCLK = 4 / (1+20) = 0.19048 MHz > 0.15 MHz, Check OK!

• And (1/FCLK + Tbus) = (1/0.19048 + 1/24) > 5 us, Check OK!

故本文所規劃之Flash Clock,FCLK = 0.19048 MHz。

由於EEPROM Clock與Flash 設計流程相同,故本文之EECLK亦為0.19048 MHz。

2.3.4.12 RAM時脈

RAM Clock為Bus Clock = 24 MHz。

2.3.4.13 脈寬調變時脈(PWM Clock)

MC9S12DG128共有8組8-Bit PWM可供使用,PWM之細部設定資訊請參照

【17】。

假設PWM訊號頻率選用20KHz,選擇PWM0為驅動腳位,Source Clock選用 Clock SA,除頻值可設為1,PWMSCLA選用3,則

Clock SA = (24MHz / 1) / (2 * 3) = 4MHz。

所以PWM暫存器,PWMPER0與PWMDTY0的設定如下。

所以PWM暫存器,PWMPER0與PWMDTY0的設定如下。

相關文件