eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikazamulający program na AVRRe: zamulający program na AVR
  • Data: 2016-04-07 17:37:01
    Temat: Re: zamulający program na AVR
    Od: badworm <n...@p...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dnia Thu, 7 Apr 2016 17:04:31 +0200, szod napisał(a):

    > To sprawdź ustawienia bitów konfiguracyjnych uC - na jakim oscylatorze
    > pracuje.

    Kompilator do fusebitów raczej dostępu nie ma. Przed chwilą porównałem
    prędkość zegara I2C dla wsadów z obu kompilatorów. Różnica jest
    kolosalna - dla nowego GCC to zaledwie 5kHz, dla starego ponad 80kHz.
    Kod generujący opóźnienia dla tej magistrali wygląda tak:

    #include <avr\io.h>
    #include <inttypes.h>

    #include "harddef.h"
    #include "makra.h"
    #include "i2c.h"

    // Wyliczenie czasu opóźnienia połówkowego i ćwiartkowego (cykle)
    #define I2C_nhalf (F_CPU/I2C_SPEED/2)

    // Funkcja dłuższych opóźnień
    #if I2C_nhalf < 3
    // Nic
    #elif I2C_nhalf < 8
    static void i2c_xdelay(void)
    {
    NOP();
    }
    #else
    #define I2C_delayloops (1+(I2C_nhalf-8)/3)
    #if I2C_delayloops > 255
    #error Przyspiesz - bo sie nie wyrabiam ;)
    #endif
    static void i2c_xdelay(void)
    {
    asm volatile( \
    "delayus8_loop%=: \n\t"\
    "dec %[ticks] \n\t"\
    "brne delayus8_loop%= \n\t"\
    : :[ticks]"r"(I2C_delayloops) );
    }
    #endif //I2C_nhalf >= 3

    // Opóźnienia dla I2C
    static inline void i2c_hdelay(void)
    {
    #if I2C_nhalf < 1
    return; // To jest funkcja inline, jeśli składa się tylko z "return"
    jest usuwana podczas optymalizacji
    #elif I2C_nhalf < 2
    NOP();
    #elif I2C_nhalf < 3
    asm volatile(
    "rjmp exit%=\n\t"
    "exit%=:\n\t"::);
    #else
    i2c_xdelay();
    #endif
    }
    --
    Pozdrawiam Bad Worm badworm[maupa]post{kropek}pl
    GG#2400455 ICQ#320399066

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: