Objasnite mi ARM prekid kod

H

hbaocr

Guest
halo, sve prijatelj
Plz, objasniti ovaj kod ispod, ne znam kako to funkcionira.Ako je više od dva fiq zahtjev, kako mogu to raditi, i kako mogu prepoznati CPU jezgre koja prekida izvor reagira.
pogled na moj broj u redu oslikani crvenom bojom,
možete me proglasiti više od dva retka kao što je ovaj
ex:

void FIQ_Handler (void) __fiq;void ADC_handler (void) __fiq;

I ako ja mogu to učiniti, kako se može prepoznati koji CPU fiq prekida rutinu odgovoriti za koji ometaju kada se izvor je odgovorio daŠifra:

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

/ * Primjeri programa za "CP-JR ARM7 USB-LPC2148" * /

/ * Target MCU: Philips ARM7-LPC2148 * /

/ *: X-TAL: 12.00 MHz * /

/ *: Pokreni Speed 60,00 MHz (s PLL) * /

/ *: PLL Setup = M (5), P (2) * /

/ *: VPB Clock = CPU Clock = 60,00 MHz * /

/ * Keil Urednik: uVision3 V3.03a * /

/ * Compiler: Keil CARM V2.50a * /

/ * Napravi By: Eakachai Makarn (WWW.ETT.CO.TH) * /

/ * Last Update: 17/May/2006 * /

/ * Funkcija: Primjer korištenja UART1 Show fiq (EINT1) * /

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

/ / Ispis poruke na UART1 (9600, N, 8,1)

/ / Korišteno GPIO0.14 Trigger Prekid (fiq Vector)

/ / Press SW-opterećenje za Trigger Vanjski Interrup-1# include "LPC214x.H" / / LPC2148 MPU Registracija

# include <stdio.h> / / za rabljene funkcije printf/ * Pototype dio * /

void init_serial0 (void); / / Initil UART-0

int putchar (int ch); / / Put do Char UART-0

int getchar (void); / / Dohvaćanje Char Od UART-0

[color = red] void FIQ_Handler (void) __fiq; [/ color] / / EINT1 (fiq) Interrupt Serviceint main (void)

(

init_serial0 (); / / Initilial UART0 = 9600, N, 8,1/ / Početna External Interrupt-1 (GPIO0.14)

EXTMODE | = 0x02; / / Select External Interrupt-1 = Edge Select Trigger

EXTPOLAR | = 0x02; / / Select External Interrupt-1 = Rising Edge Trigger

PINSEL0 | = 0x20000000; / / Set GPIO0.14 = EXTINT1 Interrupt

Ugašen = 0x00000002; / / Clear Vanjski Interrupt1 Zastava/ / Početna prekidni vektor

VICIntSelect = 0x00008000; / / Select Interrupt-15 (External Interrupt1)

VICIntEnable = 0x00008000; / / Interrupt Enable-15 (External Interrupt1)printf ( "CP-JRARM7 USB-LPC2148 ... Primjer fiq Prekid \ n ");// poziva funkcije printf

printf ( "Interrupt-1 Rising Edge Trig By GPIO0.14 \ n"); / / Poziv funkcije printf

printf ( "Press Switch-opterećenje za Trigger Interrupt-1 \ n \ n"); / / Poziv funkcije printf

printf ( "Hello from ...... glavna funkcija \ n"); / / Poziv funkcije printf/ / Petlja Ovdje Čekaj Prekini

while (1);

)/******************************/

/ * Initial UART0 = 9600, N, 8,1 * /

/ * VPB (pclk) = 60,00 MHz * /

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

void init_serial0 (void)

(

PINSEL0 & = 0xFFFFFFF0; / / Reset P0.0, P0.1 Pin Config

PINSEL0 | = 0x00000001; / / Select P0.0 = TxD (UART0)

PINSEL0 | = 0x00000004; / / Select P0.1 = RxD (UART0)U0LCR & = 0xFC; / / Reset Riječ Izaberi (1:0)

U0LCR | = 0x03; / / podatkovni bit = 8 bitova

U0LCR & = 0xFB; / / Stop Bit = 1-bitni

U0LCR & = 0xF7; / / Paritet = Onemogući

U0LCR & = 0xBF; / / Disable Break Control

U0LCR | = 0x80; / / Enable Programiranje divisor Latches/ / U0DLM: U0DLL = 60,00 MHz / [16 x Baud]

/ / = 60,00 MHz / [16 x 9600]

/ / = 390,6 = 391 = 0187H

U0DLM = 0x01; / / Program djelitelj Latch (391) za 9.600 Baud

U0DLL = 0x87;U0LCR & = 0x7F; / / Disable Programiranje divisor LatchesU0FCR | = 0x01; / / FIF0 Omogući

U0FCR | = 0x02; / / RX FIFO Reset

U0FCR | = 0x04; / / TX FIFO Reset

U0FCR & = 0x3F;

)/****************************/

/ * Write znak UART0 * /

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

int putchar (int ch)

(

if (ch == '\ n')

(

while (! (U0LSR & 0x20)); / / čekati TXD Buffer Isprazni

U0THR = 0x0D; / / Write CR

)

while (! (U0LSR & 0x20)); / / čekati TXD Buffer Isprazni

return (U0THR = ch); / / Write Character

)/*****************************/

/ * Pročitajte lik iz UART0 * /

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

int getchar (void)

(

while (! (U0LSR & 0x01)); / / čekati RXD Receive Data Ready

return (U0RBR); / / Get Receice Data & Return

)
/********************************/

/ * External Interrupt-1 Service * /

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

void FIQ_Handler (void) __fiq

(

printf ( "Hello from ...... External Interrupt-1 \ n"); / / Poziv funkcije printf

Ugašen = 0x00000002; / / Clear Vanjski Interrupt1 Zastava

)

 
To ne može!

Možete imati samo jedan FIQ_Handler, ako imate više od jednog brzo prekinuti onda tvoj FIQ_Handler trebaju provjeriti prekinuti ono što je izazvalo.

 
hej, kodiran
hvala za pomoć
Možete li mi reći više detalja o tome
Internet može biti gradnje ispod ili ne?

Šifra:

# include "header.h"void FIQ_handle (void) __fiq;

/ / prekinuti rutinu za fiq odgovorvoid main ()

(

program

)void FIQ_handle (void) __fiq

(

provjeriti stanje fiq registrirati (VICFIQstatus) kako bi vidjeli koji zahtjev za prekidom izvori su coresponding i program za svakog coresponded zahtjev za prekidom

primjer

odaberite slučaju VICFIQstatus

slučaj <INT1>

(

prekinuti uslugu rutina za fiq prekid INT1

break;

)

slučaj <INT 2>

(

prekinuti uslugu rutina za fiq prekid INT2

break;

)

....)
 
Da, ako morate koristiti brzo prekida.

Bilo bi lakše korištenje Vectored IRQs i neka prekid kontroler brinuti stvari.

PS: Pročitajte '5 ,7 VIC korištenje bilješki "u upute za upotrebu, to recommendeds da je samo jedan
prekinuti izvora trebaju biti klasificirana kao fiq.

 
Encrypted hvala puno.

a
ja ga slična IRQ i non_IRQ zahtjev za prekidom.To možemo samo izjaviti prekinuti uslugu rutinu, i provjerite da biste vidjeli koji su prekinuti izvor coresponding označavanjem statusa IRQ.i to isto contruction gore.

 
Ne, vi imate različite vodiča za različite prekida, a vi ih dodijeliti prioritete.

Bacite pogled na Hitex knjige 'The Insider's Guide to NXP ARM7-Based Mikrokontroleri', možete ga skinuti besplatno.To je sve što želite znati.

 

Welcome to EDABoard.com

Sponsor

Back
Top