Úvodem
O tom jak SPI na modulech IQRF pracuje jsme si již říkali v jednom z loňských dílů našeho miniseriálu. Prakticky jde o jednoduchý stavový automat, kde je zabudována veškerá inteligence již přímo v systému a uživatel pouze testuje příznaky a vkládá do, případně vybírá data z určeného bufferu. Rovněž komunikace vzduchem byla již několikrát probrána, opět jde pouze o využití předem připravených funkcí. Nic tedy nebrání vytvoření obousměrného tunelu rozhranní RF a SPI. Uvedený zdrojový kód pochází z absolvenské práce Bc. Stanislava Dubce a byl publikován s jeho souhlasem.
#include "includes/template-basic.h" #pragma optimize 1 void APPLICATION() { // nastaveni WTD WDTCON = 0b0000.1111; OPTION |= 0b0000.1111; // nastaveni dob pro bliknuti LED setOnPulsingOUT2(5); setOffPulsingOUT2(10); // povoleni SPI enableSPI(); // vymazani WDT clrwdt(); // nastaví výkon na maximum setTXpower(7); while (1) { clrwdt(); // přečte status sb. SPI getStatusSPI(); // pokud přišel paket if (_SPIRX) { // a CRC není v pořádku if (!_SPICRCok) // zpráva se zahodí goto restartSPI; // jinak jsou přesunuta data do SPI bufferu... bufferRF[0] = bufferCOM[0]; bufferRF[1] = bufferCOM[1]; bufferRF[2] = bufferCOM[2]; // blikne LEDkou pulseLED(); // nastaví délku RF paketu na 1 DLEN = 3; // odešle RF paket PIN = 0; RFTXpacket(); restartSPI: // restart st. automatu startSPI(0); } // konec podminky clrwdt(); // pokud přišel RF paket if (RFRXpacket()) { pulseOUT2(); bufferCOM[0] = bufferRF[0]; bufferCOM[1] = bufferRF[1]; bufferCOM[2] = bufferRF[2]; startSPI(3); clearBufferINFO(); copyBufferINFO2RF(); } } // konec while }// konec app // *********************************************************************
Jak je vidět na uvedené aplikaci není vůbec nic složitého, na začátku je provedeno nastavení předděličky pro WDT, což zajistí dostatek času pro zpracování přijatých paketů ze vzduchu i SPI. Následně, tak jak je zvykem je povoleno SPI a nastaven maximální vysílaní výkon. Při retranslaci SPI-RF je možné předpokládat, že nastavení maximálního vysílaného výkonu je zcela v pořádku. Nechybí nezbytné vynulování VDT.
Aplikace pokračuje nekonečnou smyčkou, kdy v první části jsou zpracovávány přijaté pakety rozhranní SPI, to už jsme dělali v pátém díle IQRF Prakticky. V tomto příkladě je pak buffer tříprvkový, proto jsou přesouvány tři bajty z SPI do bufferu RF. Není-li však přijat žádný SPI paket, nebo je poškozen, pak je tato část přeskočena a aplikace pokračuje rovnou vynulováním WDT a následně zpracování příjmu z RF. Opět i tento úkol jsme již několikrát prováděli.
Aplikaci pro retranslaci mezi rozhraními SPI a RF máme tedy hotovou, jak jednoduché...
Na závěr si dovolím upozornit, že MICRORISC uvedl na webu IQRF novou refereční příručku k funkcím systému OS 2.09 čímž jistě potěšil řadu uživatelů, kterým doposud chyběl obsáhlý popis funkcí OS. Příručka dopodrobna popisuje jejich použití a návratové hodnoty, stejně tak možnosti ovlivnění klíčových registrů. Nechybí ani jednoduché příklady využití.
DOWNLOAD & Odkazy
- IQRF Prafkticky I
- IQRF Prafkticky II
- IQRF Prafkticky III
- IQRF Prafkticky IV
- Inteligentní bezdrátová pojítka? Ano – IQRF
- TEST modulů IQRF - miniaturní vestavná radiová komunikace
- IQRF moduly v HW Shopu
- Domovská stránka projektu IQRF - http://www.iqrf.com/
- Domovská stránka MICRORISC s.r.o. - http://www.microrisc.com/