Új hozzászólás Aktív témák

  • Janos250

    őstag

    Belenéztem ebbe az Adafruit könyvtárba, és elvi problémám van vele:
    deklarálja a szokásos módon:

    static inline uint32_t _getCycleCount(void) {
    uint32_t ccount;
    __asm__ __volatile__("rsr %0,ccount":"=a" (ccount));
    return ccount;
    }

    Ez rendben.
    A bitek kezdeténél vár annyit, amennyit kell:

    while(((c = _getCycleCount()) - startTime) < period); // Wait for bit start

    Ugyanígy várakozással időzít a magas szintnél is. Ez így jó (lenne), erre írtam egyszer korábban, hogy a "gyalog" módszer.
    Nincs RMT, ciklusban vár, de OK, mert közben úgyse csinál semmit a proci.
    Csakhogy:
    a uint32_t _getCycleCount(void) mint láthatjuk 32 bites, tehát nagyjából 17 másodpercenként átfordul, és olyankor borul az időzítés!
    Persze van elég nagy valószínűsége, hogy nem akkor írja a szalagot, de ha igen, akkor csúszik az egész. Nem csak egy pixel, mert "pixel végjel" nincs.
    Ezért kell 64 bites verziót használni (szoftveresen megoldva)

Új hozzászólás Aktív témák

Hirdetés