logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATxmega128A3U - Problemy z przełączaniem taktowania CPU na 32 MHz

SciroWroc 15 Mar 2015 18:10 1035 2
REKLAMA
  • #1 14532363
    SciroWroc
    Poziom 14  
    Witam.
    Mam problem ze zmianą taktowania procesora ATxmega128A3U.

    Standardowo procesor wstaje z prędkością 2 MHz. Chciałbym go przyśpieszyć na 32 MHz. Oscylatory wewnętrzne.

    Korzystam z procedury skopiowanej ze strony http://www.leon-instruments.pl/
    Wywołuję ją na samym początku.

    
    void Osc32MHz()
     {
        OSC.CTRL     =    OSC_RC32MEN_bm;       // włączenie oscylatora 32MHz
        while(!(OSC.STATUS & OSC_RC32MRDY_bm)); // czekanie na ustabilizowanie się generatora
        CPU_CCP      =    CCP_IOREG_gc;         // odblokowanie zmiany źródła sygnału
        CLK.CTRL     =    CLK_SCLKSEL_RC32M_gc; // zmiana źródła sygnału na RC 32MHz
     
    }
    


    Mój procesor nie zawsze chce przejść na wyższe taktowanie.
    Pojawia się status o ustabilizowaniu oscylatora 32 MHz pojawia się bit zezwolenia na zmianę rejestru chronionego, ale kiedy ma się przełączyć bit wybranego zegara, to bit zezwolenia zdąży zniknąć.

    Kiedy jak zatrzymam procesor i przełączę ręcznie bit zezwolenia i zmienię taktowanie to procesor zaczyna pracować na 32 MHz.
    przejście w "dół" nie stanowi dla niego problemu. 32->2

    Środowisko Atmel studio 6.2
    Optymalizacja wyłączona (-O0)
    Programator ICE, komunikacja po PDI
    Procesor zasilany +3.3VDC

    Jest jeszcze coś co należało ustawić, aby zmienić taktowanie ?
  • REKLAMA
  • Pomocny post
    #2 14532476
    tmf
    VIP Zasłużony dla elektroda
    Tak, należy włączyć optymalizację co najmniej na -Q1, a najlepiej na -Qs - inaczej zmiana taktowania nie wystąpi w ciągu maksymalnie 4 taktów od zezwolenia. Przy okazji - jeśli na tym etapie masz odblokowane przerwania, to zmiana źródła zegara wymaga ich zablokowania - jeśli wystąpi przerwanie to nie zmieścisz się w czasie.
  • #3 14532617
    SciroWroc
    Poziom 14  
    Zadziałało.

    Włączenie optymalizacji rozwiązało problem. Sprawdziłem na (-01) i (-0s) zmiana przechodzi bez problemów. W chwili wywoływania przerwania są jeszcze zablokowane.


    Dziękuję za pomoc.
    pozdrawiam
    Grzegorz
REKLAMA