Cortex M4 Exceptions, state, types, handlers - Arduino Myanmar

Breaking

Open Arduino for Myanmar

Wednesday, June 13, 2018

Cortex M4 Exceptions, state, types, handlers

Cortex M4 Exceptions, state, types, handlers
====================================
Program တစ္ခုကို အလုပ္လုပ္ေနတဲ့အခ်ိန္မွာ မလိုလားအပ္တဲ့ အျဖစ္အပ်က္(error) ေတြကို handle လုပ္ဖို႕အတြက္ Exception ေတြကိုအသံုးျပဳပါတယ္။ Exception ႏွစ္မ်ိဳး ရွိပါတယ္။

(၁) ပထမတစ္မ်ိဳးက System Exception ျဖစ္ျပီးေတာ့

(၂) ဒုတိယတစ္ခုမ်ိဳးကေတာ့ Interrupt Exception ျဖစ္ပါတယ္။


Exception တစ္ခုဟာ software ရဲ႕အလုပ္ေတြကိုေျပာင္းလဲေစႏိုင္ပါတယ္။ Reset ကလြဲလို႕  Processor ဟာ Exception ေတြအားလံုးကို handle ျပဳလုပ္ဖို႕ရန္အတြက္ handler mode ကိုအသံုးျပဳပါတယ္။ Interrupt handling ကို NVIC register ေတြကေနျပီးေတာ့ ထိန္းခ်ဳပ္ပါတယ္။

Exception State စုစုေပါင္း ေလးခုရွိပါတယ္။

(၁) ပထမတစ္ခုက Inactive ျဖစ္ပါတယ္။ ဒီ state မွာဆိုရင္ Exception က active ျဖစ္မေနပါဘူး။ ထို႕အတူ ဆိုင္းငံ့ ေနျခင္းလည္းမရွိပါဘူး။

(၂) ဒုတိယတစ္ခုကေတာ့ Pending ျဖစ္ပါတယ္။ Processor ကေနအလုပ္လုပ္ေပးဖို႕ရန္ exception က ဆိုင္းငံ့ေနပါတယ္။ Peripheral တစ္ခုကေနလာတဲ့ Interrupt Request သို႕မဟုတ္ Software ကေနလာတဲ့ Software ကေနလာတဲ့ လာတဲ့ Interrupt Request တစ္ခုဟာ သူနဲ႕ပတ္သတ္တဲ့ Interrupt ရဲ႕ state ကိုဆိုင္းငံ့ေစႏိုင္ပါတယ္။

(၃) တတိယတစ္ခုကေတာ့ Active ျဖစ္ပါတယ္။ Processor က exception ကို အလုပ္လုပ္ေနဆဲျဖစ္ပါ တယ္။ ဒါေပမယ့္ မျပီးေသးပါဘူး။ Exception handler တစ္ခုဟာ ေနာက္ထပ္ exception handler တစ္ခု အလုပ္လုပ္တာကို interrupt ျဖစ္ေစႏိုင္ပါတယ္။ ဒီလိုအေျခေနမွာဆိုရင္ exception ႏွစ္ခုစလံုးဟာ inactive state မွာရွိပါတယ္။

(၄) စတုတၳတစ္ခုကေတာ့ Active and pending ျဖစ္ပါတယ္။ Exception ကို Processor ကေနအလုပ္လုပ္ေနပါတယ္။ ဒါ့အျပင္ source တူျပီးေတာ့ ေစာင့္ဆိုင္းေနတဲ့ exception တစ္ခုလည္း ရွိေနပါတယ္။

Exception types
++++++++++++++
Exception အမ်ိဳးအစား ဆယ္ခုရွိပါတယ္။
(၁) Reset 
(၂) NMI
(၃) Hard fault
(၄)Memory Management fault
(၅)Bus fault
(၆) Usage fault
(၇) SVCall
(၈) PendSV
(၉) SysTick
(၁၀) Interrupt(IRQ)

ေနာက္ Post မွာ Exception အမ်ိဳးအစားတစ္ခုခ်င္းစီအေၾကာင္းကိုရွင္းျပပါဦးမယ္။

Exception handlers
+++++++++++++++++
Processor ဟာ exception ေတြကို handle လုပ္တဲ့ေနရာမွာ ေအာက္ပါတို႕ကိုအသံုးပါတယ္။

(၁) ပထမတစ္ခုက Interrupt Service Routines (ISRs)                                                          Interrupt ေတြျဖစ္ၾကတဲ့ IRQ0 ကေနျပီးေတာ့ IRQ81 အထိ ဟာ ISRs ကေန handle လုပ္တဲ့ Exception ေတြျဖစ္ၾကပါတယ္။

(၂) ဒုတိယတစ္ခုကေတာ့ Fault handler ေတြျဖစ္ပါတယ္။     Hard fault, memory management fault, usage fault, bus fault တို႕ဟာ fault handler ေတြကေန handle လုပ္တဲ့ handler exception ေတြျဖစ္ၾကပါတယ္။

(၃) တတိယတစ္ခုကေတာ့ System handler ေတြျဖစ္ၾကပါတယ္။
NMI, PendSV, SVCall , SysTick နဲ႕ fault exception ေတြအားလံုးဟာ system handler ေတြကေန handle လုပ္တဲ့ system exception ေတြျဖစ္ၾကပါတယ္။

Thank you!
Zaw Myat

No comments:

Post a Comment