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

ATmega128 UART asm jak wylaczyc kompatybilnosc z 103??

vidmo 30 Mar 2010 17:02 2336 9
REKLAMA
  • #1 7899327
    vidmo
    Poziom 14  
    witam
    Zaczynam z atmega128 i na wstępie mam problem z uart
    avrstudio i asembler
    problem mam mianowicie z dostępem a raczej z wpisem do rejestrów
    UBRRH UCSRC z tego do czego doszedłem po paru godzinach to to ze avrstudio pokazuje mi te rejestry jako NA . Dodam ze fusebit jest wyłaczony M103
    może ktoś mógł by mi to jakoś objaśnić bo nie czaje jak się mam do nich dostać TWI też będzie mi potrzebny, a również jest na NA
    pozdrawiam

    ps.
    ATmega128 ma dwa USART’y: USART0 i USART1. Funkcjonalność obu USART’ów jest opisana poniżej. USART0 i USART1 mają różne rejestry I/O co jest pokazane w „streszczeniu rejestrów” na stronie 341. Należy zauważyć, że w trybie kompatybilności z ATmega103, USART1 jest niedostępny, jak i rejestry UBRROH i UCRSOC. To oznacza, że w trybie kompatybilności z ATmega103, ATmega128 wspiera tylko asynchroniczną transmisję przez USART0.

    no fajnie ale jak to wylaczyc ;)
  • REKLAMA
  • #2 7899454
    _Robak_
    Poziom 33  
    Hint-> poczytaj o ustawieniach fuse bitów.
  • REKLAMA
  • #4 7899492
    _Robak_
    Poziom 33  
    Musisz mieć go ustawiony na 1. Jeśli tak go ustawisz, to uwierz mi, że tryb zgodności będzie wyłączony.
  • REKLAMA
  • #5 7899518
    vidmo
    Poziom 14  
    ATmega128 UART asm jak wylaczyc kompatybilnosc z 103??



    jest na ff czyli ustawiony zaznaczenie m103 (kompatybilności) daje fd czyli odznaczony (trochę głupio że na odwrót)


    ps. bardzo bym prosił prosty programik w asm pod atmege128

    gdzie się udaje wrzucić coś do rejestru UBRRH np.

    out UBRRH,r17 ; (lub UBRR0H)
    w programie AVRStudio

    pozdrawiam
  • #6 7903079
    Dexter77
    Poziom 28  
    Czy przypadkiem UBRRH nie jest poza zasiegiem instrukcji out? W 128 ( i nowszych AVR) spora czesc rejestrow jest poza zasiegiem tej instrukcji (bodajze do 60h) W tym przypadku musisz uzywac instrukcji sts/lds. Zobacz do pliku m128def.inc Jezeli przy rejestrze UBRRH bedzie napis MEMORY MAPPED to znaczy ze wlasnie z takim rejestrem masz doczynienia.

    UPDATE:
    Sam z ciekawosci zajrzalem. I oto rezultat:
    .equ UBRR0H = 0x90 ; MEMORY MAPPED
  • #7 7903142
    vidmo
    Poziom 14  
    zaraz zerknę . Ale...
    dla czego w dokumentacji PDF atmela nie ma o tym mowy dla czego w 2 ksiażkach na temat avr tez tego nie ma


    racje masz tu jest problem. wszystkie rejestry powyżej &60 są nie dostępne UBRRL jest po niżej i dla tego jest dostępny
    i to by załatwiło problem --- działa wiec ok :) tylko pod deburgerem avrstudio nie widać adresy ale to jest do prze zycia;)
  • REKLAMA
  • #8 7903192
    Dexter77
    Poziom 28  
    Tak jak napisalem. To jest w pliku m128def.inc:

    ; NOTE:
    ; Definitions marked "MEMORY MAPPED"are extended I/O ports
    ; and cannot be used with IN/OUT instructions

    W zmianka w dokumentacji tez jest:

    The ATmega128 is a complex microcontroller with more peripheral units than can be supported within the 64 location reserved in Opcode for the IN and OUT instructions. For the Extended I/O space from $60 - $FF in SRAM, only the ST/STS/STD and LD/LDS/LDD instructions can be used.

    Jesli tworzysz projekt ktory zawiera m128 lecz bedzie emulowal m103 to ustawiasz odpowiedni fusebit i kompilujac program dolaczasz plik m103def.inc a nie m128. Pozatym symulatorowi podajesz ze to jest mega103 a nie mega128. Moze wlasnie tutaj lezy tez problem...

    UPDATE:
    Z tego co widze to wogole ustawianie tych rejestrow w mega128 jest troche pokrecone ;) Taki kod u mnie w symulatorze AVRStudio dziala...
    
    #include "m128def.inc"
    
    ldi r16,10
    sts UBRR0H,r16
    out UBRR0L,r16
    
    petla:
    rjmp petla
    

    Do rejestru UBRR0H trzeba przez sts sie dobierac, a do UBRR0L poprzez out... Namieszane, ale coz... The ATmega128 is a complex microcontroller.... ;)
  • #9 7903279
    vidmo
    Poziom 14  
    nie chce żadnej emulacji m103. czysty 128 do tego zmierzam .
    co do dokumentacji atmela dla atmega128 zerknij proszę na przykładowy kod inicjacji uart ;) zobaczysz out a nie sts ;)
    co do rejestrów po wyżej 60 to fakt czytajac Dolinskiego coś tam było napisane ze po wyżej takich a takich trzeba innych komend używać ale jakoś nie połączyłem tego może z faktu tego fusebita m103
  • Pomocny post
    #10 7903321
    Dexter77
    Poziom 28  
    Faktycznie, kod inicjalizacyjny jest napisany dla m103. Ale jest tez odnosnik i na dole jest napisane:

    For I/O registers located in extended I/O map, “IN”, “OUT”, “SBIS”, “SBIC”, “CBI”, and “SBI” instructions must be replaced with instructions that allow access to extended I/O. Typically “LDS” and “STS” combined with “SBRS”, “SBRC”, “SBR”, and “CBR”.

    Widac Panom odpowiedzialnym za tworzenie dokumentacji za duzo wciskalo sie kombinacji CTRL+C CTRL+V ;) Dopisali tylko formulke dodatkowa i tam gdzie trzeba (pod warunkiem ze nie zapomnieli ;) ) to ja doklejali ze jednak ten kod powinien wygladac inaczej ;) Taki to juz znak naszych czasow ze wszystko robione w pospiechu i czas wypuszczenia produktu na rynek musi byc krociutki. Cierpi na tym m.in. dokumentacja.
REKLAMA