Sunteți pe pagina 1din 19

ACADEMIA TEHNIC MILITAR

FACULTATEA SISTEME ELECTRONICE I INFORMATICE MILITARE

PROIECTAREA MICROPROCESOARELOR
Generarea de cereri de ntrerupere de la surse diferite, pe aceeai linie
-- Proiect

Realizat de: Pun Iuliana, gr. 214B Profesor ndrumator: Mrgrit Laureniu

Cuprins
1. Prezentarea proiectului 2. Noiuni teoretice a. Procesorul Blackfin b. Mediul de dezvoltare Visual DSP c. Intreruperi 3. Implementare proiect a. Cerine de implementare. b. Structura proiectului c. Configuratia sistemului d. Mod de lucru. 4. Observaii. Concluzii 5. Notaii 6. Anexa

1. Prezentarea proiectului

Acest lucrare i propune s ilustreze modul n care este folosit managerul de ntreruperi pentru a cupla i decupla ntreruperile. Procesorul Blackfin 357 foloseste un mecanism de control al evenimentelor structurat pe doua nivele. System Interrupt Controller (SIC) (1) lucreaza alaturi de Core Event Controller (CEC) (2) pentru a prioritiza si a controla toate intreruperile sistemului. SIC mapeaza sursele intreruperilor de la nivelul perifericelor la intrarile nucleului date de intreruperile de tip general-purpose, prioritizate. Aceasta mapare poate fi programata, astfel incat intreruperi individuale pot fi mascate in SIC. CEC suporta 9 intreruperi de tip general-purpose IVG7- IVG15(3). Deoarece IVG14 si IVG15 sunt rezervate pentru metodele intreruperilor software, ramane disponibila suita de grupuri de vectori de intrerupere IVG7 IVG13. n acest exemplu sunt folosite timere de tip GP(4) pentru a aprinde i stinge ledurile de pe placa.

n mod implicit, cele trei timere au acelai grup de vector de ntrerupere, i anume IVG11. n acest exemplu, fiecrui timer i este setat propriul IVG, printr-o metoda asociat. // change the timer ISRs(6) so they map to separate IVG levels

adi_int_SICSetIVG(ADI_INT_TIMER0,11); adi_int_SICSetIVG(ADI_INT_TIMER1,10);

adi_int_SICSetIVG(ADI_INT_TIMER2,9);

Fiecare metod manevreaz cte un led din ansamblul de ase leduri.

metoda Timer-ului 0 se va activa la jumtate din frecvena ISR-ului corespunztor Timer-ului 1 i va comuta primul LED din ansamblul celor ase LED-uri.

//pentru Timer 0

{ ADI_TMR_GP_CMD_SET_PERIOD, (void *)0x08000000 }

metoda Timer-ului 1 se va activa la jumtate din frecvena ISR-ului corespunztor Timer-ului 2 i va comuta al 2-lea LED din ansablul celor ase LED-uri.

//pentru Timer 1

{ ADI_TMR_GP_CMD_SET_PERIOD, (void *)0x04000000 }

metoda Timer-ului 2 se va activa cel mai frevcent i va comuta al 3lea LED din ansablul celor ase LED-uri.

//pentru Timer 2

{ ADI_TMR_GP_CMD_SET_PERIOD, (void *)0x02000000 }

This function initialises the interrupts for Timer0 and PORTF_IntA (PORTF2).

//Initializarea intreruperilor void boot_thread_type::Init_Interrupts() { // assign core IDs to interrupts *pSIC_IAR0 = 0xffffffff; *pSIC_IAR1 = 0xffffffff; *pSIC_IAR2 = 0xffff4fff; *pSIC_IAR3 = 0xffff5fff; ID5 // Timer0 -> ID4; // PORTF IntA ->

// assign ISRs to interrupt vectors register_handler(ik_ivg11, Timer0_ISR); IVG 11 register_handler(ik_ivg12, PORTF_IntA_ISR); // PORTF_IntA_ISR -> IVG 12 // Timer0 ISR ->

// enable Timer0 and PORTF IntA interrupt *pSIC_IMASK = 0x08080000; }

// Subrutinele de tratare a intreruperilor

EX_INTERRUPT_HANDLER(PORTF_IntA_ISR) {

// confirm interrupt handling and clear flags *pPORTFIO_CLEAR = 0x0FC4;

dir=(dir+1)%2; if(dir) VDK::C_ISR_SetEventBit((VDK::EventBitID) 3); else VDK::C_ISR_SetEventBit((VDK::EventBitID) 3); }

EX_INTERRUPT_HANDLER(Timer0_ISR) {

*pTIMER_STATUS = 0x0001; VDK::C_ISR_SetEventBit((VDK::EventBitID) bit); }

2. Noiuni teoretice

Procesorul Blackfin

Procesoarele Blackfin ntruchipeaza un nou tip de procesoare integrate, pe 16/32 biti proiectate special pentru a satisface nevoile de calcul si constrngerile puterii consumate ale aplicatiilor integrate audio, video, pentru comunicatii, industriale actuale. Aceste procesoare ofera atingerea cu succes a performantelor ridicate de procesare a semnalelor si eficienta a utilizarii puterii cu ajutorul modelului de programare RISC(Reduced Instruction Set Computer), si prezinta totodata target-uri software omogene care permit alocarea flexibila a resurselor intre functiile real-time si cele non real-time ale DSP-ului. De asemenea, procesoarele includ un management avansat al memoriei care suporta sisteme integrate de operare cu memorie protejata si neprotejata cum sunt CLinux, ThreadX (Express Logic), INTEGRITY andvelOSity" (Green Hills Software), Nucleus (Accelerated Technology), Fusion" (Unicoi Systems), and RTXC Quadros" (Quadros Systems) etc. Una din cele mai importante functionalitati ale procesoarelor Blackfin este posibilitatea de a lucra att ca microcontroller (MCU) ct si ca DSP ntr-o arhitectura nedefinita, permitnd partitionarea flexibila ntre nevoile de control si procesare a semnalului. Deci, daca aplicatia o cere procesorul poate lucra fie 100% ca un MCU, fie 100% ca un DSP fie

ca o combinatie dintre cele doua. Perifericele unui procesor Blackfin au capacitatea de a suporta viteze ridicate ale datelor serial si paralel. Astfel, procesoarele Blackfin au fost proiectate pentru a suporta att controllere DMA ct si Cache memory pentru a muta datele prin sistem.

Mediul Visual DSP Visual DSP este un mediu de administrare a proiectelor, alcatuit din

mediul de dezvoltare integrat (IDE) si depanator. Visual DSP asigura administrarea proiectelor pe tot parcursul desfasurarii lor printr-o singura interfata. Mediul de dezvoltare al proiectelor si depanatorul sunt integrate asigurand astfel editarea, constructia si depanarea usoara a proiectelor. Facilitati: Depanator: Vizualizeaza fisierele sursa in C, in limbaj de asamblare sau mixte; Configureaza si inregistreaza instructiunile programelor in C sau in limbaje de asamblare; Seteaza punctele de control si punctele de suspendare conditionale in registrii procesorului si stive precum si in program si in memoria de date Permite configurari statistice (numai pentru familia 219x); Permite multiprocesare (numai pentru familia 219x). Mediu de dezvoltare integrat (IDE) Permite definirea tuturor configuratiilor proiectelor si instrumentelor, prin intermediul unor cutii de dialog cuprinse in pagina in care se definesc proprietatile; Permite realizarea fisierelor sursa folosind un editor integrat cu sintaxa accentuata si care ofera facilitati OLE drag and drop, bookmark.

Administrarea flexibila a proiectelor IDE asigura un management flexibil al aplicatiilor DSP dezvoltate, facilitand accesul la toate activitatile necesare realizarii si depanarii acestora. Editorul IDE permite crearea sau modificarea fisierelor sursa, vizualizarea listingului si a fisierelor existente in proiect. Interfata liniei de comanda Tcl Interfata Tcl ( Tool Comand Line) faciliteaza executarea secventelor repetate ale comenzilor depanatorului si asigura dezvoltarea unor aplicatii de testare complexe ale sistemelor DSP. Instrumente de generare a codului. Instrumentele de generare a codului pentru familiile de procesoare ADSP-218x si ADSP-219x permit dezvoltarea aplicatiilor asigurand avantaje arhitecturilor DSP si anume multiprocesare, partajarea memoriei, reacoperirea memoriei. Aceste instrumente includ: compilatorul C, biblioteca de executie in C, asamblor, editor de legaturi. Configurare statistica Aceasta facilitate asigura forme generalizate de configurare a procesoarelor testate. Depanatorul are posibilitatea sa esantioneze aleator procesoarele testate rezultatele obtinute fiind prezentate grafic pentru a putea fi comparate cu usurinta. Trasarea diagramelor Fereastra de trasare a diagramelor permite exportarea imaginilor in fisiere .bmp si .jpeg si are optiuni de configurare a titlului, subtitlului, a marimii si culorii font-ei sau a altor componente. Compilatorul C si asamblorul Compilatorul C genereaza eficient codurile care sunt optimizate atat din punct de vedere al densitatii cat si din punct de vedere al timpului de executie. Permite includerea unor instructiuni specifice limbajelor de asamblare pentru rezolvarea problemelor ce pot apare in cazul unor bucle de timp critice. Contine rutine matematice, DSP si biblioteca de executie in C care permit reducerea timpului de realizare al programului.

ntreruperi

Controlerul de evenimente proceseaza cinci tipuri de activitati sau evenimente, si anume: Emulare Resetare Intreruperi nemascabile (NMI) Exceptii Intreruperi

Intreruperea reprezinta evenimentul care schimba fluxul normal de procesare al instructiunilor, printr-o interventie asincrona.

Exceptia este un eveniment initiat de software, ale carui efecte sunt sincronizate cu fluxul de date al programului. Sistemul de evenimente este incuibarit si prioritizat. In consecinta, pot fi active mai multe rutine in orice moment, iar un eveniment cu prioritate mai mica poate fi inlocuit de catre un eveniment cu prioritate mai mare. Aceste aspecte teoretice vor fi exemplificate prin prezenta lucrare.

3. Implementare. Prezentarea Proiectului a. Cerine de implementare. Cerine harware butoane si LED-uri EZ-Kit

EZ-KIT Lite ofera patru butoane (push buttons) si sase LED-uri. Cele sase LED-uri, numerotate LED1 pana la LED6, sunt accesate prin intermediul pinilor PF11-6. Cele 4 butoane sunt etichetate cu SW10 pana la SW13. Reset Push Button (SW9) reseteaza toate circuitele de pe placa. O exceptie este chip-ul interfetei USB. Push Buttons(SW10-13). Processor Programmable Push Button Reference Flag Pin Designator PF2 SW13 PF3 SW12 PF4 SW11 PF5 SW10 Fig. Programmable Flag Switches. Power LED (LED7). Cand LED7 este aprins (verde), acesta indica faptul ca puterea este furnizata in mod corespunzator pe placa. Reset LED (LED8). Cand LED8 este aprins, acesta indica faptul ca master reset-ul tuturor circuitelor este activ. LEDs (LED1-6) LED Reference Designator Processor Programmable Flag Pin LED1 PF6 LED2 PF7 LED3 PF8 LED4 PF9 LED5 PF10

LED6

PF11 Fig. User LEDs

Cerine software manager de intreruperi modul de timer modul de flaguri

b. Structura proiectului. Fisierul proiectului principal "./IntMgrSetIVGExample.dpj" Fisierul sursa principal "./IntMgrSetIVGExample.c" Fisiere sursa pentru utilitatile EZ-Kit ale procesorului Blackfin "./utilities/ezkitutilities.c" Fisiere header pentru utilitatile EZ-Kit ale procesorului Blackfin "./utilities/ezkitutilities.h"

c. Configuratia sistemului Jumpers: SW5 (push button enable switch) 1:ON, 2:ON, 3:ON, 4:ON Conectori externi

d. Procedura

1. Pornii mediul de programare VisualDSP++ Environment : Start/Programs/VisualDSP++ 5.0/ VisualDSP++ Environment.Compileaz

proiectul urmnd paii "Project-

>Rebuild Project"
2. Conectai placa BF537 i creai o nou sesiune de lucru n VisualDSP++. a) Conectai placa BF537 la calculator b) Selectai Session din meniul principal:

c) Selectai New Session:

d) Selectai ADSP-BF537 i apsai butonul Next:

e) Selectai EZ-KIT Lite i apsai butonul Next:

f)

Selectai platforma i apsai butonul Next :

g)

Apsai butonul Finish:

3. Deschidei proiectul IntMgrSetIVGExample.dpj

a) Selectai File/Open/Project: b) Selectai IntMgrSetIVGExample.dpj din directorul de workspace aferent i apasai butonul Open.

- Execut proiectul urmnd paii "Debug->Run" (sau F5) - Analizeaz luminarea LED-urilor - Folosete comanda "Debug->Halt" pentru a opri programul

4. Observaii. Concluzii

5. Notaii
(1) SIC (2) CEC (3) IVG - System Interrupt Controller - Core Event Controller - Interrupt Vector Group

(4) GP timer - General Purpose timer (5)ISR - Interrupt Status Register

6. Anexa
Handler for Timer 0. *********************************************************************/ static ADI_INT_HANDLER(Timer0_Handle) { // clear timer 0 interupt adi_tmr_GPControl(ADI_TMR_GP_TIMER_0, ADI_TMR_GP_CMD_CLEAR_INTERRUPT, NULL); // toggle the specified LED ezToggleLED(EZ_FIRST_LED); // This return value tells the interrupt manager not to process // anymore ISR's for this IVG, because we already serviced the // peripheral that had interrupted this time. // For this example, however, there is only one ISR per IVG. return (ADI_INT_RESULT_PROCESSED); } Handler for Timer 1 *********************************************************************/ static ADI_INT_HANDLER(Timer1_Handle) { // clear timer 1 interupt adi_tmr_GPControl(ADI_TMR_GP_TIMER_1, ADI_TMR_GP_CMD_CLEAR_INTERRUPT, NULL); // toggle the specified LED ezToggleLED(EZ_FIRST_LED+1); // This return value tells the interrupt manager not to process // anymore ISR's for this IVG, because we already serviced the // peripheral that had interrupted this time. // For this example, however, there is only one ISR per IVG. return (ADI_INT_RESULT_PROCESSED); } Handler for Timer 2 *********************************************************************/ static ADI_INT_HANDLER(Timer2_Handle) { // clear timer 2 interupt adi_tmr_GPControl(ADI_TMR_GP_TIMER_2, ADI_TMR_GP_CMD_CLEAR_INTERRUPT, NULL); // toggle the specified LED ezToggleLED(EZ_FIRST_LED+2);

// This return value tells the interrupt manager not to process // anymore ISR's for this IVG, because we already serviced the // peripheral that had interrupted this time. // For this example, however, there is only one ISR per IVG. return (ADI_INT_RESULT_PROCESSED); }

S-ar putea să vă placă și