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

Xmega16D4 - Uruchomienie wewnętrznego oscylatora 32MHz - błędy kompilacji

Śledziu 23 Sty 2013 11:57 1302 3
REKLAMA
  • #1 11828910
    Śledziu
    Poziom 12  
    Witam

    Napotkałem taki oto problem, nie potrafię uruchomić procesora z wew. innym oscylatorem niż fabryczny.
    Przeszukując elektrodę oraz google. natrafiłem np na takie kody źródłowe:
    kod pochodzi z http://www.forbot.pl/forum/topics7/minisumo-jezyk-vt6678.htm:
    //ustawienie taktowania mikrokontrolera
    	//z wewnętrznego oscylatora 32MHz
    	CLKSYS_Enable( OSC_RC32MEN_bm ); //włączenie wewnętrznego oscylatora 32MHz
    	CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc ); //ustawienia preskalerów
    	do {} while ( CLKSYS_IsReady( OSC_RC32MRDY_bm ) == 0 ); //oczekiwanie na ustabilizowanie się oscylatora
    	CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_RC32M_gc ); //zmiana żródła sygnału zegarowego na wew. oscylator 32MHz
    	CLKSYS_Disable(OSC_RC2MCREF_bm); //wyłączenie wew. oscylatora 2MHz
    	CLKSYS_AutoCalibration_Enable(OSC_RC32MCREF_bm,1); //autokalibracja oscylatora 32MHz


    Niestety AS6.0 przy kompilacji wypisuje takie błędy:
    Error	2	undefined reference to `CLKSYS_Prescalers_Config(CLK_PSADIV_enum, CLK_PSBCDIV_enum)'	
    Error	3	undefined reference to `CLKSYS_Main_ClockSource_Select(CLK_SCLKSEL_enum)'	
    Error	4	undefined reference to `CLKSYS_Disable(unsigned char)'	
    Error	5	undefined reference to `CLKSYS_AutoCalibration_Enable(unsigned char, bool)'	
    

    Dodam że mam dodane pliki nagłówkowe.

    Próbuje inaczej, przypisać ręcznie te rzeczy do których errory się wysypują nadal nic. Przy używaniu symulatora zauważyłem że nie bardzo mi idzie zmiana Rejestru zagara SCLSEL - odpowiedzialnego za wskazanie źródła do pędzenia uP.

    Może ktoś podpowie jak rozwiązać problem.
  • REKLAMA
  • #2 11829582
    tmf
    VIP Zasłużony dla elektroda
    Bo powyższy kod dotyczy ASF - aby z niego korzystać musisz najpierw stworzyć nowy projekt ASF.
    A co do rejestrów - modyfikacja niektórych wymaga wcześniejszego zezwolenia na modyfikację chronionego rejestru IO.
  • REKLAMA
  • #3 11829659
    kchpl
    Poziom 15  
    Witam
    spróbuj tak:

    Wewnętrzne 32MHz:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Albo dowolna wartość całkowita z wykorzystaniem PLL i wew. 2MHz:
    (Przykład poniżej dla 10 MHz=5x2MHz)

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 11829901
    Śledziu
    Poziom 12  
    Dzieki wielkie Panowie właśnie przed chwilą stworzyłem coś takiego:

    
    CLKSYS_Enable( OSC_RC32KEN_bm );                        /* Enable 32 MHz Osc. */
    do {} while ( CLKSYS_IsReady( OSC_RC32KRDY_bm ) == 0 ); /* Wait for 32 MHz Osc. to stabilize */
    CCP |= 0xD8;
    CLK.CTRL = 0x01;
    
REKLAMA