problém s programovaním v VIC LPC2378 radič.

M

mohanag

Guest
Nazdar,

Som Napísal ac kódu pre mikrokontroléry LPC2378, inorder nastaviť časovač a generujú prerušenia, ak dôjde k pretečeniu časovača a prerušenia sú mapovaná na VIC timer0 vektore adresu 4.Problém je pri monitorovaní časovač a vektorové Registry hodnôt ............. okraja sa deje jemne, že prerušenie je generované a oznámené na VIC zmenou VIC vektor adresu počítača, kde je prevziať kontrolu, ale na PC nie je zmenený na danom mieste vykonať čiastkový.Prosím, pomôžte mi.

Nájdete môj priložený kód.

#
Include <stdio.h>
#
Include <LPC23xx.H> / * LPC23xx definície * /
__irq void T0_IRQHandler (void);
int main (void)
(
/ * Povoli a nastaviť časovač preruší, spustite časovač * /
T0MR0 = 10;
T0MCR = 3; / * Přeruąovací a Reset na MR0 * /
T0TCR = 1; / * Timer0 Povoli * /
T0PR = 10; / * Timer0 Povoli * /
VICVectAddr4 = (unsigned long) T0_IRQHandler; / * Nastaviť prerušovacie vektor * /
VICVectCntl4 = 15; / * použitie pre Timer0 Přeruąovací prioritou je 5 * /
VICIntEnable = (1 <<4); / * Povoli Timer0 Přeruąovací * /
)

/ * Funkcia Import pre sústruženie LED alebo vypnutie * /
/ * Timer0 IRQ: vykonávajú pravidelne * /

__irq void T0_IRQHandler (void)
(
statické int clk_cntr;
clk_cntr ;
if (clk_cntr> = 1000)
(
clk_cntr = 0; / * Aktivácia vlajkou každých 1 sekundy * /
)
T0IR = 1; / * Clear prerušenia flag * /
VICVectAddr = 0; / * Potvrdzovacie Přeruąovací * /
)
Thanks in advance.<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Plač alebo veľmi smutný" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Plač alebo veľmi smutný" border="0" />
 
Ahoj,

Nemáte žiadne slučky v main () a vyjede pred prerušeniu došlo.Skúste pridať:

while (1) ();

ako posledný riadok v hlavnom ihneď po VICIntEnable = (1 <<4);.

Dúfam, že to pomôže.

J

 
Nazdar,<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Plač alebo veľmi smutný" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Plač alebo veľmi smutný" border="0" /><img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Plač alebo veľmi smutný" border="0" />Mám zahrnuté while (1) () na konci mojej číslo, ale stále to nebolo skočil do ISR.

Thanks in advance

 
nazdar

Ja som tiež v súčasnosti pracuje na rovnakom micro.

I cant pozri prerušenia handler v kóde.

Keď časovač generuje a prerušiť vaše mikroúdajov musia uchovávať všetky existujúce registre a PC do zásobníka a potom prerušenie prevádzky budú ISR.Na konci tejto ISR musíte retrive všetkých týchto registrov uložená a PC.

Else ste mikroúdajov zvyknutý vedieť kam ísť po ISR.

Kód:/************************************************* *****************************

*

* MACRO Meno: ISR_ENTRY ()

*

* Popis:

* Táto MACRO sa používa pri vstupe do ISR. Súčasná verzia

* GCC prekladač pre ARM nevyrába správny kód

* Rutiny prerušenia pracovať správne s Thumb kód. MACRO

* Vykonáva nasledovné kroky:

*

* 1 - Nastavte adresu, na ktoré by mal obnoviť po vykonaní servisu

* ISR kompenzovať prerušenie vstupných

* 2 - Uložiť non-banked registrov R0-R12 a LR na IRQ zásobníka.

* 3 - Získať postavenie prerušovať program je v SPSR.

* 4 - Push je na IRQ zásobník rovnako.

*

************************************************** ***************************/

# Define ISR_ENTRY () prchavé asm ( "sub LR, LR, # 4 \ n" \

"Stmfd sp!, (R0-R12, LR) \ n" \

"Pani r1, spsr \ n" \

"Stmfd sp!, (R1)")/************************************************* *****************************

*

* MACRO Meno: ISR_EXIT ()

*

* Popis:

* To je MACRO použiť na výstupe jedno ISR. Súčasná verzia z gcc

* Prekladač pre ARM nevyrába správny kód pre prerušenie

* Rutina fungovať správne s Thumb kód. MACRO vykonáva

* Tieto kroky:

*

* 1 - Recover SPSR hodnotu z komína

* 2 - a obnoviť svoju hodnotu

* 3 - Pop spiatočná adresa & uložených všeobecné z registrov

* Zásobník na IRQ & návrate

*

************************************************** ***************************/

# Define ISR_EXIT () prchavé asm ( "ldmfd sp!, (R1) \ n" \

"MSR spsr_c, r1 \ n" \

"Ldmfd sp!, (R0-R12, ks ^)")/************************************************* *****************************

 
Nazdar,

Mám začleniť tento kus kódu v mojom programe, ale stále to nebolo pre mňa pracoval.
#
Include <stdio.h>
#
Include <LPC23xx.H>
#
Define ISR_ENTRY () prchavé asm ( "sub LR, LR, # 4 \ n" \
"Stmfd sp!, (R0-R12, LR) \ n" \
"Pani r1, spsr \ n" \
"Stmfd sp!, (R1)")
#
Define ISR_EXIT () prchavé asm ( "ldmfd sp!, (R1) \ n" \
"MSR spsr_c, r1 \ n" \
"Ldmfd sp!, (R0-R12, ks ^)")

__irq void T0_IRQHandler (void);
int main (void)
(
VICVectAddr4 = (unsigned long) T0_IRQHandler;
VICVectCntl4 = 5;
VICIntEnable = (1 <<4);
T0MR0 = 10;
T0MCR = 3;
T0TCR = 1;
T0PR = 10000000;
while (1)
(
)
)
__irq void T0_IRQHandler (void)
(
statické int clk_cntr;
clk_cntr ;
if (clk_cntr> = 1000)
(
clk_cntr = 0;
)
T0IR = 1;
VICVectAddr = 0;
VICIntEnClr = 1;
návrate;
)

Mohli by ste mi povedať, kde som potreba dať toto makro a ako to makro sa bude nazývať, kedykoľvek dôjde k prerušeniu.Všimnite si prosím, som nemala žiadne zápalné kód na palube, bol som len napodobňuje kód v Keil uVision IDE.V nižšie uvedené číslo je vektor tabuľka, ktorá je tam podľa môjho spustenie kódu.Prosím, povedzte mi, je tam všetko, čo potrebujem k zmene vo svojom spustenie kódu.

Vektory LDR PC, Reset_Addr
LDR PC, Undef_Addr
LDR PC, SWI_Addr
LDR PC, PAbt_Addr
LDR PC, DAbt_Addr
NOP; vyhradené Vektorové; Vector from VicVectAddr

LDR PC, [PC, #-0x0120];
Vektorové z VicVectAddr
LDR PC, FIQ_Addr

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; vyhradené Adresa
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

Vďaka.

 
I dont vedieť nič o Keil uVision IDE

Já používam GNU nástroj reťazca.

sú u pomocou dosky alebo dohotovenie dosky.

Tieto makrá sú skutočne vnútri ISR

void timer_isr (void)
(
ISR_ENTRY ();
...
...
ISR váš kód ...
...
...
ISR_EXIT ();
)Ak používate ide ide váš môže byť s podobným typom makro alebo podobné usporiadania.Tieto makrá uložiť súčasný stav registra a PC a potom nahrať PC s ISR pridať ktorý je v VIC a naopak ..

sa pozrieť na nasledujúci odkaz

http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/

 

Welcome to EDABoard.com

Sponsor

Back
Top