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

Pridružen-a: Pon 01 Okt 2007 10:02 Prispevkov: 5 Aktiv.: 0.02 Kraj: Ljubljana
|
Objavljeno: Pon Feb 04, 2008 11:53 am Naslov sporočila: LPC2138 & FIQ |
|
|
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 |
|
 |
Vidi Neznanec

Pridružen-a: Pon 01 Okt 2007 10:02 Prispevkov: 5 Aktiv.: 0.02 Kraj: Ljubljana
|
Objavljeno: Pon Feb 04, 2008 3:25 pm Naslov sporočila: Reseno... |
|
|
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 |
|
 |
Benjamin Član

Pridružen-a: Tor 10 Jul 2007 11:23 Prispevkov: 116 Aktiv.: 0.53 Kraj: Trebnje, Ljubljana
|
Objavljeno: Pon Feb 04, 2008 3:53 pm Naslov sporočila: |
|
|
Ž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 |
|
 |
Vidi Neznanec

Pridružen-a: Pon 01 Okt 2007 10:02 Prispevkov: 5 Aktiv.: 0.02 Kraj: Ljubljana
|
Objavljeno: Pon Feb 04, 2008 4:30 pm Naslov sporočila: |
|
|
Cau,
pozabil sem omeniti, da uporabljam RealView prevajalnik!
Tudi tvoj primer deluje.. se bolje tako, da hvala!!
Lp,
Miha |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.31
|
Objavljeno: Pon Feb 04, 2008 5:11 pm Naslov sporočila: |
|
|
Še en namig: FIQ rutino lahko v celoti implementiraš kar tam, kjer imaš sedaj skok. |
|
Nazaj na vrh |
|
 |
BluPhenix Član

Pridružen-a: Pet 05 Mar 2004 12:54 Prispevkov: 1018 Aktiv.: 4.29 Kraj: Sežana
|
Objavljeno: Pon Feb 04, 2008 6:13 pm Naslov sporočila: |
|
|
V primeru, da ni preveč dolga seveda!
Sicer pa je odličen namig, ki ga tutoriali in druga dokumentacija navadno spušča  |
|
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: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|