ARM(Advanced RISC Machines) ၏ ေကာက္ေၾကာင္း အပိုင္း (3) - Arduino Myanmar

Breaking

Open Arduino for Myanmar

Wednesday, June 13, 2018

ARM(Advanced RISC Machines) ၏ ေကာက္ေၾကာင္း အပိုင္း (3)

Cortex-M4 Core Registers (part-1)
==================================

ပံုမွာၾကည့္လိုက္ပါ။ R0 ကေနျပီးေတာ့ R12 အထိက 32-bit general-purpose register ေတြျဖစ္ၾကပါ တယ္။ အဲ့ဒီ Register ေတြကို data operation ေတြအတြက္သံုးပါတယ္။

Stack Pointer
+++++++++++
Register နံပါတ္ R13 က Stack Pointer (SP) ျဖစ္ပါတယ္။ Therad Mode မွာ CONTROL register ရဲ႕ bit 1 ကအသံုးျပဳမယ့္ stack pointer ကိုသတ္မွတ္ဖို႕ရန္အတြက္အသံုးျပဳပါတယ္။
• 0 ဆိုရင္ Main Stack Pointer (MSP) ကိုသံုးမယ္လို႕ေျပာလိုက္တာျဖစ္ျပီးေတာ့ reset value
ျဖစ္ပါတယ္။
• 1 ဆိုရင္ Process Stack Pointer(PSP) ကိုသံုးမယ္လို႕ေျပာလိုက္တာျဖစ္ပါတယ္။
Reset ျဖစ္တဲ့အေျခအေနမွာဆိုရင္ Processor ဟာ MSP ရဲ႕တန္ဖိုးကို address 0x 00000000 ကေန ဖတ္ယူပါတယ္။

Link Register
+++++++++++
ေနာက္ Register နံပါတ္ R14 ကေတာ့ Link Register(LR) ျဖစ္ပါတယ္။ function ေတြ return ျပန္လာ တဲ့တန္ဖိုးေတြ ၊ exception ေတြကေန return ျပန္လာတဲ့ တန္ဖိုးေတြ စတဲ့ return ျပန္လာတဲ့ တန္ဖိုးေတြ ကို သိုေလွာင္သိမ္းဆည္း Register ျဖစ္ပါတယ္။ Reset အေျခေနမွာဆိုရင္ Processor ဟာ LR တန္္ဖိုး 0xFFFFFFFF နဲ႕ဖတ္ယူပါတယ္ခင္ဗ်ာ။

Program Counter
++++++++++++++
ေနာက္ Register နံပါတ္ R15 ကေတာ့ Program Counter (PC) ျဖစ္ပါတယ္။ အဲဒီ Register ထဲမွာ လက္ရွိ Program ရဲ႕ address ပါ၀င္ပါတယ္။ Reset အေျခအေနမွာဆိုရင္ address 0x00000004 မွာရွိ ေနတဲ့ Reset Vector ရဲ႕တန္ဖိုး နဲ႕ Processor က PC ကိုဖတ္ယူပါတယ္။ တန္ဖိုးရဲ႕ Bit[0] ကို Reset အေျခအေနမွာ EPSR T-bit ထဲကိုထည့္လိုက္တာျဖစ္ျပီးေတာ့ 1 ျဖစ္ကိုျဖစ္ရပါမယ္။

Program Status Register
++++++++++++++++++++
Program Status Register(PSR) က ေအာက္ေဖာ္ျပပါ Register သံုးခုကိုေပါင္းစပ္ထားတာျဖစ္ပါတယ္။
1) Application Program Status Register (APSR)
2) Interrupt Program Status Register (IPSR)
3) Execution Program Status Register (EPSR)
အဲဒီ register ေတြဟာ 32 bit PSR ထဲမွာပါ၀င္တဲ့ bitfield ေတြျဖစ္ၾကပါတယ္။ သူ႕ရဲ႕ bit assignment ေတြကိုေတာ့ comment ကပံုမွာျပသထားပါတယ္။




အဲဒီ Register သံုးခုကိုတစ္ခုခ်င္းစီလည္း ရယူသံုးစြဲလို႕ရသလို Register ႏွစ္ခု (သို႕မဟုတ္) သံုးခုစလံုးကို ေပါင္းစပ္ျပီးေတာ့လည္း သံုးစြဲလို႕ရပါတယ္။ Register ရဲ႕ နာမည္ေတြကို MSR instruction သို႕မဟုတ္ MRS instruction ေတြမွာ argument အျဖစ္ယူရမွာျဖစ္ပါတယ္။

Application Program  Status Register
+++++++++++++++++++++++++++++
APSR မွာ လက္ရွိ state ရဲ႕ condition flag ေတြပါ၀င္ပါတယ္။

Bits Description

Bit 31 N: Negative or less than flag:
0: Operation ရဲ႕ရလဒ္က အေပါင္းတန္ဖိုးျဖစ္ေနတယ္၊ သုညျဖစ္တယ္၊ greater than သို႕မဟုတ္ညီေနတယ္။
1: Operation ရဲ႕ရလဒ္က အႏုတ္တန္ဖိုးျဖစ္ေနတယ္၊ ဒါမဟုတ္ less than ျဖစ္ျပီး ငယ္ေနမယ္။

Bit 30 Z: Zero flag:
0: Operation ရဲ႕ သုညမဟုတ္ပါ။
1: Operation ရဲ႕ ရလဒ္က သုညျဖစ္ပါတယ္။

Bit 29 C: Carry or borrow flag:
0: ေပါင္းတဲ့ Operation မွာ တစ္ခုနဲ႕တစ္ခုေပါင္းျခင္းက Carry bit မထြက္တဲ့အခါ (သို႕မဟုတ္) ႏုတ္တဲ့ Operation မွာ တစ္ခုကေန ေနာက္တစ္ခုကိုႏႈတ္တဲ့ အခါ ေခ်းလိုက္ရတဲ့ တန္ဖိုးတစ္ခု (borrow bit) ထြက္ေနပါတယ္။
1: ေပါင္းတဲ့ Operation မွာ တစ္ခုနဲ႕တစ္ခုေပါင္းျခင္းက Carry bit ထြက္တဲ့အခါ (သို႕မဟုတ္) ႏုတ္တဲ့ Operation မွာ တစ္ခုကေန ေနာက္တစ္ခုကိုႏႈတ္တဲ့ အခါ ေခ်းလိုက္ရတဲ့ တန္ဖိုးတစ္ခု (borrow bit) ထြက္မေနပါ။

Bit 28 V: Overflow flag:
0: Operation က Overflow မျဖစ္ပါ။
1:Operation က Overflow ျဖစ္ေနပါတယ္။

Bit 27 Q: DSP Overflow and saturation flag: Sticky saturation flag.
0: bit တန္ဖိုးကို reset လုပ္လိုက္တဲ့အခ်ိန္ကစလို႕ saturation မေတြရတဲ့ ျဖစ္စဥ္ ေတြကို သတ္မွတ္တာျဖစ္ပါတယ္။

1: DSP overflow ကိုသတ္မွတ္တာျဖစ္ပါတယ္။
Bits 26:20 Reserved.
Bits 19:16 Greater than or Equal flags
Bits 15:0 Reserved

                                             Thank You!
                                                     ZawMyat

No comments:

Post a Comment