www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

ARM UART irq

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4769
Aktiv.: 20.12
Kraj: Kobarid

PrispevekObjavljeno: Sob Okt 17, 2009 2:15 pm    Naslov sporočila:  ARM UART irq Odgovori s citatom

Tokrat prvič uporabljam prekinitve za sprejem podatkov preko UART. Zadeva dela super. Problem je edino, ko ne vem, kdaj je konec prejetega sporočila. Nisem zasledil zastavice o KONČANEM prenosu? Namreč želim da mi kazalec na sporocilo zopet postavi na 0. Prikazani primer ne dela OK. Namreč prejete besedila (več bytov) mi lepi enega za drugim.... Besede so ločene z <CR>

Prilagam primer

Koda:
void uart_i (void) __irq
{
   IOSET0 = izh1;     //mi prižge lučko

   sporocilo[stevec]= U1RBR;
   stevec++;
   if (U1LSR == 0x0D)
   {
      stevec=0;
   }
   VICVectAddr = 0;   /* acknowledge interrupt */

}

_________________
Lep dan
Simon
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3362
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Sob Okt 17, 2009 4:22 pm    Naslov sporočila:  Nisem Odgovori s citatom

Nisem sicer močan v C-u, toda videti je, da prekinitvena rutina analizira, ali je sprejeti bajt 0D
Koda:
if (U1LSR == 0x0D)

in na osnovi le tega se postavi indeks na začetek
Koda:
stevec=0;

in tukaj je še dodati zastavico, en bit, ki ga je potrebno seveda definirati in tukaj postaviti na 1,
v glavnem programu pa testirati, ali je ta bit na 1 in če je obdelati sporočilo in postaviti bit spet na 0.

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4769
Aktiv.: 20.12
Kraj: Kobarid

PrispevekObjavljeno: Sob Okt 17, 2009 4:46 pm    Naslov sporočila:   Odgovori s citatom

Vilko hvala za odgovor
Težava je v tem, da sploh ne pride do tega, da postavi števen na 0.
Skoraj zagotovo bi moral biti kje kak bit v registru, ki sporoča, da je konec sprejema ali pa tudi ne ????

_________________
Lep dan
Simon
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sob Okt 17, 2009 5:55 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
PeterC
Član
Član



Pridružen-a: Tor 14 Dec 2004 20:22
Prispevkov: 204
Aktiv.: 0.86

PrispevekObjavljeno: Sob Okt 17, 2009 5:56 pm    Naslov sporočila:   Odgovori s citatom

Hm... zakaj pa v U1LSR čakaš na CR (ASCII vrednost 0x0D)? U1LSR govori o statusu komunikacije, o napakah in podobno.

Preveri zadnjo brano vrednost

Koda:
if (sporocilo[stevec] == 0x0D)
...

_________________
Time is like a fuse, short and burning fast
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Umnik
Član
Član



Pridružen-a: Čet 16 Sep 2004 17:52
Prispevkov: 958
Aktiv.: 4.04
Kraj: Novo mesto

PrispevekObjavljeno: Sob Okt 17, 2009 6:26 pm    Naslov sporočila:   Odgovori s citatom

Pravilen odgovor je dal PeterC, Krokotov pa je povsem napačen.

Primer za LPC210x:
Koda:

void uartInterrupt(void) __irq
{
    U32 iir;
    static U32 rxIdx;
    volatile U32 dummy;

    iir = U1IIR & 0x0E;                        //beremo interupt register

    /* Rx Data Available */
    if(iir == 0x04)
    {
        rxBuf[rxIdx] = U1RBR;                  //znak porinemo v rx buffer

        if(rxBuf[rxIdx++] == 0x0D) rxIdx = 0; //če je znak 0x0D brišemo index

        if(rxIdx == rxBufSize) rxIdx = 0;   //če indeks preseže velikost bufferja
    }

    /* Receive Line Status */
    else if(iir & 0x06){
        dummy = U1LSR;
    }
    /* Char Time-out Indicator */
    else if(iir == 0x0C){
        dummy = U1RBR;
    }

    VICVectAddr = 0;                            //Acknowledge
}


Močno priporočljivo je, da implementiraš branje za vse možne primere, ki se utegnejo zgoditi, tudi če jih ne uporabljaš. Lahko se zgodi, da se ti sistem obesi, pa ne boš vedel zakaj.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4769
Aktiv.: 20.12
Kraj: Kobarid

PrispevekObjavljeno: Sob Okt 17, 2009 8:36 pm    Naslov sporočila:   Odgovori s citatom

Umnik hvala za kodo.
Sicer sem opazil, da sem imel tudi sam ene neumnosti v main. Sedaj dela kot je treba

_________________
Lep dan
Simon
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Sob Okt 17, 2009 9:36 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 497 dni


Powered by phpBB © 2001, 2005 phpBB Group