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

ATmega32 – jak wyłączyć JTAG i odzyskać piny portu C w Bascom AVR 1.11.7.7

coshiz 17 Maj 2005 10:27 4677 6
  • #1 1500014
    coshiz
    Poziom 11  
    Posty: 19
    Ocena: 4
    Witam wszystkich,
    Bardzo proszę o pomoc.

    Zakupiłem procesor ATMEGA32 kompatybilny z procesorem ATMEGA8535 i okazuje się że, dodatkowe funkcje portów tego procesora nie zawsze są pożądane a mam trudności z i ch wyłączeniem.
    Dokładnie chodzi o JTAG, którego wyprowadzenia znajdują sie na pinach 24,25,26,27 układu scalonego (obudowa 40 nóżek (klasyczna przewlekana) PDIP) tego procesora. Domyślne włączony JTAG skutecznie uniemożliwia korzystanie z pinów 2,3,4,5
    portu C .
    Pytanie brzmi czy ktoś z Was umie wyłączyć JTAG i w ten sposób przywrócić normalne czyli pierwotne podstawowe funkcje portu C.
    Z góry dziękuję za odpowiedż.
    Dodam że, podjąłem próby wyłączenia JTAG, przy użyciu noty aplikacyjnej tego procesora i funkcji asemblerowych. NIestety nie uzyskałem oczekiwanych rezultatów.
    Natomiast nie znam bascomowego polecenia pozawalającego na konfigurację JTAG. Korzystam z baskoma AVR 1.11.7.7
    Pozdrawiam Coshiz
  • #2 1500062
    Anderian
    Poziom 18  
    Posty: 406
    Pomógł: 9
    Ocena: 3
    wylaczasz Jtaga za pomoca Fuse bity (bitow konfigurachyjnych) poczytaj w dokumentacji jak powinno byc bo ja nie pamietam
  • Pomocny post
    #3 1500264
    bkb
    Poziom 12  
    Posty: 62
    Pomógł: 2
    Ocena: 7
    Wystarczy na początku wyłączyć JTAG wpisując 1 do Bit7 JTD w rejestrze MCUCSR.
    Uwaga! Instrukcję tą należy powtórzyć dwa razy, nie później niż 4 cykle zegarowe.
    Miałem ten sam problem i pomogło. Pozdrawiam.
  • Pomocny post
    #4 1500343
    K_o_n_r_a_d
    Poziom 23  
    Posty: 318
    Pomógł: 86
    Ocena: 9
    Mając otwartego BascomaAVR i ATmega32 w programatorze, klikasz Manual Program, zakładka Lock and Fuse Bits, w grupie Fusebits High zmieniasz Fusebit H na 1: JTAG disable i klikasz na przycisk Write FSH.
    Musisz przy tym uważać, aby nie zmienić innych ustawień (chyba, że tego chcesz)
  • Pomocny post
    #5 1500811
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    W fusebitach nie ma co grzebać, gdy wystarczy kilka instrukcji asemblera :
    push r16
    in r16, MCUCSR
    sbr r16, 1<<JTD
    cli
    out MCUCSR, r16
    out MCUCSR, r16
    sei
    pop r16
    Pozdrawiam, Daniel
  • #6 2864847
    Przemysl
    Poziom 12  
    Posty: 50
    Ocena: 1
    A moze ktos powiedziec jak tego asemblera "przerobic" na C? Albo jak poprawnie dodac wstawke asemblerowa do C? I czy zadziala to z taka wstawka...?? Caly czas chodzi oczywiscie o wylaczenie JTAG...
  • #7 2865059
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Przemysl napisał:
    A moze ktos powiedziec jak tego asemblera "przerobic" na C? Albo jak poprawnie dodac wstawke asemblerowa do C? I czy zadziala to z taka wstawka...?? Caly czas chodzi oczywiscie o wylaczenie JTAG...

    Przecież rozwiązanie podał Light-I :D
    W zasadzie , wystarczy tylko odpowiednio przepisać ;)
    
    asm volatile ("push r16 \n\t");
    asm volatile ("in r16, 0x34  \n\t");
    asm volatile ("ori r16,0x80 \n\t");
    asm volatile ("cli \n\t");
    asm volatile ("out 0x34,r16 \n\t");
    asm volatile ("out 0x34,r16 \n\t");
    asm volatile ("sei \n\t");
    asm volatile ("pop r16 \n\t");
    


    Piotrek

Podsumowanie tematu

✨ W dyskusji omówiono problem wyłączenia interfejsu JTAG w mikrokontrolerze ATmega32, aby odzyskać dostęp do pinów portu C (piny 24-27 w obudowie PDIP 40). Domyślnie włączony JTAG blokuje korzystanie z tych linii. Rozwiązaniem jest wyłączenie JTAG poprzez konfigurację fuse bitów (bitów konfiguracyjnych) w programatorze Bascom AVR 1.11.7.7, gdzie w zakładce "Lock and Fuse Bits" należy ustawić fusebit High na "JTAG disable" i zapisać zmiany. Alternatywnie można wyłączyć JTAG programowo, ustawiając bit JTD (Bit7) w rejestrze MCUCSR na 1 dwukrotnie w ciągu 4 cykli zegarowych, co można zrealizować za pomocą instrukcji asemblerowych lub ich odpowiednika wstawki asemblerowej w języku C. Przykładowy kod asemblerowy do wyłączenia JTAG został podany, a także jego konwersja do wstawki asm w C. Wskazano, że manipulacja fuse bitami jest najprostszym i trwałym rozwiązaniem, natomiast programowe wyłączanie JTAG wymaga powtarzania instrukcji i jest mniej wygodne.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA