Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: armsistem - 22 Eylül 2011, 19:09:49

Başlık: keil startup dosyaları
Gönderen: armsistem - 22 Eylül 2011, 19:09:49
Arkadaşlar selam,
1- nxp'nin sitesinden 'code.bundle.lpc23xx.lpc24xx.uvision' samples ları indirdim ,ilk sorum startup.s dosyasından baska  swi_handler.s diye bir dosya daha var bu dosyanın yaptığı iş nedir.
2 - keil-target girdiğimde ram lerle ilgili değerlerin farklı olduğunu gördüm bunları neye göre belirliyoruz.
IROM1:0x0---------0x80000 (TİK VAR)
IRAM1:0x4000000-----0x8000 (SOLDA TİK VAR SAĞDA YOK)
IRAM2:0x7FE0000-----0x3800 (SOLDA TİK YOK SAĞDA VAR)



;/*****************************************************************************
;*   swi_handler.s: SWI handler file for NXP LPC23xx Family Microprocessors
;*
;*   Copyright(C) 2006, NXP Semiconductor
;*   All rights reserved.
;*
;*   History
;*   2006.09.01  ver 1.00    Prelimnary version, first Release
;*
;*****************************************************************************/

PRESERVE8

SWI_IRQ_DIS EQU 0
SWI_IRQ_EN EQU 1
SWI_FIQ_DIS EQU 2
SWI_FIQ_EN EQU 3

I_Bit EQU 0x80
F_Bit EQU 0x40

;The exported labels and functions
EXPORT SoftwareInterrupt   
EXPORT IntEnable
EXPORT IntDisable

CODE32
AREA SWI_HANDLER,CODE,READONLY
ENTRY
   
;********************************************************************
;*  SWI interrupt handler *
;*  Function : SoftwareInterrupt(SWI_Number) *
;* The SWI_Number is 0 through 3 *
;* See below "SwiFunction" table below *
;*  Parameters:    None *
;*  input  :       SWI_Number *
;*  output :       None *
;********************************************************************
SoftwareInterrupt
CMP R0, #4
LDRLO PC, [PC, R0, LSL #2]
MOVS PC, LR

SwiFunction
DCD IRQDisable ;0
DCD IRQEnable ;1
DCD FIQDisable ;2
DCD FIQEnable ;3

IRQDisable
MRS R0, SPSR
ORR R0, R0, #I_Bit
MSR SPSR_c, R0
MOVS PC, LR

IRQEnable
MRS R0, SPSR
BIC R0, R0, #I_Bit
MSR SPSR_c, R0
MOVS PC, LR

FIQDisable
MRS R0, SPSR
ORR R0, R0, #F_Bit
MSR SPSR_c, R0
MOVS PC, LR

FIQEnable
MRS R0, SPSR
BIC R0, R0, #F_Bit
MSR SPSR_c, R0
MOVS PC, LR

;**********************************************************************
;*  Call SWI to enable IRQ                                            *
;*  Function : void IntEnable(void)                                   *
;*  Parameters:      None                                             *
;*  input  :         None                                             *
;*  output :         None                                             *
;**********************************************************************
IntEnable
SWI     SWI_IRQ_EN
BX      lr
; end of IntEnable

;**********************************************************************
;*  Call SWI to disable IRQ                                           *
;*  Function : void IntDisable(void)                                  *
;*  Parameters     : None                                             *
;*  input          : None                                             *
;*  output         : None                                             *
;**********************************************************************
IntDisable
SWI     SWI_IRQ_DIS
BX      lr
; end of IntDisable

END
;/*************************************************************************
;**                            End Of File
;**************************************************************************/
Başlık: Ynt: keil startup dosyaları
Gönderen: z - 22 Eylül 2011, 20:12:30
SWI rurinlerini yöneten yazılım parçacığı (SWI Handler) asm ile yazılmış ve bu dosya içine konmuş.
Verilen örnek C kod satırlarında SoftwareInterrupt(X) fonksiyonu gördüğünde bu asm dosyadaki kodlar işletilecek demektir.
Ayrıca IntEnable ve IntDisable olarak da çağrılabilir kodlar gene burada.

SoftwareInterrupt(X)  fonksiyonuna ait X değerleri ve anlamları;

IRQDisable ; X=0
IRQEnable ; X=1
FIQDisable ; X=2
FIQEnable  ; X=3

Sorunun ikinci bölümüneki  ayarlamaların geçerli olabilmesi için linker de Use memory layout from target dialog kutucuğunun tıklanmış olması lazım.

Buraya yazılacak değerler çipe göre değişir. (Başlangıç adresi sabit fakat uzunluk çipe bağımlı)
Ayrıca donanıma harici ram yada rom bağlanacaksa gene burada tanımlanıyor.