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 

Spurious interrupts

 
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
commander29
Član
Član



Pridružen-a: Pon 20 Nov 2006 15:24
Prispevkov: 47
Aktiv.: 0.21

PrispevekObjavljeno: Pon Okt 29, 2007 11:13 am    Naslov sporočila:  Spurious interrupts Odgovori s citatom

Pozdravljeni

Pri enem od projektov sem naletel na neprijeten problem.

Spurious interrupts:

Vem zakaj se pojavljajo (WDT, UART,.....komunikacija do ARM7 core, pipelining, sprememba VIC registra,...)

Vem kako jih po administriraš in našel sem tudi ASM kodo kako se jih izogneš.


Tu nastane težava ki je ne znam rešitu.

Koda:
#define IDISABLE                      /* Nested Interrupts Exit */   \
  __asm { LDMFD   SP!, {LR}     }     /* Restore LR              */  \
  __asm { MSR     CPSR_c, #0x92 }     /* Disable IRQ (IRQ Mode)  */  \
  __asm { LDMFD   SP!, {LR}     }     /* Restore SPSR_irq to LR  */  \
  __asm { MSR     SPSR_cxsf, LR }     /* Copy LR to SPSR_irq     */  \


V User Mode načinu delovanja ARM procesorja CPSR registra ni mogoče spreminjati ampak mora biti ARM procesor v "privilegiran način" delovanja.

Tukaj se zatakne, zato bi rabil malo pomoči.

Hvala.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
BluPhenix
Član
Član



Pridružen-a: Pet 05 Mar 2004 12:54
Prispevkov: 1018
Aktiv.: 4.29
Kraj: Sežana

PrispevekObjavljeno: Pon Okt 29, 2007 7:37 pm    Naslov sporočila:   Odgovori s citatom

Laufaj zadevo v system mode in je zadeva rešena.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
commander29
Član
Član



Pridružen-a: Pon 20 Nov 2006 15:24
Prispevkov: 47
Aktiv.: 0.21

PrispevekObjavljeno: Tor Okt 30, 2007 7:55 am    Naslov sporočila:   Odgovori s citatom

BluPhenix je napisal/a:
Laufaj zadevo v system mode in je zadeva rešena.


Kako pa pridem tja.....
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70646.14

PrispevekObjavljeno: Tor Okt 30, 2007 10:07 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.34
Kraj: Lovrenc na P.

PrispevekObjavljeno: Pon Nov 24, 2008 12:35 pm    Naslov sporočila:   Odgovori s citatom

Koda:
//{ Macro for enabling interrupts, moving to System mode and relevant stack operations
#define IENABLE /* Nested Interrupts Entry */     \
__asm { MRS LR, SPSR } /* Copy SPSR_irq to LR */ \
__asm { STMFD SP!, {LR} } /* Save SPSR_irq */ \
__asm { MSR CPSR_c, #0x1F } /* Enable IRQ (Sys Mode) */ \
__asm { STMFD SP!, {LR} } /* Save LR */ \

// Macro for disabling interrupts, switching back to IRQ and relevant stack operations
#define IDISABLE /* Nested Interrupts Exit */ \
__asm { LDMFD SP!, {LR} } /* Restore LR */ \
__asm { MSR CPSR_c, #0x92 } /* Disable IRQ (IRQ Mode) */ \
__asm { LDMFD SP!, {LR} } /* Restore SPSR_irq to LR */ \
__asm { MSR SPSR_cxsf, LR } /* Copy LR to SPSR_irq */ \


Novejša verzija kompajlerja (RVCT v2.0) ne pozna več LR in SP registra.

Koda:
MfRc632uC.c(2722): error:  #20: identifier "LR" is undefined
MfRc632uC.c(2722): error:  #20: identifier "SP" is undefined


Gledal v help, kjer piše:
Citiram:
use the following intrinsics in inline assembly:

__current_pc()
To access the pc register.

__current_sp()
To access the sp register.

__return_address()
To access the lr register.




Tudi to kompajler ne prebavi. Kakšna ideja?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.64
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Pon Nov 24, 2008 1:10 pm    Naslov sporočila:   Odgovori s citatom

Saj lahko registre tudi sam definiraš ...

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Glitch
Član
Član



Pridružen-a: Pet 07 Apr 2006 11:40
Prispevkov: 1477
Aktiv.: 6.30

PrispevekObjavljeno: Pon Nov 24, 2008 1:18 pm    Naslov sporočila:   Odgovori s citatom

Glej, spurious interrupti so znana in dobro dokumentirana zadeva. Na NXP strani imaš application note, kjer je lepo razloženo kaj kako zakaj...
_________________
Answers: $1, Short: $5, Correct: $25, dumb looks are still free.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-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: 7 dni


Powered by phpBB © 2001, 2005 phpBB Group