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

AVR - rdzeń (Atmega - ogólnie)

Lumberjack 16 Sty 2011 14:32 2411 6
  • #1 9013737
    Lumberjack
    Poziom 10  
    Witam
    W opisie mikrokontrolerów ARM7 lub ARM9 czesto pisze sie o rdzeniu tych mikrokontolerów np ARM7TDMI czy ARM966E-S lub Cortex. Czy w przypadku ATMEGA istnieje rdzeń na którym sa zbudowane. Cy można mówić o jakimś rdzeniu uC w tym przypadku? Niestety w opisach dotyczacych avr z którymi sie zetknąłem nie ma o tym mowy.
  • #2 9013791
    Father
    Poziom 26  
    Tak, AVR ma też swój rdzeń, ale ponieważ został on zaprojektowany wyłącznie dla rodziny AVR więc nie jest wyróżniony, ponieważ nie występuje nigdzie indziej, tworzy całość z mikrokontrolerem. Z rdzeniami ARM jest trochę inaczej, ponieważ rdzeń jest licencjonowany przez ARM, więc nie jest on związany z konkretnym mikrokontrolerem, wielu producentów używa identycznego rdzenia, ale mikrokontrolery różnią się np. peryferiami, częstotliwością taktowania, pamięcią itd.
  • #3 9015009
    victoriii
    Poziom 19  
    Zauważyłem, że rdzeń AVRów czy też całe procki mają różne wersje. Widać to w plikach linkera do AVRGCC.
  • #4 9016035
    LordBlick
    VIP Zasłużony dla elektroda
    A, o to chodzi ? :
    $ ../ShowPartCoreVersions 
    Include directory "~/Devel/AVR/AvrAssembler2-2.1.42/Appnotes" exist
    ATtiny10 : Core version : AVR8L_0  
    ATtiny20 : Core version : AVR8L_0  
    ATtiny4 : Core version : AVR8L_0  
    ATtiny40 : Core version : AVR8L_0  
    ATtiny5 : Core version : AVR8L_0  
    ATtiny9 : Core version : AVR8L_0  
    ATtiny11 : Core version : V0E  
    ATtiny12 : Core version : V0E  
    ATtiny15 : Core version : V0E  
    ATtiny28 : Core version : V0E  
    AT90S1200 : Core version : V0  
    AT90S2313 : Core version : V1  
    AT90S2323 : Core version : V1  
    AT90S2343 : Core version : V1  
    AT90S4414 : Core version : V1  
    AT90S4433 : Core version : V1  
    AT90S4434 : Core version : V1  
    AT90S8515 : Core version : V1  
    AT90S8535 : Core version : V1  
    ATtiny22 : Core version : V1  
    ATtiny26 : Core version : V1  
    AT90CAN128 : Core version : V2E  
    AT90CAN32 : Core version : V2E  
    AT90CAN64 : Core version : V2E  
    AT90PWM2 : Core version : V2E  
    AT90PWM216 : Core version : V2E  
    AT90PWM2B : Core version : V2E  
    AT90PWM3 : Core version : V2E  
    AT90PWM316 : Core version : V2E  
    AT90PWM3B : Core version : V2E  
    AT90PWM81 : Core version : V2E  
    ATmega128 : Core version : V2E  
    ATmega1284P : Core version : V2E  
    ATmega128A : Core version : V2E  
    ATmega16 : Core version : V2E  
    ATmega161 : Core version : V2E  
    ATmega162 : Core version : V2E  
    ATmega163 : Core version : V2E  
    ATmega164P : Core version : V2E                                                                                              
    ATmega164PA : Core version : V2E                                                                                             
    ATmega165 : Core version : V2E                                                                                               
    ATmega165P : Core version : V2E                                                                                              
    ATmega165PA : Core version : V2E                                                                                             
    ATmega168 : Core version : V2E                                                                                               
    ATmega168P : Core version : V2E                                                                                              
    ATmega168PA : Core version : V2E                                                                                             
    ATmega169 : Core version : V2E                                                                                               
    ATmega169P : Core version : V2E                                                                                              
    ATmega169PA : Core version : V2E                                                                                             
    ATmega16A : Core version : V2E                                                                                               
    ATmega16HVA : Core version : V2E                                                                                             
    ATmega16HVB : Core version : V2E                                                                                             
    ATmega16M1 : Core version : V2E                                                                                              
    ATmega32 : Core version : V2E                                                                                                
    ATmega323 : Core version : V2E                                                                                               
    ATmega324P : Core version : V2E                                                                                              
    ATmega324PA : Core version : V2E                                                                                             
    ATmega325 : Core version : V2E                                                                                               
    ATmega3250 : Core version : V2E  
    ATmega3250P : Core version : V2E  
    ATmega325P : Core version : V2E  
    ATmega328P : Core version : V2E  
    ATmega329 : Core version : V2E  
    ATmega3290 : Core version : V2E  
    ATmega3290P : Core version : V2E  
    ATmega329P : Core version : V2E  
    ATmega32A : Core version : V2E  
    ATmega32C1 : Core version : V2E  
    ATmega32HVB : Core version : V2E  
    ATmega32M1 : Core version : V2E  
    ATmega406 : Core version : V2E  
    ATmega48 : Core version : V2E  
    ATmega48P : Core version : V2E  
    ATmega48PA : Core version : V2E  
    ATmega64 : Core version : V2E  
    ATmega644 : Core version : V2E  
    ATmega644P : Core version : V2E  
    ATmega644PA : Core version : V2E  
    ATmega645 : Core version : V2E  
    ATmega6450 : Core version : V2E  
    ATmega649 : Core version : V2E  
    ATmega6490 : Core version : V2E  
    ATmega649P : Core version : V2E  
    ATmega64A : Core version : V2E  
    ATmega64C1 : Core version : V2E  
    ATmega64HVE : Core version : V2E  
    ATmega64M1 : Core version : V2E  
    ATmega8 : Core version : V2E  
    ATmega8515 : Core version : V2E  
    ATmega8535 : Core version : V2E  
    ATmega88 : Core version : V2E  
    ATmega88P : Core version : V2E  
    ATmega88PA : Core version : V2E  
    ATmega8A : Core version : V2E  
    ATmega8HVA : Core version : V2E  
    AT86RF401 : Core version : V2
    ATmega103 : Core version : V2
    ATtiny13 : Core version : V2
    ATtiny13A : Core version : V2
    ATtiny167 : Core version : V2
    ATtiny2313 : Core version : V2
    ATtiny2313A : Core version : V2
    ATtiny24 : Core version : V2
    ATtiny24A : Core version : V2
    ATtiny25 : Core version : V2
    ATtiny261 : Core version : V2
    ATtiny261A : Core version : V2
    ATtiny4313 : Core version : V2
    ATtiny43U : Core version : V2
    ATtiny44 : Core version : V2
    ATtiny44A : Core version : V2
    ATtiny45 : Core version : V2
    ATtiny461 : Core version : V2
    ATtiny461A : Core version : V2
    ATtiny48 : Core version : V2
    ATtiny84 : Core version : V2
    ATtiny85 : Core version : V2
    ATtiny861 : Core version : V2
    ATtiny861A : Core version : V2
    ATtiny87 : Core version : V2
    ATtiny88 : Core version : V2
    ATxmega128A1 : Core version : V3X
    ATxmega128A3 : Core version : V3X
    ATxmega128D3 : Core version : V3X
    ATxmega16A4 : Core version : V3X
    ATxmega16D4 : Core version : V3X
    ATxmega192A3 : Core version : V3X
    ATxmega192D3 : Core version : V3X
    ATxmega256A3 : Core version : V3X
    ATxmega256A3B : Core version : V3X
    ATxmega256D3 : Core version : V3X
    ATxmega32A4 : Core version : V3X
    ATxmega32D4 : Core version : V3X
    ATxmega64A1 : Core version : V3X
    ATxmega64A3 : Core version : V3X
    ATxmega64D3 : Core version : V3X
    AT90USB1286 : Core version : V3
    AT90USB1287 : Core version : V3
    AT90USB162 : Core version : V3
    AT90USB646 : Core version : V3
    AT90USB647 : Core version : V3
    AT90USB82 : Core version : V3
    ATmega1280 : Core version : V3
    ATmega1281 : Core version : V3
    ATmega128RFA1 : Core version : V3
    ATmega16U2 : Core version : V3
    ATmega16U4 : Core version : V3
    ATmega2560 : Core version : V3
    ATmega2561 : Core version : V3
    ATmega32U2 : Core version : V3
    ATmega32U4 : Core version : V3
    ATmega32U6 : Core version : V3
    ATmega640 : Core version : V3
    ATmega8U2 : Core version : V3
    Dla ciekawskich skrypt bash wyłuskujący to z plików *def.inc :
    #!/bin/bash
    # VerAVRAsm="2.1.17"
    VerAVRAsm="2.1.42"
    if [ -d "${HOME}/Devel/AVR/AvrAssembler2-${VerAVRAsm}/Appnotes" ]; then
            echo "Include directory \"${HOME}/Devel/AVR/AvrAssembler2-${VerAVRAsm}/Appnotes\" exist"
    else
            echo "Include directory \"${HOME}/Devel/AVR/AvrAssembler2-${VerAVRAsm}/Appnotes\" does not exist"
            exit 1
    fi
    CatPartNameCore(){
    find "${HOME}/Devel/AVR/AvrAssembler2-${VerAVRAsm}/Appnotes" \
    -name '*def.inc'\
    | while read AppNote; do
            PartNameCore=$(cat "${AppNote}" |\
            grep -E \(PART_NAME\|CORE_VERSION\) |\
            tr '[\n\r]' ' '|\
            sed -e "s;^.*PART_NAME\s;;" -ne "s;\s#.*CORE_VERSION;: Core version :;p")
            [ -n "${PartNameCore}" ] && echo "${PartNameCore}"
    done
    }
    CatPartNameCore | sort -V -k 3 -t ":"
  • #5 9018864
    victoriii
    Poziom 19  
    Właśnie, wydaje mi się, że to te "wersje".
  • #6 9032932
    Lumberjack
    Poziom 10  
    W zasadzie chodzi mi o umiejetność programowania danego rdzenia w danym języku. Czy metodyka programowania uC różnych firm ale z danym rdzeniem ARM jest taka sama. Np. w AVR mamy do czynienia ze zgodnością metodyki tzn. piszac program pod Atmege8 i wgrywajac go do Atmega256 wszystko bedzie funkcjonować Czy to samo tyczy sie uC z takim samym rdzeniem?
  • Pomocny post
    #7 9033042
    LordBlick
    VIP Zasłużony dla elektroda
    Ja osobiście nie mam problemów z przenaszalnością kodu w firmowym asemblerze Atmela, nawet pomiędzy różnymi wersjami rdzenia, gdyż są w nim wbudowane definicje pozwalającej na asemblację warunkową. Przykład - instrukcja lpm, zamiast której używam następujące makro:
    .macro LpmPlus
    #if ((__CORE_VERSION__==V2E)|(__CORE_VERSION__==V3)|(__CORE_VERSION__==V3X))
    	#message Device __PART_NAME__ ( Core = ""__CORE_VERSION__"") - using ""lpm rd,z+/lpm rd,-z/lpm rd,z"".
    	lpm @0, Z+
    #else
    	#message Device __PART_NAME__ ( Core = ""__CORE_VERSION__"") - using "lpm" alone.
    	lpm
    	ld @0, Z+ ; Increment ZL:ZH
    	mov @0, ML
    #endif	// #if ((__CORE_VERSION__==V2E)|(__CORE_VERSION__==V3))/**/
    .endmacro
    Z drugiej strony, w dziale DIY Konstrukcje jest prosta pozytywka, która była uruchamiana na ATmega8515, a kod docelowy jest na ATmega8. Pomimo, ze to jest na tej samej wersji rdzenia, konieczne była zmiana z Timer0 na Timer2, gdyż ten pierwszy w ATmega8 nie posiada przerwania "On Compare Match", podczas, gdy w ATmega8515 ono jest. Jak widać, nie ma uniwersalnej reguły, szczegóły jak zwykle w notach aplikacyjnych... ;)
    Co do wgrywania wsadu skompilowanego na inny mikrokontroler, to raczej nie działa (głównie przez różnie obłożone wektory przerwań, listę rozkazów - np. powyżej 8kB dochodzi call, a rcall jest inaczej kompilowany), co więcej jako przykład podam ATtiny2313 vs. ATtiny2313A - wsad skompilowany na ten pierwszy może się dziwnie zachowywać, gdyż ATtiny2313A ma dwa wektory przerwań więcej (2xPC_INT).
REKLAMA