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 

LPC2138 & FIQ

 
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
Vidi
Neznanec
Neznanec



Pridružen-a: Pon 01 Okt 2007 10:02
Prispevkov: 5
Aktiv.: 0.02
Kraj: Ljubljana

PrispevekObjavljeno: Pon Feb 04, 2008 11:53 am    Naslov sporočila:  LPC2138 & FIQ Odgovori s citatom

Pozdravljeni,

v svoji aplikacije bi rad uporabil FIQ intrrupt in mi ni jasno kako definiram interrupt vector? Namrec v Startup.s je definiran vector "LDR PC, FIQ_Addr", ki pa skoci v neskoncno zanko "FIQ_Handler B FIQ_Handler". Rad bi spremenil, da skoci v poljubno funkcijo, ki je napisana v c-ju.

Hvala in Lp,
Miha
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Vidi
Neznanec
Neznanec



Pridružen-a: Pon 01 Okt 2007 10:02
Prispevkov: 5
Aktiv.: 0.02
Kraj: Ljubljana

PrispevekObjavljeno: Pon Feb 04, 2008 3:25 pm    Naslov sporočila:  Reseno... Odgovori s citatom

Zadev1 sem prisel do "enega" konca:

Startup.c

........

; Exception Vectors
; Mapped to Address 0.
; Absolute addressing mode must be used.
; Dummy Handlers are implemented as infinite loops which can be modified.


Vectors LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
NOP ; Reserved Vector
; LDR PC, IRQ_Addr
LDR PC, [PC, #-0x0FF0] ; Vector from VicVectAddr
LDR PC, =FIQhandler

Reset_Addr DCD Reset_Handler
Undef_Addr DCD Undef_Handler
SWI_Addr DCD SWI_Handler
PAbt_Addr DCD PAbt_Handler
DAbt_Addr DCD DAbt_Handler
DCD 0 ; Reserved Address
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler

Undef_Handler B Undef_Handler
SWI_Handler B SWI_Handler
PAbt_Handler B PAbt_Handler
DAbt_Handler B DAbt_Handler
IRQ_Handler B IRQ_Handler
FIQ_Handler B FIQ_Handler

........

;---------------------------------------------
; FIQ Interrupt routin
;---------------------------------------------
AREA FIQH, CODE
CODE32
;----------------------------------------------
extern FIQ_Interrupt ;Link na funkcijo, ki je napisana v "C"
FIQhandler

B FIQ_Interrupt ;Branch do funkcije
SUBS PC, R14, #0x04


END


V C-ju sem napisal klasicno funkcijo. Na koncu FIQ_Interrupt rutine ni potrebno uporabiti "VICVectAddr = 0x00000000; /* Dummy write to signal end of interrupt */"!

void FIQ_Interrupt(void) __irq;


void FIQ_Interrupt(void) __irq
{

...........

}

Ce ima pa kdo kaksno "lazjo" oz. hitrejso resitev pa lepo prosim...

Lp,
Miha
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Benjamin
Član
Član



Pridružen-a: Tor 10 Jul 2007 11:23
Prispevkov: 116
Aktiv.: 0.53
Kraj: Trebnje, Ljubljana

PrispevekObjavljeno: Pon Feb 04, 2008 3:53 pm    Naslov sporočila:   Odgovori s citatom

Živjo!

Jaz imam malenkost drugače urejeno.

V startup.s imam tole:

Koda:
_boot:
  b _start              /* reset */
  ldr pc, =_und         /* undefined instruction */
  ldr pc, =_swi         /* software interrupt */
  ldr pc, =_p_abt       /* prefetch abort */
  ldr pc, =_d_abt       /* data abort */
  nop                   /* bootloader checksum */
  ldr pc, =_irq
//  ldr pc, [pc, #-0x0FF0] /* IRQ - read the VIC */
  ldr pc, = _fiq          /* FIQ */

_und:   B   _und
_swi:   B   _swi
_p_abt: B   _p_abt
_d_abt: B   _d_abt
_irq:   B   _irq


V nekem header fajlu pa samo še deklaracijo:

Koda:
void _fiq(void) __attribute__((interrupt("FIQ")));


Uporabljam pa GCC prevajalnik. Če se ne motim, ima Keilov prevajalnik malenkost drugačen tisti del pri deklaraciji _fiq (__attribute__((interrupt("FIQ"))); )

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Vidi
Neznanec
Neznanec



Pridružen-a: Pon 01 Okt 2007 10:02
Prispevkov: 5
Aktiv.: 0.02
Kraj: Ljubljana

PrispevekObjavljeno: Pon Feb 04, 2008 4:30 pm    Naslov sporočila:   Odgovori s citatom

Cau,

pozabil sem omeniti, da uporabljam RealView prevajalnik!

Tudi tvoj primer deluje.. se bolje tako, da hvala!!

Lp,
Miha
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.31

PrispevekObjavljeno: Pon Feb 04, 2008 5:11 pm    Naslov sporočila:   Odgovori s citatom

Še en namig: FIQ rutino lahko v celoti implementiraš kar tam, kjer imaš sedaj skok.
Nazaj na vrh
Skrit 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 Feb 04, 2008 6:13 pm    Naslov sporočila:   Odgovori s citatom

V primeru, da ni preveč dolga seveda!

Sicer pa je odličen namig, ki ga tutoriali in druga dokumentacija navadno spušča Evil or Very Mad
Nazaj na vrh
Skrit 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: 6 dni


Powered by phpBB © 2001, 2005 phpBB Group