Monday, 22 October 2007

Cascading Timers

Timer ေတြကို Cascade လုပ္တယ္ဆိုတာကေတာ့ Timer တစ္ခု Overflow (သတ္မွတ္ထားတဲ့ ကိုေရာက္တဲ့အခါ) ေနာက္ Timer ကို On (Enable) လိုက္ျခင္းကို cascade လုပ္တယ္လုိ႔ေျပာတာပါ။ အထူးသျဖင့္ Automation အပိုင္းေတြမွာ သံုးေလ့ရွိပါတယ္။ ဥပမာ - 1s ေရာက္ဖို႔ဆိုရင္ 1000 ms ေပါ့။ အဲဒီေတာ့ Timer1 ကို အႀကိမ္ ၁၀၀၀ looping (while, for) ပတ္ရမည့္ သေဘာပါ။ အဲဒီလို looping ပတ္တဲ့အခါ အခ်ိန္က Accurate မျဖစ္ေတာ့ပါဘူး။ ဘာလုိ႔လဲဆိုေတာ့ looping ရဲ႕ instruction cycle အခ်ိန္ကို ထည့္တြက္လို႔ပါ။ အဲဒီအခါမ်ိဳးမွာ Cascading ဒါမွမဟုတ္ Interrupt ကိုသံုးရပါတယ္။ Timer1 နဲ႔ Timer2 ကို Cascade ခ်ိတ္ထားျခင္းျဖင့္ အႀကိမ္ 1000 ေရာက္ မေရာက္ကို Timer2 နဲ႔စစ္ေဆးပါတယ္။ ေအာက္မွာ Coding ေရးထားပါတယ္။

REG_TM1CNT= TM_ENABLE | TM_FREQ_SYSTEM | TM_IRQ;
REG_TM1D = - 0x4000;
REG_TM2CNT= TM_ENABLE | TM_FREQ_SYSTEM | TM_IRQ | TM_CASCADE;

while(REG_2 != 1000){}
REG_TM1CNT &= ~TM_ENABLE;
REG_TM2CNT &= ~TM_ENABLE;

Timer2 ကိုသံုးတဲ့အခါမွာ Cascade လို႔ေျပာလိုက္တာနဲ႔ သူ႔အေရွ႕က Timer1 ကို Cascade လုပ္ရမယ္လုိ႔ အလိုလိုသိပါတယ္။ Cascade ကို Overflow လို႔လဲ ေရးေလ့ရွိပါတယ္။

No comments:

Post a Comment