 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
bostjang Član

Pridružen-a: Tor 03 Jan 2006 15:29 Prispevkov: 3469 Aktiv.: 14.64 Kraj: Postojna
|
Objavljeno: Pon Jul 24, 2006 9:23 am Naslov sporočila: Prekinitve in uVision |
|
|
Predvidevam, da ima že kdo narejen makro ali rutino za omogočanje oz. onemogočanje prekinitev (postavljanje zastavic v PSR). Prosil bi, če jo lahko podeli z ostalimi. Uporabljam LPC2214 in Keil uVision3. Hvala. |
|
Nazaj na vrh |
|
 |
BorutS Član

Pridružen-a: Pet 09 Jun 2006 16:25 Prispevkov: 107 Aktiv.: 0.46 Kraj: Cerklje na Gorenjskem
|
Objavljeno: Tor Avg 29, 2006 4:52 pm Naslov sporočila: |
|
|
Pdravljen!
Tukaj sta funkciji omogočanje oz. onemogočanje prekinitev! Upam da ti bosta koristili.
Lp
Borut
Koda: |
inline void enable_irq()
{
asm("stmfd sp!, {r0}");
asm("mrs r0, cpsr");
asm("bic r0, r0, #0x80");
asm("msr cpsr_c, r0");
asm("ldmfd sp!, {r0}");
}
// Disable IRQ interrupts
inline void disable_irq()
{
asm("stmfd sp!, {r0}");
asm("mrs r0, cpsr");
asm("orr r1, r1, #0x80");
asm("msr cpsr_c, r0");
asm("ldmfd sp!, {r0}");
} |
|
|
Nazaj na vrh |
|
 |
bostjang Član

Pridružen-a: Tor 03 Jan 2006 15:29 Prispevkov: 3469 Aktiv.: 14.64 Kraj: Postojna
|
Objavljeno: Čet Okt 19, 2006 2:23 pm Naslov sporočila: |
|
|
Hvala za kodo, ampak v uVision ne dela. Tam ima zbirniška koda to sintakso: __asm { instruction ; comment }, torej brez navednic. Kodo sem pretvoril v to sintakso, pa vseeno ne deluje; compiler vrne sintaksne napake. |
|
Nazaj na vrh |
|
 |
BorutS Član

Pridružen-a: Pet 09 Jun 2006 16:25 Prispevkov: 107 Aktiv.: 0.46 Kraj: Cerklje na Gorenjskem
|
Objavljeno: Pet Okt 20, 2006 1:34 pm Naslov sporočila: |
|
|
Moja koda zgoraj je napisana za gnu compiler , ki ga uporabljam skupaj z uVision. Vedno pozabim, da ne uporabljajo vsi gnu compilerja. Kateri kompiler uporabljas?
LP
Borut |
|
Nazaj na vrh |
|
 |
bostjang Član

Pridružen-a: Tor 03 Jan 2006 15:29 Prispevkov: 3469 Aktiv.: 14.64 Kraj: Postojna
|
Objavljeno: Pet Okt 20, 2006 2:05 pm Naslov sporočila: |
|
|
Uporabljam prevajalnik (compiler, linker) vgrajen v Keil uVision3. Problem s prekinitvami pa sem se za zdaj odločil rešiti kar z VIC-om. |
|
Nazaj na vrh |
|
 |
BorutS Član

Pridružen-a: Pet 09 Jun 2006 16:25 Prispevkov: 107 Aktiv.: 0.46 Kraj: Cerklje na Gorenjskem
|
Objavljeno: Pet Okt 20, 2006 7:37 pm Naslov sporočila: |
|
|
Tole sem nasel med Keilovimi primeri. Mislim da bi ti lahko koristilo.
Lp
Borut
Koda: |
;/*****************************************************************************
;* swi_handler.s: SWI handler file for NXP LPC230x 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
;**************************************************************************/ |
Naslednjič označi kodo in klikni zgoraj na "Code", da ostane oblikovanje in je bolj čitljivo. Mare |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 495 dni
Powered by phpBB © 2001, 2005 phpBB Group
|