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

[Rozwiązano] WinAVR a nietypowy procesor

nuclear 28 Sty 2011 23:38 2030 16
  • #1 9071726
    nuclear
    Poziom 15  
    Witam
    Mam takie pytanie, jest zrealizowany procesor, zgodny z listą rozkazów AVR (dokładnie z atmega8), w sumie zgodny tez z programatorem na SPI, tylko ze posiada 64kB RAM i 64k x 16b pamięci na program. Jest jakiś sposób żeby dodać taki układ do bibliotek WinAVR tak żeby kompilator uwzględnił przy kompilacji że układ ma takie zasoby do wykorzystania? Bo jeśli chodzi o programator "avrdude" to widziałem ze wystarczy chyba zmodyfikować odpowiednio plik avrdude.conf zeby można było dodać układ o innej sygnaturze i profilu programowania(rozmiar strony itp). Natomiast martwi mnie kwestia kompilatora... ktoś się zajmował tymi bibliotekami i wie jak do tego podejść?
  • #3 9071939
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #4 9072011
    acid12
    Poziom 21  
    w makefile definiujesz swoj 'nowy' tym procka, np ATMEGA8_EXT

    w folderze C:\WinAVR\avr\include\avr

    jest plik który zawsze jest dołączany gdy sie pisze program czyli "io.h" który jest odpowiedzialny za rozpoznanie typu procka i podłączenie jego biblioteki.

    dodaj linijke np.:
    #elif defined (__AVR_ATmega8_EXT__)
    #  include <avr/iom8_ext.h>


    w tym samym katalogu znajdziesz plik "iom8.h" (io atmega 8) wktórym definiuje sie wszystkie ważne rzeczy. skopiuj go, nazwij odpowiednio np ("iom8_ext.h"), tak aby "io.h" mogło go dodać oraz zmień co Cie interesuje

    Ciebie powinno zainteresować
    
    /* Constants */
    #define SPM_PAGESIZE 64
    #define RAMEND		 0x45F
    #define XRAMEND		 RAMEND
    #define E2END		 0x1FF
    #define E2PAGESIZE   4
    #define FLASHEND	 0x1FFF
    


    komentarz z pliku "io.h" powinien tez pomóc
    Cytat:

    /** \file */
    /** \defgroup avr_io <avr/io.h>: AVR device-specific IO definitions
    \code #include <avr/io.h> \endcode

    This header file includes the apropriate IO definitions for the
    device that has been specified by the <tt>-mmcu=</tt> compiler
    command-line switch. This is done by diverting to the appropriate
    file <tt>&lt;avr/io</tt><em>XXXX</em><tt>.h&gt;</tt> which should
    never be included directly. Some register names common to all
    AVR devices are defined directly within <tt>&lt;avr/common.h&gt;</tt>,
    which is included in <tt>&lt;avr/io.h&gt;</tt>,
    but most of the details come from the respective include file.

    Note that this file always includes the following files:
    \code
    #include <avr/sfr_defs.h>
    #include <avr/portpins.h>
    #include <avr/common.h>
    #include <avr/version.h>
    \endcode
    See \ref avr_sfr for more details about that header file.

    Included are definitions of the IO register set and their
    respective bit values as specified in the Atmel documentation.
    Note that inconsistencies in naming conventions,
    so even identical functions sometimes get different names on
    different devices.

    Also included are the specific names useable for interrupt
    function definitions as documented
    \ref avr_signames "here".

    Finally, the following macros are defined:

    - \b RAMEND
    <br>
    The last on-chip RAM address.
    <br>
    - \b XRAMEND
    <br>
    The last possible RAM location that is addressable. This is equal to
    RAMEND for devices that do not allow for external RAM. For devices
    that allow external RAM, this will be larger than RAMEND.
    <br>
    - \b E2END
    <br>
    The last EEPROM address.
    <br>
    - \b FLASHEND
    <br>
    The last byte address in the Flash program space.
    <br>
    - \b SPM_PAGESIZE
    <br>
    For devices with bootloader support, the flash pagesize
    (in bytes) to be used for the \c SPM instruction.
    - \b E2PAGESIZE
    <br>
    The size of the EEPROM page.





    oft.: zawsze chciałem się pobawić z FPGA ale dla amatora te płytki rozwojowe sa ciut za drogie, a i lutowanie tych 'scalaczków' czyms innym niz hotairem to porywanie sie chyba z motyka na słońce ;)
  • #5 9072155
    tymon_x
    Poziom 30  
    acid12 napisał:
    oft.: zawsze chciałem się pobawić z FPGA ale dla amatora te płytki rozwojowe sa ciut za drogie, a i lutowanie tych 'scalaczków' czyms innym niz hotairem to porywanie sie chyba z motyka na słońce ;)

    Raczej nie offtop :P Bo innego związku nie widzę, chyba że do jakiegoś symulatora? Wariacje obudowy QFP da się zwykłą kolbówką przylutować taką z ruskiego bazarka, najczęściej do 208 pinów, dalej to tylko Hot-Air :D
    Klik dla nie lubiących się bawić w takie lutowanie.

    PS.
    Czyżby chodziło o ten soft-procesor:
    AVR Core
    AVR Core - OpenCores.org
  • #6 9072401
    marekos
    Poziom 16  
    Altera robi Cyclony w obudowach nawet QFP 240, taki układ da się oczywiście przylutować kolbą tylko co z tego jak taki FPGA potrzebuje paru napięć zasilania i właściwie sensownie nie da się tego rozprowadzić na dwuwarstwowym laminacie i trzeba co najmniej cztery warstwy, a przy amatorskim zastosowaniu właściwie odpada takie rozwiązanie.
  • #7 9072872
    nuclear
    Poziom 15  
    Dzięki wielkie za pomoc, spróbuję to wykorzystać ;) tak kilka słów wyjaśnienia, procesor jest od podstaw napisany przeze mnie w ramach pracy magisterskiej. Język Verilog, wszystkie układy arytmetyczno-logiczne napisane w opisie strukturalnym,reszta mieszanie. Testuję na razie w fpga Actel AGL250 (ledwo się mieści z peryferiami) ale docelowo ma być wykonany jako asic w technologii 150nm. Na razie z peryferiów powstały tylko Timer1,SPI i USART, w asicu dojdzie jeszcze komparator i AD, jak będzie miejsce to więcej liczników. Pamięć zrealizowana jako 2 zewnętrzne pamięci SRAM. Dodatkowo wyprowadzona na zewnątrz główna magistrala danych (razem z 6bit adresem i liniami sterującymi), oraz magistrala do obsługi przerwań. FPGA nie jest może jakies wielkie, raptem 100 nóżek, ale wymaga tylko 2 napięć pracy (1.5 i 3,3) tak więc płytka 2 stronna w zupełności pozwoliła na porządne rozpowadzenie zasilania i umieszczenie praktycznie przy każdej nóżce kondensatorów blokujących(parami, 1nF i 100nF).

    A jednak nie do końca mi się to udało uruchomić... tzn zmodyfikowałem plik io.h oraz dodałem bibliotekę dla własnego procka (nazwałem go iglo), ale gdzieś jeszcze trzeba coś dodać/zmienić bo kompilator go nie "widzi", tzn dostaję komunikat:

    Compiling C: main.c
    avr-gcc -c -mmcu=iglo -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/main.o.d main.c -o main.o
    unknown MCU 'iglo' specified
    Known MCU names:
    avr2
    at90s2313
    at90s2323
    at90s2333
    at90s2343
    ...(długa lista układów)

    tak analizując gdzieś musi być jeszcze plik który dekoduje nazwę procesora, przykładowo dla atmegi8, w pliku makefile wpisuje się nazwę atmega8, a w pliku io.h występuje on pod nazwą (__AVR_ATmega8__).
    Avrdude działa ok po modyfikacji pliku, nakładkę avrdude_giu trzeba by skompilować na nowo wiec z tym na razie sobie poczekam.
  • #8 9074466
    asembler
    Poziom 32  
    A co na to programator? bo chyba bedzie róznica z długoscią strony [PAGE] przy programowaniu chyba że zachowałes długosc strony tak jak w atmeg8..
  • #9 9074622
    robik2
    Poziom 16  
    marekos napisał:
    Altera robi Cyclony w obudowach nawet QFP 240, taki układ da się oczywiście przylutować kolbą tylko co z tego jak taki FPGA potrzebuje paru napięć zasilania i właściwie sensownie nie da się tego rozprowadzić na dwuwarstwowym laminacie i trzeba co najmniej cztery warstwy, a przy amatorskim zastosowaniu właściwie odpada takie rozwiązanie.



    Dla amatorskich zastosowań można zrobić pająka :)
    WinAVR a nietypowy procesorWinAVR a nietypowy procesorWinAVR a nietypowy procesorWinAVR a nietypowy procesor


    Przewody dla ułatwienia są "kodowane" barwami czerwone ->3,3V żółte _>2,5V białe ->1,8V JTAG (biała płytka po lewej stronie)->czarne pozostałe barwy to kolejne banki I/O. Wiem wiem cwaniak pokazał tylko 144 piny ale i 208 lutowałem z tym że teraz nie mam po ręką. Do lutowania służyła "zachwalana" wszędzie Aoyue936.


    Kilka zasilań to też nie problem ta biała płytka na środku to zasilacz daje 3,3V 2,5V oraz 1,8V z zewnętrznych 5V. :) Wtyczki można też podpisać (nie mam niestety białego markera). Można też zrobić płytę bazową z pinami a FPGA jako minimodek wtykany w podstawkę na goldpinach.
  • #10 9074774
    tymon_x
    Poziom 30  
    Dobre foto :D

    Ostatnio z 40-pinowego wyświetlacza TFT tak wyprowadziłem sygnały. Po chwili namysłu jak na Swoje dzieło spojrzałem, stwierdziłem że lepiej będzie zrobić na kablach wstążkowych, a zasilanie pojedynczymi (; Też radzę tak Ci zrobić, lutując jednorzędową listwę goldpinów na końcu, idealnie będzie do stykówki.
  • #11 9074860
    nuclear
    Poziom 15  
    Długość strony jest akurat taka sama jak w atmedze8, ale to nie problem bo możliwości konfiguracyjne w avrdude.conf są bardzo duże (łącznie z modyfikacją kodów rozkazów dla programowania), można ustawić że pamięć nie jest stronnicowana (tego nie testowałem) i różne takie. Komunikuję się za pośrednictwem USBASP.
  • #12 9074893
    Konto nie istnieje
    Poziom 1  
  • #13 9075085
    robik2
    Poziom 16  
    Spartan 208 pin też ma raster 0,5
  • #14 9075285
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #15 9082034
    szelus
    Poziom 34  
    nuclear napisał:

    A jednak nie do końca mi się to udało uruchomić... tzn zmodyfikowałem plik io.h oraz dodałem bibliotekę dla własnego procka (nazwałem go iglo), ale gdzieś jeszcze trzeba coś dodać/zmienić bo kompilator go nie "widzi",
    [...]
    tak analizując gdzieś musi być jeszcze plik który dekoduje nazwę procesora, przykładowo dla atmegi8, w pliku makefile wpisuje się nazwę atmega8, a w pliku io.h występuje on pod nazwą (__AVR_ATmega8__).

    To będzie gdzieś w źródłach gcc; raczej będziesz musiał jeszcze przekompilować kompilator.
  • #17 19359473
    nuclear
    Poziom 15  
    Pomysł ze stworzeniem nowej biblioteki na bazie "iom8.h" nie wypalił do końca, ale na moje potrzeby wystarczyła jej tymczasowa modyfikacja. Dzięki za pomoc.
REKLAMA