www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Prekinitve in uVision

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
bostjang
Član
Član



Pridružen-a: Tor 03 Jan 2006 15:29
Prispevkov: 3469
Aktiv.: 14.64
Kraj: Postojna

PrispevekObjavljeno: Pon Jul 24, 2006 9:23 am    Naslov sporočila:  Prekinitve in uVision Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
BorutS
Član
Član



Pridružen-a: Pet 09 Jun 2006 16:25
Prispevkov: 107
Aktiv.: 0.46
Kraj: Cerklje na Gorenjskem

PrispevekObjavljeno: Tor Avg 29, 2006 4:52 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bostjang
Član
Član



Pridružen-a: Tor 03 Jan 2006 15:29
Prispevkov: 3469
Aktiv.: 14.64
Kraj: Postojna

PrispevekObjavljeno: Čet Okt 19, 2006 2:23 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
BorutS
Član
Član



Pridružen-a: Pet 09 Jun 2006 16:25
Prispevkov: 107
Aktiv.: 0.46
Kraj: Cerklje na Gorenjskem

PrispevekObjavljeno: Pet Okt 20, 2006 1:34 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bostjang
Član
Član



Pridružen-a: Tor 03 Jan 2006 15:29
Prispevkov: 3469
Aktiv.: 14.64
Kraj: Postojna

PrispevekObjavljeno: Pet Okt 20, 2006 2:05 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
BorutS
Član
Član



Pridružen-a: Pet 09 Jun 2006 16:25
Prispevkov: 107
Aktiv.: 0.46
Kraj: Cerklje na Gorenjskem

PrispevekObjavljeno: Pet Okt 20, 2006 7:37 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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