Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

atmega16a - przerwanie RX w USART

arturromarr 05 Kwi 2014 23:49 1173 7
  • #1 05 Kwi 2014 23:49
    arturromarr
    Poziom 17  

    Witam,
    Proszę o podpowiedź bo męcze się z użyciem przerwania do odczytania znaku z USART.
    Sama komunikacja jest sprawdzona bo działa przy użyciu prostych funkcji "odbierz_znak, wyslij_znak"
    Problem pojawił się gdy chciałem skorzystać z przerwania do odczytu znaku.
    Kiedyś korzystałem z kości Mega16, Mega32, itp z zapisu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Teraz użyłem pierwszy raz kości Mega16a i nie potrafię użyć przerwania
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Kompilator wysyła ostrzeżenie odnośnie wektora przerwań:
    'SIG_UART_RECV' appears to be a misspelled signal handler

    Wpisywałem wszystko co znalazłem w necie: USART_RX_vect, UART_RXC_vect, USART_RX_vect, itd

    Przerwania oczywiście w main-ie włączone, inne np timer działają poprawnie.

    Jak zapalam bit RXCIE to przestają mi działać zwykłe funkcje do komunikacji UART.
    Jaki jest wektor przerwań RX dla mega16A?
    Czy coś robię źle w inicjacji USART?

    Pozdrawiam Artur

    0 7
  • #2 06 Kwi 2014 00:10
    McMonster
    Poziom 32  

    Wklej wyjście z kompilacji, bo podany komunikat coś nie za bardzo pasuje do wklejonego fragmentu kodu.

    0
  • #3 06 Kwi 2014 00:18
    dondu
    Moderator Mikrokontrolery Projektowanie

    arturromarr napisał:
    Kompilator wysyła ostrzeżenie odnośnie wektora przerwań:
    'SIG_UART_RECV' appears to be a misspelled signal handler

    Zmień na nowe wektory i funkcję ISR(): http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html

    Przyglądnij się także funkcji usart_inicjuj(): http://mikrokontrolery.blogspot.com/2011/03/rs-232-atmega8-komputer-terminal.html

    0
  • #4 06 Kwi 2014 00:20
    arturromarr
    Poziom 17  

    Tak nie pasuje bo akurat co innego było w kolejnej próbie wpisane w wektorze przerwania.

    z tego wklejonego kodu jest taki wynik kompilacji:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #5 06 Kwi 2014 00:26
    dondu
    Moderator Mikrokontrolery Projektowanie

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Cytat:
    Build started 6.4.2014 at 00:25:04
    avr-gcc -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Proba_10.o -MF dep/Proba_10.o.d -c ../Proba_10.c
    avr-gcc -mmcu=atmega16 -Wl,-Map=Proba_10.map Proba_10.o -o Proba_10.elf
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature Proba_10.elf Proba_10.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex Proba_10.elf Proba_10.eep || exit 0
    avr-objdump -h -S Proba_10.elf > Proba_10.lss

    AVR Memory Usage
    ----------------
    Device: atmega16

    Program: 180 bytes (1.1% Full)
    (.text + .data + .bootloader)

    Data: 0 bytes (0.0% Full)
    (.data + .bss + .noinit)


    Build succeeded with 0 Warnings...



    EDIT:
    Skąd wytrzasnąłeś atmega16a w poleceniu kompilacji?
    Zapewne makefile tworzysz ręcznie? Czyżby WinAVR?

    0
  • #6 06 Kwi 2014 00:43
    arturromarr
    Poziom 17  

    tak robiłem go ręcznie.
    wpisałem atmega16a bo taki mam procesor.

    Skompilowałem bez literki a i przerwanie działa. :)
    Wielkie dzięki za pomoc, pewnie długo bym nie pomyślał, że problem może być w makefile.
    Tak przy okazji może jeszcze coś się dowiem:
    Czemu nie powinno być dokładnego modelu procka z literką a i dlaczego wszystko inne mi działało przy wpisanej?
    Czym się różni UART od USART?

    Jeszcze raz bardzo dziękuję i pozdrawiam.

    0
  • #7 06 Kwi 2014 08:26
    excray
    Poziom 39  

    arturromarr napisał:
    Czemu nie powinno być dokładnego modelu procka z literką a i dlaczego wszystko inne mi działało przy wpisanej?

    Może czas przeprosić i zaprzyjaźnić się z AVR Studio?
    arturromarr napisał:
    Czym się różni UART od USART?

    Trybem pracy. ten "S" ma opcjonalnie dodatkowy tryb pracy "Synchroniczny" i w tym celu ma dodatkowe wyprowadzenie XCK do wyprowadzenia sygnału zegarowego w tym trybie.

    0
  • #8 06 Kwi 2014 23:38
    LordBlick
    VIP Zasłużony dla elektroda

    arturromarr napisał:
    Czemu nie powinno być dokładnego modelu procka z literką a i dlaczego wszystko inne mi działało przy wpisanej?
    To nie jest dokładnie tak, jak myślisz, muszą po prostu istnieć odpowiednio nazwane pliki nagłówkowe w katalogu include/avr . Można w ten sposób nawet dodać obsługę dotychczas nieobsługiwanego przez kompilator układu.

    0