第二章 MCU控制單元
2.3 記憶體與周邊資源管理
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的設定如下。
PWMPER0 = Clock SA / PWM_Freq = 4MHz / 20KHz = 200。
PWMDTY0 = 0 ~ 200 (0% ~ 100%),解析度為1/200。
2.3.4.14 MSCAN時脈規劃
MC9S12DG128內建兩組CAN,以下規劃MSCAN的時脈,保留CAN模組的使 用彈性。本文選擇振盪器頻率為CAN的Source Clock,以避免頻率跳動(Jitter Consideration)【7】。以下參考【18】規劃CAN的除頻值、Bit Time與各區段(Segment) 的Time Quanta。假設系統規格如下,
系統規格: Bit rate = 250 kbps Bus length = 20 m
Bus propagation = 5*10^-9 sm-1 ;
Physical interface delay(Tx + Rx) = 150 ns at 85oC.
MCU Oscillator frequency = 4 MHz 則
Prescaler = 4
Nominal Bit Time (Time quanta) = 8 SYN_SEG = 1
PROP_SEG = 1 PHASE_SEG1 = 3 PHASE_SEG2 = 3 RJW = 3
Oscillator tolerance = 1.485%