Cortex M0 Vektör Tablosu ve ilk Hareket

Başlatan Erol YILMAZ, 07 Ağustos 2013, 13:37:18

Erol YILMAZ

Cortex M0 işlemcimiz olduğunu varsayalım.

The vector table is fixed at address 0x00000000.

Vector tablosu için adresi değiştiremiyoruz. Cortex M0 kısıtı... M3 te değiştirebiliyoruz.


"Vektör tablosu komut değil ADRES içerir" deniyor.

Vektör tablosuna göre, Reset Vektörü 0x00000004 adresinde bulunuyor.
Yani Program Counter (PC) ilk değerini buradan alacak.
ilk birkaç clock darbesi ile direkt oradaki adrese zıplayacak.

Açıklama<ilk birkaç clock darbesi>
Burası donanımsal olarak aktarılıyormuş,
sanıyorum ki, reset ten ilk kurtulduğunda belki hiç clock görmeden belki de 1  clock darbesi ile bu değerler aktarılacak.

https://www.picproje.org/index.php/topic,35721.0.html  Z demiş ki,

Alıntı Yapİşlemcinin SP (Stack pointer) registerine 0x0000.0000 .... 0x0000.0003 adreslerinde saklanan 32 bitlik veri donanımsal olarak yüklenir.
İşlemcinin PC (Program Counter) registerine donanımsal olarak 0x0000.0004..0x0000.0007 adreslerinde saklanan 32 bitlik adres yüklenir ve bu adrese sıçranır.

Derlediğim bir örnekten aldığım  çıktı da

0x00000000 0220      DCW      0x0220
0x00000002 1000      DCW      0x1000
0x00000004 00D5      DCW      0x00D5
0x00000006 0000      DCW      0x0000
0x00000008 00DD      DCW      0x00DD
0x0000000A 0000      DCW      0x0000


0x00000004 adresinde yan, Reset vektöründe 00D5 ve 0000 verisi yazılmış.

Anladığım şey Mcu direkt 0x000000D5 adresine zıplayacak.

Doğru mu değerlendiriyorum ?


Keil simulatörü Step modta bile makro adımlarla ilerliyor.
Şöyle daha bir mikro adımlarla giden bir simulatör olsa ne iyi olurdu...


Güncelleme::
Bu arada sanırım soruya cevap buldum...

The Definitive Guide to the ARM Cortex-M0 sayfa 48 de.
https://www.picproje.org/index.php/topic,48209.msg359500/topicseen.html#msg359500

"When the processor exits from reset, it will first read the first two-word addresses in the vector
table. The first word is the initial MSP value, and the second word is the reset vector."


Ayrıca işlenecek kodun Thumb olduğunu anlatmak için +1 ile işaret ediliyormuş.

"For example, if we have boot code starting from address 0x000000C0, we need to put this
address value in the reset vector location with the LSB set to 1 to indicate that it is Thumb code.
Therefore, the value in address 0x00000004 is set to 0x000000C1"


O halde benim kod 0x64 adresine, Thumb olarak yorumlanacağı bilgisi ile dallanacak.
Cortex M0 da sadece Thumb komut seti old. için gayet normal.

Şimdi farkettiğim birşey...
Keil Simulatör de programıma Reset çektiğimde direkt 0x65 adresine değil,  0x64 adresine dallanıyor, yani doğru düşünmüş sayılırız...


Ayrıca LPC11Cxx serisi Cortex M0 lar MULS (yani 32x32) komutunu tek cycle da işletiyor.
ARM'a göre MULS komutu 2 şekilde yapılabilir... ya 1 cycle, yada 32 cycle !
1 cycle olan daha fazla yarıiletken alanı işgal ettiği için tercih edilmeyebilirmiş.
Neyse ki LPC hızlı olanı tercih etmiş.

ErsinErce

keil de assembler penceresini aktif ederseniz(içine tıklamak yeterli) asm komutlarını tek tek debug edebilirsiniz hocam

Erol YILMAZ

Başka bir örnekten yine vektör tablosuna ait kısmı aldım...

                                                            __Vectors
                               DCD              __initial_sp ; Top of Stack
   60 00000004 00000000        DCD              Reset_Handler ; Reset Handler
   61 00000008 00000000        DCD              NMI_Handler ; NMI Handler
   62 0000000C 00000000        DCD              HardFault_Handler ; Hard Fault


0x00000004  adresine  Reset Handler atanmış,
0x00000008  adresine  NMI Handler atanmış,

Reset Handler olarak tanımladığımız fonksiyon adresi derleme aşamasında ( veya x zamanda ) belli olup,
oraya atıyor sanıyorum...


Bu arada önceki örnekte atama komutu DCW idi, şimdi DCD, neden ?

DCB is used for bytes or strings. 
DCD is used for words (4 bytes); the value may be relocatable. 
DCQ is used for 8-byte blocks. 
DCW is used for halfwords (2 bytes).

z

32 bitlik veriyi ister DCD ile tek hamlede, ister DCW ile 16 bitlik iki hamlede tanimla farkeden bir sey olmaz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com