Čeština / English
Login

Firmware / Řadič přerušení

Autor: Zdeněk Vašíček ()
Update: 19.3.2009

1. Systém přerušení

Pro některé řadiče (komponenty) je potřebné čtení pouze jednou za nějaký čas na základě nějaké události. Aby se z řadiče nemusel stále číst stav a tím zjišťovat zda jsou k dispozici data, využívá se systému přerušení. Systém přerušení se skládá z dvou částí a to z řadiče přerušení uvnitř FPGA, který zpracovává požadavky o přerušení od jednotlivých komponent uvnitř FPGA a na základě toho generuje žádost o přerušení pro MCU. Obsluha přerušení v MCU si při zpracování žádosti o přerušení přečte pomocí SPI vektor přerušení z řadiče uvnitř FPGA a podle jeho hodnoty zjistí zdroj žádosti. Podle stavu bitů tohoto vektoru se volají příslušné obslužné rutiny.

2. Implementace řadiče přerušení v FPGA

Řadič přerušení je navrhnut genericky, aby bylo možné jednoduchým způsobem nastavit počet vstupních přerušení. Rozhraní komponenty je na obrázku 2.1.

interrupt.png

Obrázek 2.1: Rozhraní komponenty přerušení.

Popis generických parametrů SPI dekodéru:

  • N : natural, výchozí hodnota 8

    Parametr určující počet zdrojů přerušení

Popis rozhraní SPI řadiče:

  • CLK - vstup pro hodinový signál

  • RST - vstup pro reset

  • IRQ_IN - žádost o přerušení z řadičů uvnitř FPGA

  • DATA_OUT, DATA_IN, WRITE_EN, READ_EN - signály, které je nutné připojit k řadiči SPI

  • IRQ_OUT - žádost o přerušení z řadiče přerušení. Tento signál je nutné připojit k portu MCU

Knihovna přerušení, která je umístěna v adresáři libs umožňuje obsluhovat pouze osm zdrojů přerušení. Pokud budeme chtít využít více zdrojů přerušení, je nutné v zvýšit datovou šířku SPI dekodéru a v software použít vhodnou instrukci.

2.1. Popis funkce řadiče přerušení

Po restartu FPGA se inicializuje řadič přerušení a nastaví se taková maska přerušení, která zakazuje veškeré přerušení. Poté inicializaci je zapotřebí nahrát do řadiče přerušení masku přerušení, která dovoluje přerušení pouze od zdrojů, které budeme využívat. Řadič zpracovává příchozí žádosti o přerušení a v případě, že detekoval žádost, generuje na výstupu IRQ_OUT žádost o přerušení směrem do MCU. Tato žádost způsobí vyvolání obslužné rutiny uvnitř MCU. Obslužná rutina si nejprve přečte z FPGA vektor přerušení, který určuje zdroj přerušení a současně potvrdí přijetí žádosti vynulováním bitů vektoru přerušení v řadiči přerušení. Po potvrzení žádosti je signál IRQ_OUT automaticky deaktivován. Poté co má obslužná rutina k dispozici vektor přerušení, zavolá obslužnou uživatelskou rutinu s parametrem, obsahujícím přijatý vektor přerušení.

Aby přerušení fungovalo tak jak má, je nutné u FITkitu verze 1.x propojit pin JP10(5) (signál z FPGA) s pinem JP9(26) (signál do MCU) - viz obrázek 2.2. V případě FITkitu verze 2.x k tomuto účelu slouží propojka J5.

irq_propojka.png

Obrázek 2.2: Propojení přerušení u FITkitu verze 1.x.

Zobrazeno: 1533x Naposledy: 23.9.2017 14:57:34