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

Przesiadka z 51 na AVR: Problemy z asemblerem i AT90S2313 w AVRStudio4

19 Lut 2006 18:59 2504 16
REKLAMA
  • #1 2322927
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #2 2323105
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    A możesz zdracić jaki był error podczas asemblacji pierwszego programu?
    Podstawową regułą używania mnemonikót LD,MOV,ST jest lista instrukcji, tam jest napisane do czego jaki służy i jakie ma warianty.
    Co do pamięci EEPROM to przypuszczam że wystarczy dane w pliku HEX umieścić pod jakimś określonym adresem (dyrektywą ORG), a program obsługujący programator je właduje do pamięci EEPROM.
  • #3 2323265
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #4 2323334
    kaczepa
    Poziom 20  
    Posty: 238
    Pomógł: 32
    Ocena: 5
    Oto szkielet programu

    ***

    .dseg
    .include "2313def.inc" ; Jaki procesor

    ;................................................................... SEGMENT DANYCH W SRAM


    ; Twoje dane


    ;................................................................... SGMENT DANYCH W EEPROM

    .eseg

    .org $0000

    ; Twoje dane w EEPROM


    ;................................................................... SEGMENT KODU PROGRAMU

    .cseg ; DLA AT90S2313

    .org $0000
    rjmp RESET ; 01 - Reset handle
    rjmp int_0 ; 02 - int0
    rjmp int_1 ; 03 - int1
    rjmp timer1_capt1 ; 04 - timer1 capt1
    rjmp timer2_comp1 ; 05 - timer1 comp1
    rjmp timer1_ovf ; 06 - timer1 ovf1
    rjmp timer1_compa ; 07 - timer0 ovf0
    rjmp uart_rx ; 08 - uart rx
    rjmp uart_udre ; 09 - uart,udre
    rjmp uart_rx ; 10 - uart tx
    rjmp ana_comp ; 11 - ana_comp


    ;.................................................................. Program glowny

    Start:

    ; Twoj program



    rjmp START

    ;.................................................................. Obsluga Przerwan

    ;----------------
    int_0:

    ;Twoja obsluga przerwania INT_0

    reti
    ;----------------

    int_1:

    reti
    ;----------------

    timer1_capt1:

    reti
    ;----------------

    timer2_comp1:

    reti
    ;----------------

    timer1_ovf:

    reti
    ;----------------

    timer1_compa:

    reti
    ;----------------

    uart_rx:

    reti
    ;----------------

    uart_udre:

    reti
    ;----------------

    uart_tx:

    reti
    ;----------------

    ana_comp:

    reti
    ;----------------


    ;..................................................................
    ;.................................................................. Ustawienia Poczatkowe

    RESET:

    ; Twoje ustawienia poczatkowe

    ;..................................................................
    ; Watchdog off DLA AT90S2313

    ldi r24,0x1F ; 0x1F = 0b00011111 = 31 Wylaczanie
    out 0x21,r24 ; Watchdog

    ldi r24,0x17 ; 0x17 = 0b00010111 = 23 Watchdoga
    out 0x21,r24 ; Watchdog
    ;..................................................................




    rjmp Start

    ;..................................................................
    ;..................................................................
  • #5 2323409
    Konto nie istnieje
    Konto nie istnieje  
  • #6 2323529
    kaczepa
    Poziom 20  
    Posty: 238
    Pomógł: 32
    Ocena: 5
    Szkielet wyciąłem ze swojego programu który napisałem.Był ok.
    Pozdrawiam :D
  • #7 2325871
    Konto nie istnieje
    Konto nie istnieje  
  • #8 2325975
    hunterhouse
    Poziom 26  
    Posty: 893
    Pomógł: 84
    Ocena: 3
    juz dawno nie pisałem w asm ale wydaje mi sie ze przyczyna twoich problemów moze być nieustawienie rejestrów stosu (SPH I SPL). kiedyś też 2 dni myślałem czemu program nie działa az w koncu po ustawieniu stosu ruszyło.
    chociaż w sumie niby w tej pętli stos jest niepotrzebny to moze o to chodzić.

    pozdrawiam
  • #9 2326074
    _Matik_
    Poziom 19  
    Posty: 390
    Pomógł: 25
    Ocena: 7
    Dziwne ze Twoj program nie dziala. Pierwsze kilka adresow w pamieci programu to wektory przerwan (dokladne informacje w dataszicie), takze dobrze jest instrukcje umieszczac dopiero w nastepnych komorkach (tak jak w programie kolegi kaczepa). Nie powinno miec to jednak wplywu dopoki nie uzywasz przerwan.
    Jesli chodzi o stos (SPH i SPL) to jest on dopiero potrzebny w momencie gdy chcemy wykonac skok do jakies procedury, z mozliwoscia powrotu (instrukcja RET), takze RJMP nie powinien go potrzebowac

    Szczerze polecam poczytanie dokumentacji od konkretnego procka a w celu poznania dyrektyw assemblera i opisu poszczegolnych instrukcji polecam help programu AVRStudio. Przydatne sa tez noty aplikacyjne na stronie atmela.
  • REKLAMA
  • Pomocny post
    #10 2327272
    utg
    Poziom 14  
    Posty: 76
    Pomógł: 4
    Ocena: 1
    U mnie kod:
    .org 0
    start: inc r1
    rjmp start
    działa poprawnie (AVR Studio 4, ver 4.12 sp1 build 462).

    No wiec asemblacja przebiega prawidlowo, lecz podczas debugowania program wyskakuje z obiegu.
    Tzn. co się dzieje ?

    Co do eeprom, spróbuj tak:
    .ESEG
    eevar1: .DW 0x1234
    Po asemblacji wygenerowany zostanie plik nazwa_projektu.eep, wrzucasz go za pomoca programatora na miejsce i jest. Możesz to sprawdzić zczytując eeprom przed i po operacji.

    Troche możesz poczytać np. tu http://www.avrbeginners.net/ .
    Na początek wystarczy jak podzielisz program na segmenty (.cseg, .dseg, .eseg), z adresu 0 wykonasz skok za tablice wektorów przerwań i odrazu ustawisz stos.

    Dobry opis mnemoników tutaj
    http://www.atmel.com/atmel/acrobat/doc0856.pdf

    Pozdrawiam i powodzenia.
  • #11 2330818
    Konto nie istnieje
    Konto nie istnieje  
  • #12 2333629
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Oto moja propozycja projektu do analizy kodu migającego diodką, opartego na Timer/Counter0 - AVRStudio 4.12
    Plik główny "TestLED.asm".
    Załączniki:
    • TestLED.zip (5.96 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #13 2335610
    Konto nie istnieje
    Konto nie istnieje  
  • #14 2337700
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    janchar napisał:
    Problem 1, jak powiedziec debugerowi, ze do procesora mam przylaczony kwarc np. 8MHz.
    Uruchamiasz symulację, nastepnie Debug/AVR Simulator Options (Alt+O)

    janchar napisał:
    Problem 2, Nadal debuger nie lubi sie z dyrektywa .ecode
    Może to dlatego, że AVRasm nie posiada takowej dyrektywy ? Na otarcie łez jest .eseg ;) Przykład :
    #define DEV_MODE_MIN	1
    #define DEV_MODE_MAX	2
    #define SPEED_MAX		2564
    .eseg
    eeDevMode:
    .db DEV_MODE_MIN
    eeDevSpeed:
    .dw SPEED_MAX
    eeVendorString:
    .db "Funy Soft Compana Co. Ltd.", 0
    .dseg //Jakieś dane w RAM
    DevMode:
    .byte 0x01 ; 1 bajt
    DevSpeed:
    .byte 0x02 ; 2 bajty
    RxBuff:
    0x20 ; 32 bajty na bufor
    .cseg ; Dane i kod w pamieci programu
    	rjmp SkipProgramMemoryString
    ProgramMemoryString:
    .db "Taki sobie tekt, byleby coś napisac bla bla....", 10, 13, 0
    SkipProgramMemoryString:
    	ldi r16, '0'
    	//tutaj dalej piszemy sobie kod w AVRasm2
    No ale z danymi w pamieci programu to trzeba adres mnożyć *2 dla pary rejestrów ZL:ZH w lpm. Odpowiednie makro w zamieszczonym wyżej pliku.
    B.T.W. Czytałeś plik pomocy dla AVRasm (C:\Program Files\Atmel\AVR Tools\Help\AVRASM.chm) ? Fajny link ? ;)
  • #15 2339701
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #16 2339990
    GrzesieG
    Poziom 16  
    Posty: 245
    Pomógł: 8
    Ocena: 11
    Aby debuger widział eeprom musisz mu załadować wsad. Mam starszą wersję AVRstudio i u mnie jest to pozycja Up/Download Memories w menu Debug. Wybierasz z listy eeprom, wskazujesz plik *.eep i wciskasz Load and program.
    Co do mnemoników - polecam streszczenie: http://gayos.w.interia.pl/
    Mnie się bardzo podobają te mnemoniki. Są to skróty wyrażeń co dana instrukcja robi. Łatwo zapammiętać a po szczegóły jakie operandy zastosować sięgałem do wykazu.
  • #17 2343866
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemów z programowaniem asemblerem procesora AT90S2313 w środowisku AVRStudio4, zwłaszcza dla osób przesiadających się z architektury 8051. Głównym zagadnieniem było zrozumienie poprawnej organizacji kodu i segmentów pamięci (.cseg, .dseg, .eseg) oraz prawidłowego umieszczania instrukcji i danych, w tym danych w pamięci EEPROM. Wskazano, że pierwsze adresy pamięci programu zajmują wektory przerwań, dlatego kod powinien zaczynać się od skoku (rjmp) za tablicę wektorów. Problemy z działaniem prostych pętli wynikały nie z błędów składniowych, lecz z nieprawidłowego debugowania i braku ustawienia stosu (SPH, SPL) w bardziej złożonych programach. Omówiono także różnice i zastosowania mnemoników LD, MOV, ST oraz sposoby generowania i ładowania plików HEX i EEP do pamięci programu i EEPROM. Podkreślono konieczność ręcznego załadowania pliku EEPROM do debugera, aby widział zawartość pamięci. Poruszono także kwestie konfiguracji symulatora, np. ustawienia częstotliwości kwarcu. Wskazano przydatne źródła dokumentacji i noty aplikacyjne Atmela oraz przykładowe szkieletowe programy asemblerowe dla AT90S2313. Ostatecznie autor potwierdził rozwiązanie problemów i satysfakcję z uzyskanych odpowiedzi.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA